Другие языки программирования и технологии
Написать программку на Си
Помогите прогу написать В файле записана последовательность чисел неизвестной длины(возможно пустая) Требуется за один просмотр файла и без запоминанияпоследовательности в массиве определить требуемую характеристику последовательности. Программа должна содержать функцию, которая в качестве параметра имя файла(или указатель на файл) и возвращает требуемое значение. Функция main запрашивает с клавиатуры имя файла, обращается к функции и выводит результат на экран Задача: Вычислить S=[(1-a)/(1-a^n)]*[сумма от i=1 до i=n (x*a^(n-i)]
Довольно туманная формулировка. Нужно проверить, есть в файле последовательность S, или вычислить S?
В файле то что должно быть, и в каком виде?
В файле то что должно быть, и в каком виде?
Как-то вот так. Лет десять не писал на Си, но врде бы все правильно.
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);
}
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. Это один из вариантов
"и возвращает требуемое значение. " - а какое требуется? что функция должна возвращать? ?
"Вычислить S=[(1-a)/(1-a^n)]*[сумма от i=1 до i=n (x*a^(n-i)]" - и при чем тут это? ф-ия должна считывать переменные в эту формулу что ли? ? Тогда в каком формате они должны быть туда записаны? ? по порядку?.. .
Для считывания одного символа строки используй ф-ию getc. Это один из вариантов
Вышеприведенная программа содержит кучу ошибок и работать не будет. Целиком мне писать такую программу лень, но на очевидные ошибки укажу.
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;
}
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
Похожие вопросы
- Нужна помощь. На языке Си написать программку.
- Написать программу на Си
- Нужно написать программу на СИ++, которая переводит с паскаля на СИ++
- «Помогите пожалуйста! Очень надо!! ! Нужно написать на языке Си (именно на СИ) . Заранее СПАСИБО!!!»
- помогите написать программу на Си
- Подскажите, как правильно написать сортировку на СИ++ (два вложенных цикла)...
- Срочно!!! Помогите написать программку Pascal!!!Очень надо!!!
- Помогите написать программку в Паскале...
- помогите!!! вопрос по C++ нужно написать программку "заполните массив так, чтобы все его элементы были различны.
- нужно написать программку на ассемблере, к-рая считает факториал числа n