
Текст программы:
#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'));
}