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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2012, 20:30   #1
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Захотел освежить знания по си, и решил переделать свою самую первую лабу) Задался целью написать как можно проще и меньше кода. Ошибка в строках: 6 и 11. Хотелось бы разобраться.
IntelliSense: expected a '}' 6
IntelliSense: expected a ';' 11
error C2146: syntax error : missing ';' before identifier 'sign' 11
error C2078: too many initializers 6

Код:
#include <stdio.h>
#include <windows.h>

void SolveTheExample(float a, float b)
{
	char sign[7] = {"+", "-", "*", "/", "*", "*", "max"};
	float res;
	for(int i=0; i<=7; i++)
	{
		#define SIGN sign[i];
		res = a SIGN b;
		printf("%f %s %f = ", &a, &sign[i], &b, &res);
	}

}

void Calculator()
{
	system("cls");
	float a, b;
	printf("Write 2 numbers separated by space: ");
	scanf("%f %f", &a, &b);
	for(int i=0; i<=7; i++)
	{
		SolveTheExample(a, b);
	}
	printf("\nAgain? 1, exit - any key. ");
}

int main()
{
	int choice = 1;
	while(choice != 0)
	{
		Calculator();
		scanf("%i", &choice);
	}
	return 0;
}
И если есть решения ещё проще и меньше, напишите пожалуйста, будет интересно посмотреть!

Как я понимаю, с #define у меня ничего не получиться так как идёт подстановка текста во время компилирования, т.е. 1 раз?

Последний раз редактировалось Stilet; 24.11.2012 в 20:54.
hvz- вне форума Ответить с цитированием
Старый 25.11.2012, 17:22   #2
Andrew1961
Новичок
Джуниор
 
Регистрация: 25.11.2012
Сообщений: 4
По умолчанию

Ошибка в строке 6 вероятно из за "max" - вряд ли это тип char.
define в цикле не пройдёт - подставляется препроцессором один раз перед компиляцией.
res надо вычислять "тупо" - в цикле по элементам sign[] проверяем значение
i го элемента и выполняем соответствующее действие типа:
if(sign[i] == '+') res = a + b;
if(sign[i] == '*') res = a * b; // ну и так далее по всем значениям операций
...
Иначе вряд ли получится.

Последний раз редактировалось Andrew1961; 25.11.2012 в 17:45.
Andrew1961 вне форума Ответить с цитированием
Старый 25.11.2012, 18:14   #3
hvz-
Форумчанин
 
Регистрация: 14.11.2010
Сообщений: 138
По умолчанию

Цитата:
Сообщение от Andrew1961 Посмотреть сообщение
Ошибка в строке 6 вероятно из за "max" - вряд ли это тип char.
Ну ведь это же символ, и ошибка начала проявляться когда я начал писать третий элемент массива.

Цитата:
Сообщение от Andrew1961 Посмотреть сообщение
res надо вычислять "тупо" - в цикле по элементам sign[] проверяем значение
i го элемента и выполняем соответствующее действие типа:
if(sign[i] == '+') res = a + b;
if(sign[i] == '*') res = a * b; // ну и так далее по всем значениям операций
Эта была первая идея, которая пришла мне в голову, только без if'ов, а switch. Но я понадеялся что есть решения ещё проще.

Накатал новый вариант, но выводит не правильно, может проблема в printf с идентификаторами.
Код:
#include <stdio.h>
#include <windows.h>

float SolveTheExample(float a, float b, int type)
{
	int sign[] = {1, 2, 3, 4, 5, 6, 7};
	float res;
	switch(type)
	{
		case '1':
			return res = a + b;
		case '2':
			return res = a - b;
		case '3':
			return res = a * b;
		case '4':
			return res = a / b;
		case '5':
			return res = a * a;
		case '6':
			return res = b * b;
		case '7':
			return res = (b>a) ? b:a;
		default:
			break;
	}
}

void Calculator()
{
	system("cls");
	float a, b;
	printf("Write 2 numbers separated by space: ");
	scanf("%f %f", &a, &b);
	for(int i=0; i<=7; i++)
	{
		printf("%f %s %f = %.2f\n", &a, &i, &b, SolveTheExample(a, b, i));
	}
	printf("\nAgain? 1, exit - 0. ");
}

int main()
{
	int choice = 1;
	while(choice != 0)
	{
		Calculator();
		scanf("%i", &choice);
	}
	return 0;
}

Последний раз редактировалось hvz-; 25.11.2012 в 18:36.
hvz- вне форума Ответить с цитированием
Старый 25.11.2012, 18:58   #4
Andrew1961
Новичок
Джуниор
 
Регистрация: 25.11.2012
Сообщений: 4
По умолчанию

Попробуйте тип char в массив писать так '+' а не "+" - через одинарные ковычки.
Если хотите использовать switch массив sign оставьте как был и пишите:
case '+':
return res = a + b;
и так далее. (тип type замените на char)

Ваше "проще" получается значительно сложнее )).

Последний раз редактировалось Andrew1961; 25.11.2012 в 19:02.
Andrew1961 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос Kolaps Общие вопросы C/C++ 4 26.04.2012 15:15
Вопрос по mySQL + Вопрос по RichEdit HTL Общие вопросы Delphi 4 01.01.2010 20:22
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос по сокетам и общение как в ICQ.Сложный вопрос... Руслантус Общие вопросы C/C++ 2 12.08.2008 21:10
вопрос по С# Roberto Фриланс 1 17.05.2008 08:12