Другие языки программирования и технологии

Найти ошибки в коде. Язык си

Нужно вывести все совершенные числа от 1 до 10000

#include <stdio.h>

#include <conio.h>

void main (void)

{ int a,i,sum=0;

for (i=1, i=<10000,i++)

{ for(a=1; a<i; a++)

{

if (i%a==0)

{sum+=a;}}

if (i==sum)

printf("%d", i);}

_getch();

}
Не увлекайся "{}" с выносом каждого чиха на отдельную строку. кроме случаев когда платят за число строк.

при разработке и правке обычно удобнее "одна строка - один смысловой блок".
переписываю предложенное в этом стиле:
void main (void){
int a,i,sum=0;
for (i=1, i=<10000,i++){
for(a=1; a<i; a++)if (i%a==0)sum+=a;
if (i==sum)printf("%d", i);
}
_getch();
}

Сходу видимые Бяки:
В
for (i=1; i=<10000;i++){ // надо ";", а не ","

В
for(a=1; a<i; a++)if (i%a==0)sum+=a;
нет обнуления суммы перед проверкой очередного числа
Стоит глянуть на
for(a=1,sum=0; a<i; a++)if (i%a==0)sum+=a;
да и крутить этот цикл дальше половины "а" смысла нет - всё равно на то не делится.
ZA
Zhanaidar Aldabekov
27 060
Лучший ответ
>> Найти ошибки в коде
Это задача не для человека, а для компилятора.

>> Лиля Калиде: одна строка - один смысловой блок
А вы попробуйте в этом выражении
for(a=1; a<i; a++)if (i%a==0)sum+=a;
Поставить точку останова на sum+=a. Я бы разбил на 3 строки.
Александр Морозов ИМХО (чуть экстремистское) :
в длинной проге это удобнее одной строкой. (один СМЫСЛОВОЙ блок окидывается одним взглядом и проще отслеживать алгоритм как целое, особенно если он из сотни таких блоков, и надо мотать экран до посинения пока найдешь границы охватывающего блока, забыв с чего он начинался)

когда глючащий блок пойман для отладки по стопам его действительно удобнее поделить на строки (подблоки) для отлова конкретной конструкции. А после выправления конкретной точки опять собрать в одну строку, чтоб не загромождал экран
Александр Морозов И! :
Компилятор не ловит ошибки в логике (типа забытого обнуления) .
он только проверяет на соответствие своим правилам
сам делай придурь а еще на програмиста учиться
позорище
Роман Козиков
Роман Козиков
3 826
то стоит скобка, то не стоит, то есть \n, то нету. . .зачем так быдлокодить?

#include <stdio.h>
#include <conio.h>

void main(){ //(void) идет лесом: ток подумайте о функции, которая принимает параметр, который не является парамемтром! и вы еще называете себя программыстом?

int a,i,sum=0;

for (i=1; i=<10000;i++){//, заменены на ;

for(a=1; a<i; a++)if (i%a==0)sum+=1;//не понял алгоритма, так должно стать лучше

if (sum==0)printf("%d", i);}//тут продолжение пред. строки

_getch();

}
Daniyar Ranbayev
Daniyar Ranbayev
1 324