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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2012, 17:04   #1
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию Оцените

Написал на си программу, которая решает квадратные и биквадратные уравнения и имеет простенькое меню.Кому не влом оцените пожалуста код, напишите своё мнение,поделитесь советами, может чтото можно сделать по дргому,проще.
Попрошу сильно не плеваться, я же только учусь
Код:
#include <stdio.h>
#include <math.h>

float kvadr()
{
int a, b, c;                       											
float x1, x2, x, d;                      											
printf ( "Введите Переменную a \n" ); 												
scanf ( "%d", &a );                   												
	if (a == 0)																		
	{
	printf ( "Переменная a не может быть равной нулю! \n" ); 	    			  	
	}
	else
	{
	printf ( "Введите Переменную b \n" ); 												
	scanf ( "%d", &b );                   												
	printf ( "Введите Переменную c \n" ); 											
	scanf ( "%d", &c );                   												
	d = b * b - 4 * a * c;                											                   		
		if (d < 0) 		                       											
		{
		printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d );
		printf ( "Корней нет! \n" ); 	    									  		
		}
		else                     	     												
		{
			if (d == 0)       	        											    	
			{
			x = -b / (2 * a); 	
			printf ( "Решение:\n");
			printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d );
			printf( "X= %d / 2 * %d = %f \n", -b, a, x );		       						
			}
			else                      														
			{
			x1 = (-b + sqrt(d)) / (2 * a); 													
			x2 = (-b - sqrt(d)) / (2 * a);
			printf ( "Решение:\n");
			printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d );
			printf( "X1= (%d + %f) / (2 * %d) = %f \n", -b, sqrt(d), a, x1 ); 	   			
			printf( "X2= (%d - %f) / (2 * %d) = %f \n", -b, sqrt(d), a, x2 ); 	     		
			}
		}
	}	
}

