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

Написать программку на Си

Помогите прогу написать В файле записана последовательность чисел неизвестной длины(возможно пустая) Требуется за один просмотр файла и без запоминанияпоследовательности в массиве определить требуемую характеристику последовательности. Программа должна содержать функцию, которая в качестве параметра имя файла(или указатель на файл) и возвращает требуемое значение. Функция main запрашивает с клавиатуры имя файла, обращается к функции и выводит результат на экран Задача: Вычислить S=[(1-a)/(1-a^n)]*[сумма от i=1 до i=n (x*a^(n-i)]
Довольно туманная формулировка. Нужно проверить, есть в файле последовательность S, или вычислить S?
В файле то что должно быть, и в каком виде?
Денис Плахота
Денис Плахота
21 360
Лучший ответ
Как-то вот так. Лет десять не писал на Си, но врде бы все правильно.

main()
{
printf("Введите имя файла");
scanf("%s", file_name);
printf(“Сумма последовательности в файле %s равна %i”, file_name, Count(file_name));
}

int Count(n_f)
{
FILE *fp;
int SUM = 0;
int a;
int count = 0;
fp = fopen(n_f, "r");
while ((a = (int)getc(fp)) != EOF)
{
count++;
SUM = SUM + (1-а) / (1-а^count) ; /* если я правильно понял формулу*/
}
fclose(fp);
return( SUM);
}
и гдеж взять
"определить требуемую характеристику последовательности. " - что блин за характеристика то???? длина? кол-во цифр??. .
"и возвращает требуемое значение. " - а какое требуется? что функция должна возвращать? ?
"Вычислить S=[(1-a)/(1-a^n)]*[сумма от i=1 до i=n (x*a^(n-i)]" - и при чем тут это? ф-ия должна считывать переменные в эту формулу что ли? ? Тогда в каком формате они должны быть туда записаны? ? по порядку?.. .

Для считывания одного символа строки используй ф-ию getc. Это один из вариантов
Агктим Агктим
Агктим Агктим
11 177
Вышеприведенная программа содержит кучу ошибок и работать не будет. Целиком мне писать такую программу лень, но на очевидные ошибки укажу.

1) НИКОГДА не используйте конструкцию типа while( a != EOF ). Константа EOF соответствует коду 255 (что в кодировке cp1251 соответствует букве 'я' ) так что программа с такой конструкцией может завершиться с очень странными на первый взгляд результатами. Правильно делать так: while( !feof( fp ) )

2) Функция getc считывает байт из файла, а нужно считать число. Число - это не обязательно 1 байт. Так как умник, составлявший ТЗ, ничего не сказал о том, какой формат у чисел и в каком виде они в файл записаны, то о нем остатеся только догадоваться. Вообще, строго говоря, в таком виде задача вообще не имеет однозначного решения. Если предположить, что файл содержит числа в человекочитабельной форме (ASCII), то надо либо писать парсер строки и потом использовать функции типа strtol, strtod для преобразования, либо использовать функции из семейства scanf (и молится, чтобы программу не поломали)

И еще есть замечание скорее по стилю задачи. Постановщик ТУ написал, что имя файла должно вводится с клавиатуры в функции main Так нормальные люди не делают. Правильно имя файла должно вводится в командной строке после имени программы наряду с дургими аргументами. Примерно так

int main( int argc, char * argv[] )
{
if( argc > 1 )
{
fopen( argv[1], "r" );
// Далее пошла работа программы
}
else
{
// Ознакомим человека с инструкцией
printf( "usage: %s <input_filename>", argv[0] );
}
return 0;
}
Вот! Поищи в темах уроки! http://forum.xakep.ru/forumid_302/tt.htm