C/C++ - Решение квадратных уравнений на С++

Аватара пользователя
Drongo

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение Drongo »

Цитата Alan85:



помоему слово signed лишнее
C/C++ - Решение квадратных уравнений на С++





Цитата Admiral:



Нужно указывать signed float
C/C++ - Решение квадратных уравнений на С++




Мнения разделились? Изображение



Без signed ошибки нет, но появляется ошибка:


Цитата:



[C++ Ошибка] PolinomTwoStepeny1.cpp(75): E2203 Goto bypasses initialization of a local variable



Попробовал, прикинул, если все



Код:

Код: Выделить всё

goto end;

заменить на

Код:

логично? Логично. Тогда программа компилируется и работает. Изображение

Но всё же два вопроса:

1. Эта замена в данном случае мне кажется равноценной, верно?

2. Чего всё же надо было при ошибке goto? (Этот вопрос я ещё сегодня вечером попробую решить, возьму книгу, сверюсь, уточню)
Аватара пользователя
Alan85

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение Alan85 »

1. Нет. Так как автор предлагал этим трюком закончить выполнение программы окончательно, а break лишь выводит из текущего блока и все идет далее по тексту. Лучше уж тогда exit.

2. Потому что между goto end и самим есть есть два объявления переменных (выходит что они могут быть не объявлены - как будто вырезается часть исходника между goto end и самой меткой, но не в момент компиляции а в реал тайм. Что приведет к ошибки. Исправляется переносом объявления переменных и их инициализации до первого использования goto end. В данном случаи это переменные int i и float D.
Аватара пользователя
Drongo

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение Drongo »

Цитата Alan85:



1. Нет. Так как автор предлагал этим трюком закончить выполнение программы окончательно, а break лишь выводит из текущего блока и все идет далее по тексту. Лучше уж тогда exit.
C/C++ - Решение квадратных уравнений на С++




Спасибо за поправку. Неучёл этого, думал будет выход в конец программы. Изображение


Цитата Alan85:



2. Потому что между goto end и самим есть есть два объявления переменных (выходит что они могут быть не объявлены - как будто вырезается часть исходника между goto end и самой меткой, но не в момент компиляции а в реал тайм. Что приведет к ошибки. Исправляется переносом объявления переменных и их инициализации до первого использования goto end. В данном случаи это переменные int i и float D.
C/C++ - Решение квадратных уравнений на С++




Спасибо!!! Изображение Получилось. Изображение Сместил объявления вверх:



Код:

Код: Выделить всё

...
int main()
{
   int i;
   float D = 0;
...
Аватара пользователя
lxa85

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение lxa85 »

Цитата Drongo:



Код:

4х^2 + 3х – 5 = 0

Оно же в общем виде

Код:

ах^2 + bх с = 0.
C/C++ - Решение квадратных уравнений на С++




Ошибка в минусе. Общий случай неизменный

ax^2 + bx + c = 0

При вводе в программу, мы указываем с = -5. предварительно указав правильный тип переменной.

Нашел
здесь



Цитата:



float f; double d; // Single or double precision real (never unsigned)



Т.е. тип float он в любом случае знаковый.

В справке NetBeans ничего про unsignet float не нашел.
Аватара пользователя
Admiral

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение Admiral »

Drongo, алгоритм ответа был таков, я помнил что для типов существует такая приставка как signed, но не был уверен доступна ли она для float. Через поиск провёл данную комбинацию (вместо того что б проверить компилятором) и вышел на ту тему. Как оказал безграмотное. Насчёт signed float я ошибся - ибо signed/unsigned только для char/int
Is unsigned float legal?


Компилятор говорит что много типов так как, по его мнению объявляют signed int и float.

Что делать, оставить всё как есть. Я проверил, на практике никакого минуса выставлять не требуется. Минус сохраняется в переменной, скомпилив
данный код




Код:

Код: Выделить всё

#include 
int main(int argc, char* argv[])
{
	float b,a,c,D;
	printf("a=");
	scanf("%f",&a);
	printf("b=");
	scanf("%f",&b);
	printf("c=");
	scanf("%f",&c);
	D = (b * b) - (4 * a * c);
	printf("Answer %f",D);
	return 0;
}






И запустив на выполнение с предложенными параметрами
получим корректный расчёт



Цитата:



a=3

b=4

c=-5

Answer 76.000000










Если интересно то минус можно задать так c=-c[/i].

Мнение не разделись, а были предложены варианты.

Alan85 не просто лишние, а кардинально не к месту и недопустимо его с float использовать.



Кроме exit можно использовать return 0 если конечно не void main/WinMain/etc то есть если главная функция программы не без типовая.



lxa85 видимо и в Java (или NetBeans может быть IDE и для С\С++?) решили не вносить путаницу по данному вопросу.
Аватара пользователя
lxa85

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение lxa85 »

Цитата Admiral:



или NetBeans может быть IDE и для С\С++?
C/C++ - Решение квадратных уравнений на С++




NetBeans - это просто среда разработки. У нее есть модули и для C\C++ как одного из основных языков программирования. Есть и для Java, Python, Ruby, MySQL, Pascal и пр.

Но сама среда да, написана на Java.
Аватара пользователя
XEN_STRANGER

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение XEN_STRANGER »

Вот мой вариант проги:





Код: Выделить всё

int x2yravn ()
{
	double a, b, c, x1, x2;
	double error;
	unsigned short int back;
	cout << "Ввод уравнения: " << endl;
	cout << endl << "(a=) ";
	cin >> a;
	cout << "(b=) ";
	cin >> b;
	cout << "(c=) ";
	cin >> c;
    error = GetX2yravn (a, b, c, &x1, &x2);
	if (!error)
	{
		backer ();
	}
    else
	{
		cout << endl << "Ошибка! а=0, уравнение не квадратное" << endl;
	}
	char response;
	cin >> response;
	return 0;
}
// Функция нахождения корней
double GetX2yravn (double a, double b, double c, double *px1, double *px2)
{
	double value = 0;
	if (a == 0)
		value = 1;
	else
	{
		double D;
	    D = b*b - 4*a*c;
		cout << endl << "Дискриминант равен " << D << endl;
		if (D < 0)
		{
			cout << "=====РЕЗУЛЬТАТ============================================";
			cout << endl << "Корней не найдено, дискриминант меньше ноля" << endl;
			cout << "==========================================================" << endl;
		}
		if (D == 0)
		{
			*px1 = -b / (2*a);
			cout << "=====РЕЗУЛЬТАТ============================================";
			cout << endl << "Найден один корень, x = " << *px1 << endl;
			cout << "==========================================================" << endl;
		}
		if (D > 0)
		{
			*px1 = (-b + sqrt(D)) / (2*a);
			*px2 = (-b - sqrt(D)) / (2*a);
			cout << "=====РЕЗУЛЬТАТ============================================";
			cout << endl << "Найдено два корня, x1 = " << *px1 << ", x2 = " << *px2 << endl;
			cout << "==========================================================" << endl;
		}
		value = 0;
	}
	return value;
//----Функция возврата------------------------------------------------------------------------------
int backer ()
{
	unsigned short int back;
	cout << endl << endl<< "Вернуться в главное меню? (Да - 1, Нет - 2)";
	cin >> back;
	cout << endl << endl;
	switch (back)
	{
	case 1:
		{
		   cout << "-----END---------------------------------------------------------";
		   cout << endl << endl << endl << endl << endl << endl << endl;
		   return int x2yravn();
		}
		break;
	case 2:
		{
                                   cout << endl << "Можете закрыть программу.";
	   	   char response;
                                   cin >> response;
		   return 0;
		}
	    break;
	default:
		{
	                   cout << endl << "<Ошибка! Введите коректное число!>" << endl << endl;
		   return backer ();
		}
	}
}
Аватара пользователя
Drongo

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение Drongo »

gusenkovs, где описание программы? Что она делает и т.д.?
Аватара пользователя
gusenkovs

Re: C/C++ - Решение квадратных уравнений на С++

Сообщение gusenkovs »

Программа решает уравнния вида ax^2+bx+c

Код: Выделить всё

#include <math.h>
#include <iostream>
#include <fstream>
using namespace std;
double kkui_discremenant (double a,double b,double c)
{double discreminant=pow(b,2)-4*a*c;
 return discreminant;
}
double x1v (double a,double b,double c)
{double discreminant=kkui_discremenant(a,b,c);
if (discreminant>=0)
{double x1=(sqrt(discreminant)-b)/(2*a);
return x1;}return 0;}
double x2v (double a,double b,double c)
{double discreminant=kkui_discremenant(a,b,c);
if (discreminant>=0)
{double x2=(-sqrt(discreminant)-b)/(2*a);
return x2;};return 0;}
void log(double a,double b,double c,double discremenant,double x1,double x2) 
{
	ofstream outfile("C:\\kku.log",ios::app);
    outfile<<a<<"x^2+"<<b<<"x+"<<c<<endl<<"дискрименант"<<discremenant<<endl<<"x1="<<x1<<endl<<"x2="<<x2<<endl<<"Теорема Виетта"<<"(x-("<<x1<<")(x-("<<x2<<"))"<<endl; 
    outfile.close();}
Ответить

Вернуться в «Программирование и базы данных»