float bikvadr()
{
int a, b, c;                       												
float x1, x2, x3, x4, x, t1, t2, t, d;                      										
printf ( "Введите Переменную a \n" ); 												
scanf ( "%d", &a );                   												
	if (a <= 0)																
	{
	printf ( "Переменная a не может быть меньше или равной нулю! \n" ); 	    			  	
	}
	else
	{
	printf ( "Введите Переменную b \n" ); 									
	scanf ( "%d", &b );                   												
	printf ( "Введите Переменную c \n" ); 											
	scanf ( "%d", &c );                   											
	d = b * b - 4 * a * c;                										
		if (d < 0) 		                       											
		{
		printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
		printf ( "Корней нет! \n" ); 	    									  		
		}
		else                     	     												
		{
			if (d == 0)       	        											    	
			{
			t = (-b+sqrt(d)) / (2 * a); 		          								   				
				if (t < 0)
				{
				printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
				printf ( "t= %d /(2 * %d) = %f(Не удовлетворяет условию) \n", -b, a, t); 
				printf ( "Корней нет! \n" );
				}
				else
				{
					if(t == 0)
					{
					x = 0;
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t= %d /(2 * %d) = %f \n", -b, a, t); 
					printf ( "Вернёмся к замене\n");
					printf ( "X = 0\n");
					}
					else
					{
					x1 = sqrt(t);
					x2 = -sqrt(t);
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t= %d /(2 * %d) = %f \n", -b, a, t); 
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = +корень из%f = %f\n", t, x1);
					printf ( "X2 = -корень из%f = %f\n", t, x2);
					}
				}
			}
			else                      														
			{
			t1 = (-b + sqrt(d)) / (2 * a); 													
			t2 = (-b - sqrt(d)) / (2 * a);  
				if(t1 < 0 && t2 < 0)
				{
				printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
				printf ( "t1=(%d + %f)/ 2 * %d = %f (Не удовлетворяет условию)\n", -b, sqrt(d), a, t1); 
				printf ( "t2=(%d - %f)/ 2 * %d = %f (Не удовлетворяет условию)\n", -b, sqrt(d), a, t2);
				printf ( "Корней нет! \n" );
				}
				else
				{
				if(t1 > 0 && t2 > 0)
					{
					x1 = sqrt(t1);
					x2 = -sqrt(t1);
					x3 = sqrt(t2);
					x4 = -sqrt(t2);
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = +корень из%f = %f\n", t1, x1);
					printf ( "X2 = -корень из%f = %f\n", t1, x2);
					printf ( "X3 = +корень из%f = %f\n", t2, x3);
					printf ( "X4 = -корень из%f = %f\n", t2, x4);
					}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.

Последний раз редактировалось Че Гевара; 03.10.2012 в 23:31.
Че Гевара вне форума Ответить с цитированием
Старый 03.10.2012, 17:05   #2
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Код:
				if(t1 > 0 && t2 == 0)
					{
					x1 = sqrt(t1);
					x2 = -sqrt(t1);
					x3 = 0;
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = +корень из%f = %f\n", t1, x1);
					printf ( "X2 = -корень из%f = %f\n", t1, x2);
					printf ( "X3 = 0\n");
					}
				if(t1 == 0 && t2 > 0)
					{
					x1 = 0;
					x2 = sqrt(t2);
					x3 = -sqrt(t2);
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = 0\n");
					printf ( "X2 = +корень из%f = %f\n", t2, x2);
					printf ( "X3 = -корень из%f = %f\n", t2, x3);
					}
				if(t1 > 0 && t2 < 0)
					{
					x1 = sqrt(t1);
					x2 = -sqrt(t1);
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f (Не удовлетворяет условию) \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = +корень из%f = %f\n", t1, x1);
					printf ( "X2 = -корень из%f = %f\n", t1, x2);
					}
				if(t1 < 0 && t2 > 0)
					{
					x1 = sqrt(t2);
					x2 = -sqrt(t2);
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f (Не удовлетворяет условию) \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X1 = +корень из%f = %f\n", t2, x1);
					printf ( "X2 = -корень из%f = %f\n", t2, x2);
					}
				if(t1 < 0 && t2 == 0)
					{
					x = 0;
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f (Не удовлетворяет условию) \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X = 0\n");
					}
				if(t1 == 0 && t2 < 0)
					{
					x = 0;
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f (Не удовлетворяет условию) \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X = 0\n");
					}
				if(t1 == 0 && t2 == 0)
					{
					x = 0;
					printf ( "Решение:\nЗаменим X в квадрате на t\n");
					printf ( "D= %d - 4 * %d * %d = %f \n", b * b, a, c, d ); 
					printf ( "t1=(%d + %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t1); 
					printf ( "t2=(%d - %f)/ 2 * %d = %f \n", -b, sqrt(d), a, t2);
					printf ( "Вернёмся к замене\n");
					printf ( "X = 0\n");
					}
				}
			}
		}
	}	
}
main()
{
int m1, m2;  
printf ( "   ВЫЧИСЛЕНИЕ КОРНЕЙ КВАДРАТНОГО И БИКВАДРАТНОГО УРАВНЕНИЯ \n"); 			
	while (1)
	{
	printf ( "\nВыберите вид уравнения:\n	1)Для того, чтобы решить квадратное уравнение введите 1\n" );
	printf ( "	2)Для того, чтобы решить биквадратное уравнение введите 2 \n" ); 
	printf ( "	3)Для того, чтобы выйти введите 3 \nВвод:\n" ); 
	scanf ("%d",&m1);
		if(m1 == 1)
			{
			kvadr();
				while (1)
				{
				printf ( "\n	1)Если хотите решить ещё одно уравнение, то введите 1\n" ); 
				printf ( "	2)Для того, чтобы выйти в главное меню введите 2 \nВвод:\n" ); 
				scanf ("%d",&m2);
					if(m2 == 1)
					{
					kvadr();
					}
					if(m2 == 2) break;
				}
			}
		if(m1 == 2)
			{
			bikvadr();
				while (1)
				{
				printf ( "\n	1)Если хотите решить ещё одно уравнение, то введите 1\n" ); 
				printf ( "	2)Для того, чтобы выйти в главное меню введите 2 \nВвод:\n" ); 
				scanf ("%d",&m2);
					if(m2 == 1)
					{
					bikvadr();
					}
					if(m2 == 2) break;
				}
			}
		if(m1 == 3) break;
	}
}
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 04.10.2012, 14:41   #3
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Так никто и не ответит?Лень что-ли?
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 04.10.2012, 14:57   #4
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

У меня компилируется с ошибками. Выполнить код не удается.
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 04.10.2012, 15:01   #5
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Я пользуюсь Dev-C++ и всё нормально компилируется
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 04.10.2012, 15:12   #6
three_cats
Форумчанин
 
Аватар для three_cats
 
Регистрация: 27.09.2012
Сообщений: 175
По умолчанию

У меня VS 2008. На первый взгляд, написано хорошо. Попозже потестирую.
Никто

мой блог
three_cats вне форума Ответить с цитированием
Старый 05.10.2012, 17:00   #7
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Может быть это из-за использования символа табуляции?
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 05.10.2012, 18:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А стесняюсь спросить - зачем упрощать программу если ее результаты устраивают?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.10.2012, 18:51   #9
Че Гевара
Форумчанин
 
Аватар для Че Гевара
 
Регистрация: 25.09.2012
Сообщений: 182
По умолчанию

Просто ради интереса хочется узнать, как можно сделать код компактней и акуратней.Чисто в целях самообразования.
Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.
Brian W. Kernighan.
Че Гевара вне форума Ответить с цитированием
Старый 05.10.2012, 19:52   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Переписать можно. Но думаю тогда нужен другой подход к программе.
Возможно классами, или просто функциями.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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