Организация разветвляющегося вычислительного процесса
Постановка задачи
1. Исходные данные: a,b,c.
2. Математическая модель:
3.Выводимые данные: x, y
4. Аномалии: а) bc ≠ 0, если a<bc; b) ax ≠ 0, если -2 ≤ x ≤ 2
.
Блок-схема алгоритма
Текст программы
#include <stdio.h>
#include<math.h>
main()
{
int a,b,c;
float x,y;
clrscr();
printf ("Vvedite A,B i C cherez probel:");
scanf("%d%d%d",&a,&b,&c);
if(a>=b*c)
x=sqrt(a-b*c);
else
if(b*c!=0)
{x=(float)a/(b*c); }
else
{printf("\nResheniya net!");
exit(1);
}
printf("\nX=%10.4f",x);
if(x>=-2)
y=x*(a+b+c);
else
if(x>=2)
y=log(x)-b;
else
if(x!=0 && a!=0)
y=(a*a+b*c)/(a*x);
else
{printf("\nResheniya net!");
exit(1);
}
printf("\nY=%10.4f",y);
getch(); }
5.2. Организация циклов с известным числом повторений»
Постановка задачи
1. Исходные данные:a,b, xn, xk, dx.
2. Математическая модель:
Определить сумму и количество положительных значений Y и произведение отрицательных.
3. Аномалии: а) (xk-xn)/dx≤0;
б) a≠x если x>0;
в) x≠0;
г) b-3.7x>0.
4.Выводимые данные:
Блок-схема
|
|
Текст программы
#include <stdio.h>
#include<math.h>
#include <conio.h>
main()
{
float a,b,xn,xk,dx;
float x,y,S=0,P=1;
int k=0,f=0;
clrscr();
/*Kontrol vhodnih dannih */
do
{printf("\nVvedite xn,xk,dx ==> ");
scanf("%f%f%f",&xn,&xk,&dx);
}
while((xk-xn)/dx<=0);
printf("\nVvedite a,b==> ");
scanf("%f%f",&a,&b);
x=xn;
printf("\n==================================");
printf("\n| X | Y |");
printf("\n==================================");
while(x<=xk+dx/2)
{
if(x>0)
if(a!=x)
{
y=(a+x)/(a-x)+exp(-x);f=0;}
else
f=1;
else
if(x!=0)
{if(b-3.7*x>0)
{y=cos(x+log(fabs(x)))/sqrt(b-3.7*x);f=0;}
else
f=1;
}
else
f=1;
if (f==0)
{
printf("\n| %10.2f | %10.7f |",x,y);
if(y>0)
{S+=y;k++;}
else
if(y<0)
P*=y;
}
else
printf("\n| %10.4f | R/N |",x);
x+=dx;
}
printf("\n==================================");
printf("\n\nS= %.2f",S);
printf("\n\nP= %.2f",P);
printf("\n\nK= %d",k);
getch();
}
Результаты:
5.3. Обработки одномерного массива
Постановка задачи
1. Исходные данные: массив A(n)
2. Математическая модель:
SA=
Определить максимальный элемент массива (max) А и его номер (nom).
3.Выводимые данные: max, nom, SA.
4. Аномалии: нет.
Блок-схема
Текст программы
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int a[100],i,n,max;
int nom,sum=0;
float sa;
clrscr();
printf("\nVvedite kol-vo elementov massiva A ot 1 do 100 = ");
scanf("%d",&n);
printf("\n Massiv A:");
for (i=0;i<n;i++)
{
a[i]=random(100)-50;
printf("\n a[%d]=%d",i+1,a[i]);
sum+=a[i];
}
sa=(float)sum/n;
max=a[0];nom=0;
for (i=1;i<n;i++)
if (max<=a[i])
{
max=a[i];
nom=i;
}
printf("\n\nMaxim-i element = %d",max);
printf("\nNomer max-go elementa = %d",nom+1);
printf("\nSrednee arifmeticheskoe SA=%5.2f",sa);
getch();}
Результаты
5.4.Обработки одномерного массива с перестановкой элементов
В начальной части массива расположить входящие в его состав нулевые элементы, затем в порядке возрастания отрицательные и затем в порядке убывания положительные элементы.
Текст программы
#include <stdio.h>;
#include <stdlib.h>;
#include <conio.h>
#define N 100
main()
{
int a[N],i,j,k=0,n,l,r;
clrscr();
do
{
printf("Vvedite kol-vo elementov massiva N < 100 = ");
scanf("%d",&n);
}
while (n<2||n>100);
printf("\nVvedite elementi: ");
for (i=0;i<n;++i)
{printf("\n a[%d]=",i);
scanf("%d",&r);
a[i]=r;
}
clrscr();
printf("\nIshodnii massiv:\n\n");
for (i=0;i<n;++i)
{
printf(" a[%d]=%d",i,a[i]);
}
for (i=0;i<n;++i)
if(a[i]==0)
{k++;r=a[i];
for(j=i;j>k-1;j--)
a[j]=a[j-1];
a[k-1]= r;
}
for (i = k; i < n-1; i++)
{
for (l = i, j = i+1; j < n; j++)
if (a[j] < a[l]) l = j;
r = a[i], a[i] = a[l], a[l] = r;
}
i=k;
while (a[i]<0)
i++;
k=i-1;
for (i = k+1; i < n-1; i++)
{
for (l = i, j = i+1; j < n; j++)
if (a[j] > a[l]) l = j;
r = a[i], a[i] = a[l], a[l] = r;
}
printf("\nPreobr massiv:\n\n");
for (i=0;i<n;++i)
{
printf(" a[%d]=%d",i,a[i]);
}
getch();
}
Результаты:
Обработка матрицы.
В квадратной матрице порядка n поменять местами столбец с номером K и строку с номером L
Текст программы
#include <stdio.h>
#include <conio.h>
#define N 5
main()
{
/* ===============ishodnie dannie ========= */
int k,l; /* nomer stolbca i nomer stroki */
int n; /* poryadok */
float a[N][N]; /* matrica */
/* ====== ======= promezhutochnie dannie ==== */
int i,j; /* indeksi */
int error; /* kod oshibki */
float r; /* rabochaya peremennaya dlya perestanovki */
/* ============== proverka ogranichenii */
clrscr();
do
{
printf("Vvedite poryadok matrici:\n");
error=0;
scanf("%d",&n);
if (n<=1 || n>N)
{printf("Oshibka! Povtorite vvod! \n");
error=1;
}
}
while (error);
do
{
printf("Vvedite nomer stolbca i nomer stroki dlya zameni:\n");
error=0;
scanf("%d %d",&k,&l);
if (k<1 || k>n || l<1 ||l>n)
{printf(" Oshibka! Povtorite vvod!\n");
error=1;
}
}
while (error);
/* ========== Vvod matrici =========== */
printf("Vvedite elementi matrici po strokam:\n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{ printf("\na[%d,%d]=",i+1,j+1);
scanf("%f",&r);
a[i][j]=r;
}
/* ============Vivod ishodnoi matrici ===== */
printf("Ishodnaia matrica A:\n");
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("a[%d,%d]=%f;",i+1,j+1,a[i][j]);
printf("\n");
}
/* ========== Preobrazovanie matrici ====== */
for(i=0;i<n;i++)
if (i!=l-1 && i!=k-1)
{
r=a[i][k-1];
a[i][k-1]=a[l-1][i];
a[l-1][i]=r;
}
r=a[l-1][l-1];
a[l-1][l-1]=a[k-1][k-1];
a[k-1][k-1]=r;
/* ============Vivod rezultatov ===== */
printf("Preobrazovannaya matrica A:\n");
/* ====== Vivod po strokam ========== */
for(i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("a[%d,%d]=%f;",i+1,j+1,a[i][j]);
printf("\n");
}
getch();
}
Литература
1. Алексеев Е.Р., Чеснокова О.В. Турбо Паскаль 7.0. Самоучитель. - М.: НТ-Пресс, 2004. – 320с.
2. Касаткин А.И., Вальвачев А.Н. Профессиональное программирование на языке Си: От Турбо Си к Borland С++. – Минск: Вышэйшая школа, 1992. – 240с.
3. Павловская Т.А. С/С++. Программирование на языке высокого уровня. – СПб.: Питер, 2003. – 461с.
4. Паппас К., Мюррей У. Программирование на С и С++. - К.: BHV, 2000. – 320c.
5. Уэйт М., Прата С., Мартин Д. Язык Си. Руководство для начинающих. – М.: Мир, 1988. -512с.
6. Шмидский Я. К. Программирование на языке С/С++. Самоучитель. – М.: Вильямс, 2004. -352с.
Приложение 1.Пример оформления титульного листа пояснительной записки
ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ВМиП
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА К КОНТРОЛЬНОЙ РАБОТЕ
ПО ДИСЦИПЛИНЕ
«ВВЕДЕНИЕ В ИНФОРМАТИКУ»:
«Основы алгоритмизации и программирования на языке СИ»
Выполнил ст. гр. ЭСИС-2015з-уск
Петров Н. Н.
Зачетная книжка №
Преподаватель
Донецк 2015
Приложение 2. Пример оформления рецензии
ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра ВМиП
РЕЦЕНЗИЯ
НА КОНТРОЛЬНУЮ РАБОТУ
ПО ДИСЦИПЛИНЕ
«ВВЕДЕНИЕ В ИНФОРМАТИКУ»:
«Основы алгоритмизации и программирования на языке СИ»
Выполнил ст. гр. ЭСИС-2015з-уск
Петров Н. Н.
Зачетная книжка №
РЕЦЕНЗЕНТ ______________________________
[1] Текстовые файлы, в которых содержится описание используемых в программе элементов.
[2] Служат для уточнения внутреннего представления и диапазона значений стандартных типов
[3] Поток – виртуальный канал связи, создаваемый в программе для передачи данных
[4] Синтаксической ошибки нет. Операция присваивания a=1 формирует результат, который и оценивается на равенство или неравенство нулю. В данном примере присваивание b=0 будет выполнено независимо от значения переменной a.
[5] Обычно применение оператора goto приводит к усложнению программы и затрудняет отладку. Он нарушает принцип структурного программирования, согласно которому все блоки, составляющие программу, должны иметь только один вход и один выход. В большинстве алгоритмов применения этого оператора можно избежать