Просмотр полной версии : С++
Привет всем....
помогите пожалуйста с прогой
#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. Данный остаток и будет представлять один разряд в двоичном представлении.
А какое имеет отношение к задаче приведенный фрагмент кода сомнительного смысла?
А по условию можно пользоваться std::cin'ом и std::cout'ом?
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-е задание:
#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);
}
Forcer, ну и дела... Рекурсия... Многократные вызовы функций вывода, деление на двойку обычным делением вместо сдвига, остаток остатком вместо конъюнкции. В условии какое-то неясное условие "меньше", вместо проверки на равенство нулю (что оптимизируется компилятором). Да и при том по условию задачи число беззнаковое. Да еще и само деление на двойку вычисляется будь здоров сколько раз. Если уж писать такой плевочек кода - то писать красиво!
Решение по себе красивое, хоть в алгоритмических языках стараюсь без рекурсий.. Их идеологически вернее в функциональных использовать..
Но смысл в том, что для новичка в С/С++ это явно будет перебор=)
Подправил для любой системы счисления + решение через массив.
2dword
про сдвиг вначале помнил, а потом забыл :-). Про остаток не понял вообще. Насчет условия - разве имеет значение? число подправил - не заметил. Покажи плиз пример красивого кода :-)
P.S. опустил просто по полной :-D
#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
__mad
:-) Кроме всего прочего, зачем вот это:
p%2?1:0
это для вывода бита... остаток от деления на 2, если он есть (остаток) значит бит установлен в еденичное значение, если его нету (остатка) значит число чётное и бит находится в нулевом положение, а что? : D
Ну я вовсе не претендую на звание самого чудесного кода, но вот что вышло у меня:
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
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot