1. TheSoul

    TheSoul Elder - Старейшина

    Joined:
    12 Nov 2007
    Messages:
    83
    Likes Received:
    35
    Reputations:
    0
    Привет всем....
    помогите пожалуйста с прогой

    #include <stdio.h>
    main()
    {
    int i=14,j=2;
    printf("\n i++=%d",i++);
    printf("\n ++i=%d",++i);
    printf("\n --j=%d",--j);
    printf("\n i+=4 =%d",i+=4);
    printf("\n j*=5 %d",j*=5);
    printf("\n i/=j = %d",i/=j);
    printf("\n i%%=3=%d",i%=3);
    i=1;
    printf("\n i<<1 = %d, i<<2 = %d",i<<1,i<<2);
    printf("\n i>>3 = %d",i>>3);
    float f=15.45;
    printf("\n i=%d ",i=f);
    }


    1)Как написать программу читающую с клавиатуры два числа с плавающей точкой и выводящую на экран максимальное из этих чисел,используя
    а)оператор if
    б) операцию ?.

    2) Как написать программу,определяющию в байтах размер данных всех типов
    3)Как написать программу,читающую с клавиятуры десятичное беззнаковое целое число и выводящую битовое (двоичное) представление данного числа.
    Возможный алгоритм:
    Вводим число 15 раз делится на 2 и определяется остаток отделения 0 или 1. Данный остаток и будет представлять один разряд в двоичном представлении.
     
    2 people like this.
  2. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    А какое имеет отношение к задаче приведенный фрагмент кода сомнительного смысла?

    А по условию можно пользоваться std::cin'ом и std::cout'ом?
     
  3. MacTep

    MacTep Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    317
    Likes Received:
    160
    Reputations:
    35
    1)

    #include <stdio.h>

    void main( void )
    {
    double a, b;

    scanf("%lf %lf", &a, &b);

    if(a > b)
    printf("%lf", a);
    else
    printf("%lf", b);
    }

    //////////////////////////

    #include <stdio.h>

    void main( void )
    {
    double a, b;

    scanf("%lf %lf", &a, &b);

    printf( "%lf", a > b : a ? b );
    }

    2)

    #include <stdio.h>

    int main( void )
    {
    printf("Int - %i\n", sizeof(int));
    printf("Char - %i\n", sizeof(char));
    printf("Float - %i\n", sizeof(float));
    printf("Double - %i\n", sizeof(double));

    // Дальнейший алгоритм понятен)))

    return 0;
    }

    3) // Супер кривая реализация - думать лень

    #include <stdio.h>

    int main( void )
    {
    int x, i = 0, j;
    char y[100];

    scanf("%i", &x);

    while(x != 0)
    {
    y[i++] = x % 2 + 48;
    x /= 2;
    }

    for( j = i-1;j >= 0; j--)
    printf("%c", y[j]);
    printf("\n");

    return 0;
    }

    Пишу без компиляции, так что хз, что выйдет.. =)
     
    #3 MacTep, 12 Nov 2007
    Last edited: 12 Nov 2007
  4. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    а раньше люди сами себе лабы делали...
     
    1 person likes this.
  5. MacTep

    MacTep Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    317
    Likes Received:
    160
    Reputations:
    35
    Судя по заданиям, человек тока-тока начал учить С(даж не С++)... Ну, пусть почитает кривенький код:) Да и мне хоть что-то.. А то я со своими базами данных по работе уже .... сам понял...;) Боялся, что такую задачу решить не смогу:)
     
  6. TheSoul

    TheSoul Elder - Старейшина

    Joined:
    12 Nov 2007
    Messages:
    83
    Likes Received:
    35
    Reputations:
    0
    Если бы я знал как её делать,то бы не спрашивал =)...
     
  7. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    А чтобы знать - нужно книжки умные читать. То, что ты спрашиваешь, - это первые пару глав в любой книжке по Си.

    3-е задание:

    Code:
    #include <stdio.h>
    
    void printNum(int n);   // рекурсивная функция
    
    int ss=2;   // в этой переменной находится основание системы счисления
    
    void main(void)
    {
    	unsigned num=0;
    	int i=0;
    
    	scanf("%u", &num);
    
    	for(i=ss;0!=num/i;i*=ss);      // решение
                                       // через
    	for(i/=ss;i>0;i/=ss)           // цикл
    		printf("%u",(num/i)%ss);
    	
    	printf("\n");
    	printNum(num);
    }
    void printNum(int n)   // рекурсивная функция
    {
    	if(0<n/ss)
    	{		
    		printNum(n/ss);
    	}
    	printf("%u", n%ss);
    }
     
    #7 Forcer, 12 Nov 2007
    Last edited: 12 Nov 2007
  8. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Forcer, ну и дела... Рекурсия... Многократные вызовы функций вывода, деление на двойку обычным делением вместо сдвига, остаток остатком вместо конъюнкции. В условии какое-то неясное условие "меньше", вместо проверки на равенство нулю (что оптимизируется компилятором). Да и при том по условию задачи число беззнаковое. Да еще и само деление на двойку вычисляется будь здоров сколько раз. Если уж писать такой плевочек кода - то писать красиво!
     
  9. MacTep

    MacTep Elder - Старейшина

    Joined:
    29 May 2006
    Messages:
    317
    Likes Received:
    160
    Reputations:
    35
    Решение по себе красивое, хоть в алгоритмических языках стараюсь без рекурсий.. Их идеологически вернее в функциональных использовать..
    Но смысл в том, что для новичка в С/С++ это явно будет перебор=)
     
  10. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    Подправил для любой системы счисления + решение через массив.

    2dword
    про сдвиг вначале помнил, а потом забыл :). Про остаток не понял вообще. Насчет условия - разве имеет значение? число подправил - не заметил. Покажи плиз пример красивого кода :)

    P.S. опустил просто по полной :-D
     
    #10 Forcer, 12 Nov 2007
    Last edited: 12 Nov 2007
  11. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    Code:
    #include <stdio.h>
    
    int main(int argc,char**argv)
    {	
    	if(argc!=2){printf("%s <dig>\n",argv[0]);exit(1);}
    	int p=atoi(argv[1]);
    	for(printf("%d is binary -> ",p);p;p>>=1)
    		printf("%d",p%2?1:0);	
    	return printf("\n");
    }
    правда число в обратном порядке выводится) ну это не важно : D
     
  12. Forcer

    Forcer Elder - Старейшина

    Joined:
    12 Apr 2007
    Messages:
    321
    Likes Received:
    98
    Reputations:
    12
    __mad
    :) Кроме всего прочего, зачем вот это:
    Code:
    p%2?1:0
     
  13. __mad

    __mad Elder - Старейшина

    Joined:
    4 Nov 2007
    Messages:
    100
    Likes Received:
    38
    Reputations:
    7
    это для вывода бита... остаток от деления на 2, если он есть (остаток) значит бит установлен в еденичное значение, если его нету (остатка) значит число чётное и бит находится в нулевом положение, а что? : D
     
    1 person likes this.
  14. DWORD

    DWORD Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    129
    Likes Received:
    70
    Reputations:
    -36
    Ну я вовсе не претендую на звание самого чудесного кода, но вот что вышло у меня:
    Code:
    	unsigned int x, i = 32;
    	char bits[33]; // Массив, чтобы не вызывать функции ввывода по несколько раз, создаем вот этот буфер
    	cin >> x;
        // Так как вывод должен идти со старших битов, сдвигаем по-тихонечку 
        //число влево, так как старшие нули нас не интересуют
        while (--i && !(x & (1 << 31))) x <<= 1; 
    
        bits[i + 1] = 0x00;
        for (char k = 0; k <= i;k++)
        	bits[k] = (x >> 31) | 0x30, x <<= 1;
        cout << "\n" << bits;
    Ну понятно, что максимальна длина входного числа 0xFFFFFFFF
     
    #14 DWORD, 12 Nov 2007
    Last edited: 12 Nov 2007
    1 person likes this.
  15. TheSoul

    TheSoul Elder - Старейшина

    Joined:
    12 Nov 2007
    Messages:
    83
    Likes Received:
    35
    Reputations:
    0
    Всем большое Спс...!!!