Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОФ 1 курс 1 семестр 1 работа

.doc
Скачиваний:
9
Добавлен:
01.05.2014
Размер:
258.56 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования «Санкт-Петербургский государственный электротехнический университет “ЛЭТИ” имени В.И. Ульянова (Ленина)»

(СПбГЭТУ)

Кафедра вычислительной техники

Отчет о лабораторной работе

по дисциплине

« Основы алгоритмизации и программирования на языке «Си» »

на тему

«Решение квадратного уравнения»

Выполнили: студенты группы ( )

Проверил: доцент каф. ВТ, к.т.н. (С. Э. Миронов)

Санкт-Петербург

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'));

}

9