Текст программы:
#include <conio.h>
#include <stdio.h>
#include <dos.h>
void main ()
{
int k=0,s,i;
char c;
do
{
do
{
clrscr();
printf ("vvedite den K\n");
fflush(stdin);
i=scanf("%3d",&k);
}
while ((k<1) || (k>365) || (i==0));
s=0;
s=((k-1)/7+1);
if (s%2==0) printf ("nedelya chetnaya, rabochaya\n");
else if (k%2==0) printf ("nedelya nechetnaya, chetnii den, raboch\n");
else printf ("vihodnoi\n");
printf ("vihod iz progr n ili N\n");
c=getch();
}while ((c!='n') && (c!='N'));
}
Контрольные примеры:
|
Выходные данные |
Примечания |
k=9 |
nedelya chetnaya, rabochaya |
При верном вводе программа работает корректно |
k=32 |
nedelya nechetnaya, chetnii den, raboch |
При верном вводе программа работает корректно |
k=7 |
vihodnoi |
При верном вводе программа работает корректно |
fghfg |
Vvedite den k |
При неверном вводе программа просит снова ввести К, т.к. стоит цикл на проверку ввода |
65537 |
Введите к |
Введённое число превышает диапазон типа Int, но программа просит снова ввести К т.к. функция Scanf в данной программе считывает только первые 3 цифры.
|
Задание 2:
Описание метода решения.
Для вычисления приближенного значения дифференциального выражения используется метод Эйлера (метод вычисления площади фигуры на координатной плоскости). Для этого необходимо знать начальный координаты x0 и y0, шаг по оси Х, У (для Х и У используется один и тот-же шаг- h) и количество шагов. Для вычисления необходимо начинать ход от начальных координат с шагом по оси Х и У, где х=х0. После первой итерации х поменяет свое значение на х+шаг (h), а у изменится по формуле Эйлера y=y0+h*f(xi,yi), т.е. начальному значению присвоится вновь вычисленное у0=у , следовательно на каждой итерации цикла у0, у и х будут принимать новые значения относительно старых и тем самым двигаться по координатной плоскости до конечной точки.
Блок-схема алгоритма: (стр. №9)
Описание программы.
Входные переменные:
x0 и y0 (начальные координаты) – вещественный тип
h (шаг по оси Х) – вещественный тип
n (количество шагов)- целый тип
Выходные данные:
i (номер шага) - целый тип
x(значение х с шагом h на шаге i) – вещественный тип
y(приближенное значение дифференциального выражения на шаге i) – вещественный тип
В состав программы входит следующее:
Блоки ввода , реализованный с помощь цикла DO WHILE, с проверкой диапазона и типа вводимых значений
{
do{
clrscr();
printf ("vvedite x0 (-20..20)\n");
fflush(stdin);
j=scanf ("%f",&x0);
}while ((x0==0) || (x0<-20) || (x0>20) || (j==0));
}
Блок цикла «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'));
}
