Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт РГР по программированию!.doc
Скачиваний:
6
Добавлен:
20.09.2019
Размер:
1.43 Mб
Скачать

Текст программы:

#include <conio.h>

#include <stdio.h>

#include <dos.h>

void main()

{

float x0,y0,x,y;

float h;

int i,n,j;

char c;

do {

do {

clrscr();

printf ("vvedite shag h (0.001..1)\n");

fflush(stdin);

j=scanf ("%f",&h);

} while ((h<0.001) || (h>1) || (j==0));

do{

clrscr();

printf ("vvedite x0 (-20..-1,1..20)\n");

fflush(stdin);

j=scanf ("%f",&x0);

}while ((x0==0) || (x0<-20) || (x0>20) || (j==0));

do {

clrscr();

printf ("vvedite y0 (-20..20)\n");

fflush(stdin);

j=scanf ("%f",&y0);

} while ((y0<-20) || (y0>20) || (j==0));

do {

clrscr();

printf ("vvedite n (1..15)\n");

fflush(stdin);

j=scanf ("%d",&n);

} while ((n<1) || (n>15) || (j==0));

clrscr();

x=x0;

printf ("______________________________\n");

printf ("| N | x0 | | y0 |\n");

printf ("______________________________\n");

for (i=1; i<n; i++)

{

y=y0+h*(((x0+y0)/x0));

printf ("| i=%1i,| | x=%5.2f,| | y=%5.2f|\n",i,x,y);

y0=y;

x=x+h;

}

printf ("______________________________\n");

printf ("vihod iz programmi n ili N\n");

c=getch();

}while ((c!='n') && (c!='N'));

}

Контрольные примеры:

Входные данные

Выходные данные

Примечания

h=0.01

При верном вводе программа работает корректно

x0=5

При верном вводе программа работает корректно

y0=4

При верном вводе программа работает корректно

h=rtyrt

Vvedite h (0.001..1)

При неверном вводе программа просит снова ввести h, т.к. стоит цикл на проверку ввода

h=65890

Vvedite h (0.001..1)

Введённое число не входит в допустимый диапазон, программа прости снова ввести h, т.к. стоит цикл на проверку ввода

x0=ghjghj

Vvedite x0 (-20..-1,1..20)

При неверном вводе программа просит снова ввести h, т.к. стоит цикл на проверку ввода

y0=ytuy

Vvedite y0 (-20..20)

При неверном вводе программа просит снова ввести h, т.к. стоит цикл на проверку ввода

n=10

При верном вводе программа работает корректно

n=fghgf

Vvedite n (1..15)

При неверном вводе программа просит снова ввести h, т.к. стоит цикл на проверку ввода

Задание 3:

Описание метода решения.

Для того, чтобы поменять местами строку с максимальным и минимальным элементом необходимо определить в какой строке находятся эти элементы. Для этого происходит пробег по всем элементам матрицы, изначально, самый первый элемент принимается как максимальный и минимальный. Далее происходит сравнение всех последующих элементов с максимальным/минимальным, и если какой-то элемент оказывается больше, меньше этих элементов, то его, соответственно, принимаем за максимальный/минимальный и запоминаем номер строки в котором находится максимум и минимум (изначально номера строк с максимальным/минимальным элементами принимаем равными 1 строке), затем происходит дальнейший пробег по элементам матрицы и сравнением их с максимальным, минимальным элементом (с заменой элементов, если какой-то элемент снова окажется больше максимума, минимума и заменой строк если элементы будут находится находится в других строках). В конце пробега будет известен максимальный и минимальный элементы матрицы и строки в которых они находятся. После пробега и нахождения максимальных и минимальных элементов матрицы и их строк, производится поэлементная замена т.е. первый элемент строки с максимальным элементом матрицы меняется местами с первым элементом строки содержащей минимальным элемент матрицы и .т.д. до конца строки. Если же максимальный и минимальный элементы находятся в одной строке, то замена не происходит.

Блок-схема алгоритма: (стр. №16)

Описание программы.

Входные переменные:

n (количество строк), m(количество столбцов), bij (элемент матрицы) – целый тип

vb (выбор заполнения) – символьный тип

Выходные данные:

imax (строка с максимальным элементом) – целый тип

imin (строка с минимальным элементом) - целый тип

bij (элемент матрицы) - целый тип

В состав программы входит следующее:

  • Блоки ввода , реализованные с помощь цикла DO WHILE, с проверкой диапазона и типа вводимых значений

{

do{

printf("vvedite kol-vo strok-n (3..10)\n");

fflush(stdin);

s=scanf("%d",&n);

}while ((n<3) || (n>10) || (s==0));

}

  • Блок множественного выбора «switch ()»

  • Блок генератора случайных чисел «randomize»

  • Блоки проверки строки с максимальным и минимальным элементом реализованные с помощью разветвлённого алгоритма «if-else»

{

if (b[i][j]>max)

{

max=b[i][j];

imax=i;

}

else if (b[i][j]<min)

{

min=b[i][j];

imin=i;

}

  • Блоки цикла «for» с заполнением элементов массива и форматированным выводом «printf()» элементов массива

{

for (i=1; i<n; i++)

{

y=y0+h*(((x0+y0)/x0));

printf ("| i=%1i,| | x=%5.2f,| | y=%5.2f|\n",i,x,y);

y0=y;

x=x+h;

}

}

  • Блок повторения программы реализован с помощью цикла «do while»:

{

printf ("vihod iz progr n ili N\n");

c=getch();

}while ((c!='n') && (c!='N'));

}