Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2009, 18:59   #1
сон
 
Регистрация: 13.03.2009
Сообщений: 4
Печаль Задача по Си

вот такая в книжке задачка:
Составить программу для проверки является ли последовательность арифметической прогрессией.

дается решение и код программы, но gcc выдает синтаксическую ошибку:
progression.c: In function 'progression':
progression.c:40: error: expected expression before '%' token


Решение: Реализуем функцию, возвращающую следущие значения:
1 - посл-ть является арифм. прогрессией;
0 - не является;
-1 - недостаточо данных.

Код:
#include <stdio.h>
int progression (FILE *fin);
int main (void)
	{
	char filename [256];
	int res;
	FILE *fin;
	printf ("Input file name ->");
	scanf ("%s", filename);
	fin = fopen (filename, "r");
	
	if (!fin)
		{
		printf ("No file named %s\n", filename);
		return -1;
		}
	res = progression (fin);
	switch (res)
		{
		case 1:
		printf ("Polynumber is an arifmetical progression\n");
		break;
		case 0:
		printf ("Polynumber is not an arifmetical progression\n");
		break;
		case -1:
		printf ("Not enought data in the file\n");
		break;
		}
	fclose (fin);
	return 0;
	}

int progression (FILE *fin)
	{
	int x, y, d;
	if (fscanf (fin,"%d",&y)!=1) return -1;
	if (fscanf (fin,"%d",&x)!=1) return -1;
	d = x-y;
	while (fscanf (fin,"%d",&y)==1)
		{
		if (y-x !=d) return 0;
		x = y;
		}
	return 1;
	}
не понимаю как ее исправить(( помогите

Последний раз редактировалось сон; 13.03.2009 в 19:23.
сон вне форума Ответить с цитированием
Старый 13.03.2009, 19:19   #2
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Код:
#include <stdio.h>
int progression (FILE *fin);
int main (void)
	{
	char filename [256];
	int res;
	FILE *fin;
	printf ("Input file name ->");
	scanf ("%s", filename);
	fin = fopen (filename, "r");
	
	if (!fin)
		{
		printf ("No file named %s\n", filename);
		return -1;
		}
	res = progression (fin);
	switch (res)
		{
		case 1:
		printf ("Polynumber is an arifmetical progression\n");
		break;
		case 0:
		printf ("Polynumber is not an arifmetical progression\n");
		break;
		case -1:
		printf ("Not enought data in the file\n");
		break;
		}
	fclose (fin);
	return 0;
	}

int progression (FILE *fin)
	{
	int x, y, d;
	if (fscanf (fin,"%d",&y)!=1) return -1;
	if (fscanf (fin,"%d",&x)!=1) return -1;
	d = x-y;
	while (fscanf (fin,"%d",&y)==1)
		{
		if (y-x !=d) return 0;
		x = y;
		}
	return 1;
	}
Svetlag вне форума Ответить с цитированием
Старый 13.03.2009, 19:24   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот здесь:
Код:
scanf ("%s", &filename);
И в функции progression:
Код:
while (fscanf (fin,"%d",&y)==1)
Svetlag, сорри, когда писал, вашего поста еще не было )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.03.2009, 19:37   #4
сон
 
Регистрация: 13.03.2009
Сообщений: 4
По умолчанию

всем спасибо!! )) очепятка получилась)) прошу удалить тему
сон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц