ОФ 1 курс 1 семестр 1 работа
.docФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
Государственное образовательное учреждение высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет “ЛЭТИ” имени В.И. Ульянова (Ленина)»
(СПбГЭТУ)
Кафедра вычислительной техники
Отчет о лабораторной работе
по дисциплине
« Основы алгоритмизации и программирования на языке «Си» »
на тему
«Решение квадратного уравнения»
Выполнили: студенты группы ( )
Проверил: доцент каф. ВТ, к.т.н. (С. Э. Миронов)
Санкт-Петербург
2008
Техническое задание.
Написать и отладить программу нахождения корней квадратного уравнения по традиционной и уточняющей формулам.
Цель работы.
Изучение форматов данных и способов борьбы с погрешностями, возникающими в связи с ограниченностью разрядной сетки.
Форматы данных.
Integer(is_complex) - целый тип, занимает 2 байта, принимает значения от -32768 до 32767
float(a,b,c,d,x1,x2, x3,x4) - вещественный тип, занимает 4 байта, значения ±1,7 *1038
char(cont)-символьный тип, занимает 1 байт, 256 символов.
Словесное описание алгоритма
Вывод сообщений «Нахождение корней кв уравнения» и «Введите а,б,с».
Ввод а,б,с.
Если а=0,б=0,с=0: вывод сообщения «Корень любое число».
Если а=0,б=0: вывод сообщения «Решений нет».
Если а=0 вывод сообщения «Уравнение линейное, корень = -б/2а».
Если а,б,с не равны 0: вывод сообщения «Уравнение квадратное и имеет 2».
Нахождение дискриминанта.
Если дискриминант == 0 : вывод сообщения «совпадающих корня х1,2=-б/2а», d=-d (значение дискриминанта становится с противоположным знаком).
Если дискриминант > 0: вывод «корня:» , нахождение корня из дискриминанта, х1=-б/2а и х2=d/2а..
Если корни комплексные вывод их на экран
Если нет то вывод обычных корней и их уточненных корней на экран.
Вывод сообщения «Продолжить?»
Если нажат символ «n» или «N» , то выход из программы если нет , то повтор предыдущих действий.
Примеры:
1. Naxo*denie kornei kvadratnogo yravnenij
Vvedite a,b,c
2
-7
3
Yravnenie kvadratnoe i imeet 2 kornj:
x1 = 3.00
x2 = 0.50
x3 = 0.50
x4 = 0.50
prodol*it?
2.Vvedite a,b,c
0
2
3
Yravnenie lineinoe,koren'=-1.50
prodol*it?
3.Vvedite a,b,c
0
0
1
Rewenii net
prodol*it?
4.Vvedite a,b,c
0
0
0
Rewenie luboe 4islo
prodol*it?
5. Vvedite a,b,c
4
2
3
Yravnenie kvadratnoe i imeet 2 kompleksnblx kornj:
x1 = -0.25 + i * 0.83
x2 = -0.25 - i * 0.83
prodol*it?
Вывод.
Возможно наличие ошибок, в связи с чем необходимо ввести другой (более широкий) тип данных, либо откорректировать данную программу.
Приложение1
#include<conio.h>
#include<stdio.h>
#include<math.h>
void main()
{
clrscr(); //очистка экрана
float a,b,c,d,x1,x2,x3,x4;
char cont;
int is_complex=0;
printf("Naxo*denie kornei kvadratnogo yravnenij");
do
{
printf("\nVvedite a,b,c\n");
scanf("%f %f %f",&a,&b,&c); //считывание переменных с экрана
if(a==0)
if(b==0)
if(c==0)
printf("\nRewenie luboe 4islo\n");
else
printf("\nRewenii net\n");
else
printf("\nYravnenie lineinoe,koren'=%5.2f\n",-c/b);
else
{
printf("\nYravnenie kvadratnoe i imeet 2 ");
d=b*b-4*a*c; //нахождение дискримининта
if (d==0)
printf(" sovpadauw,ix kornj: x1,2=%5.2f\n", -b/(2*a));
else
{
if (d<0)
{
printf(" kompleksnblx ");
is_complex=1;
d=-d;
}
printf("kornj:\n");
d=sqrt(d);
x1=-b/(2*a);
x2=d/(2*a);
if(is_complex)
printf(" x1 = %5.2f + i * %5.2f\n x2 = %5.2f - i * %5.2f\n",x1,x2,x1,x2);
else {
printf(" x1 = %5.2f\n x2 = %5.2f\n",x1+x2, x1-x2);
if (b>0) //нахождение уточненных корней
{
x3=-2*c/(b+d);
x4=-(x1-x2);
}
else {
x3=x1-x2;
Продолжение приложение1
x4=-2*c/(b-d);
}
printf(" x3 = %5.2f\n x4 = %5.2f\n",x3, x4);
}
}
}
printf("prodol*it?");
fflush(stdin);
scanf("%c",&cont);
}
while(!(cont=='n'||cont=='N'));
}