![]() |
Программа для универа
Я прошу помочь решить одну проблему, но проблема не типа "Решите мне задачу", просто до меня не дойдет как сделать следующее:
"Дан текстовый файл с неизвестным количеством вещественных чисел Написать функцию для определения есть ли среди них число у которого равны сумма цифр целой и дробной части" У меня получилось сделать так, чтобы прграмма отвечала на каждое число, равны ли его сумма дробной и целой части: #include <conio.h> #include <fstream.h> #include <iostream.h> #include <stdlib.h> #include <stdio.h> void main() { char fni[256]; const N = 100; cout<<"enter filename of input file\n"; cin>>fni; double* pn=new double[N]; fstream fi; fstream fo; fi.open(fni,ios::in); for(int i=0;(!fi.eof())&&(i<N);i++) { fi>>pn[i]; char a[20],b[20]; sprintf(b,"%f",pn[i]-((int)pn[i])); char* tb=b; tb+=2; while(*tb=='0') tb++; sprintf(a,"%d",(int)pn[i]); int ia=0,ib=0; char tmp[2]; for(int j=0;j<20;j++) { tmp[0]=a[j]; tmp[1]='\0'; ia+=atoi(tmp); } for(int j=0;tb[j]!='\0';j++) { tmp[0]=tb[j]; tmp[1]='\0'; ib+=atoi(tmp); } if(ia==ib) fo<<printf("DA - EST"); else printf("NET - NETU"); } delete [] pn; fi.close(); fo.close(); getch(); } Потом, я парился парился и допарился, что выводит ответ один, но лишь для первого числа в файле: #include <conio.h> #include <fstream.h> #include <iostream.h> #include <stdlib.h> #include <stdio.h> int main() { char fni[256]; const N=100; cout<<"enter filename of input file\n"; cin>>fni; double* pn=new double[N]; fstream fi; fstream fo; fi.open(fni,ios::in); for(int i=0;(!fi.eof())&&(i<N);i++) { fi>>pn[i]; char a[20],b[20]; sprintf(b,"%f",pn[i]-((int)pn[i])); char* tb=b; tb+=2; while(*tb=='0') tb++; sprintf(a,"%d",(int)pn[i]); int ia=0,ib=0; char tmp[2]; for(int j=0;j<20;j++) { tmp[0]=a[j]; tmp[1]='\0'; ia+=atoi(tmp); } for(int j=0;tb[j]!='\0';j++) { tmp[0]=tb[j]; tmp[1]='\0'; ib+=atoi(tmp); } if(ia==ib) printf("DA - EST"); else printf("NET - NETU"); getch(); return 0; }} А мне нужно, чтобы программа не по первому числу отвечала, а анализируя все. Никто не возьмется меня поправить? |
Вобщем вот мой вариант :-)... я потоки в сишниках не люблю... потому сделал немного по другому, только единственная проблема... у меня тут нет ни сишника, ни хелпа, вобщем нихера нет :-) так что за работоспособность не отвечаю :-) точнее я только сомневаюсь в условиях где я проверял на ansii-код сиволы... посмотри, если не будет работать :-). Там надо сравнить какой код у считываемого символа. Если он входит в диапозон где хранятся цифры, то мы выполняем действи... а если нет, то пропускаем...
Вобщем если будут вопросы пиши :-) будем дальше программить без компилятора :-D #include <stdio.h> #include <conio.h> void main(void){ FILE *f; char fileName[20]; // адрес к файлу printf("Введите имя файла -->"); scanf("%s", fileName); // считываем пусть к нему f = fopen(name, "r"); // берем хандл на файл char number; int left = 0; int right = 0; int comma = -1; int floatIsHere = 0; while(!feof){ // цикл пока не конец файла fscanf(f, "%c", number); if(number == 32){ //32 это ansii-код пробела if(left == right)floatIsHere++; //если лева и правая часть равна, то прибавляем left = 0; // обнуляем сумму цифр левее запятой right = 0; // обнуляем сумму цифр правее запятой comma = -1; // готовимся к обработки следующего числа, т.е. к обработке цифры левее запятой continue; } // end if if(number == ','){ comma = 1; // готовимся к обработке цифр правее запятой continue; // пропускаем все оставшиеся действие цикла и становимся на следующий шаг } // end if if((number => 49) && (number =< 59) && (comma == -1))//я точно не помню ansii-кода символом 1-0 посмотри их left += atoi(number); if((number => 49) && (number =< 59) && (comma == 1)) right += atoi(number); } // ned while if(floatIsHere >= 1)printf("В файле есть бла-бла-бла и их количесво %d", floatIsHere); getch(); } // programm end |
Код:
printf("Введите имя файла -->");Астальное лень смотреть. |
Цитата:
Meister, жаль ты в Си делаешь, в паскале помог бы. |
Цитата:
Цитата:
Dronga, а ты аватару сменил? |
Цитата:
Цитата:
|
Ну про явные ошибки типа void main никто не сказал? =)
|
Господа :-) а может все таки напишим челу программу... ну нашли ошибки, так исправте :-) я ж сказал, что я писал без какого-либо компилятора и хелпа... все писалось из памяти :-(... и в блакноте :-)
А что за ошибка void main(void) ??? мне очень интересно... Чтобы на это матюкались слышу впервые... Расскажи, я реально не знаю |
Цитата:
Иначе не компилирует. (только древние компиляторы проглатывают войд) |
Mymik этот вариант написанный в блокноте весьма неплохой )) (кстати от меня +) я его переделал в полне работоспособный:
Код:
#include <stdio.h>Input.txt Цитата:
Цитата:
|
| Время: 08:27 |