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

ОАиП, ВМСиС, Заочка, Контрольная № 1, Вариант 23, 2012

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

Министерство образования Республики Беларусь

БГУИР

Факультет заочного обучения

Кафедра: кафедра электронных вычислительных машин

Контрольная работа №1

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

Выполнил студент гр.200501

Специальности ВМСиС

Саранчук А.С.

Проверил: Лукьянова И.В.

(должность, ФИО проверяющего)

Оценка: ________________

________________________

(подпись)

________________________ (дата)

Почтовый адрес:

220037

РБ, г. п. Тереховка, Добрушский р-н, Гомельская обл. ул. Ленина д.38 кв. 2

тел: 8-044-759-68-00

e-mail: art.ss@mail.ru

Вариант 23.

Задание 1. Имеются числа A1,A2,…,AN и B1,B2,…,BN. Составить из них N пар (A1, B1) таким образом, чтобы сумма произведений пар была минимальна. Каждое A1 и B1 в парах встречаются ровно по одному разу.

Блок-схема алгоритма функции main:

Начало

m1=a;

m2=b

vvod()

vyvod()

find()

Конец

Блок-схема алгоритма функции vvod:

Начало

n

i=1

i<=n

m1[i]

i++

i=1

i<=n

m2[i]

i++

Конец

нет

да

нет

да

Блок-схема алгоритма функции vyvod:

Начало

i=1

i<=n

m1[i]

i++

i=1

i<=n

m2[i]

i++

Конец

нет

да

нет

да

Блок-схема алгоритма функции find:

нет

да

нет

да

нет

да

да нет

да нет

Начало

i=1

i<=n

i_mi=i

i_ma=i

j=i

j<=n

m1[i_mi]>m1[j]

m2[i_ma]<m2[j]

j++

buf=m1[i]

m1[i]=m1[i_mi]

m1[i_mi]=buf

buf=m2[i]

m2[i]=m2[i_ma]

m2[i_ma]=buf

i++

i_mi=j

i_ma=j

s=0

i=1

i<=n

m1[i]

m2[i]

m1[i]*m2[i]

s+= m1[i]*m2[i]

i++

s

Конец

Листинг программы:

#include "stdafx.h"

#include "stdio.h"

int a[50],b[50],*m1,*m2;

int n,i,j;

float sr;

void vvod();

void vyvod();

void find();

void vvod()

{

printf("Vvedite N: ");

scanf("%d",&n);

printf("Vvod elementov massiva A: \n");

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

printf("A[%d]= ",i);

scanf("%d",m1+i);

}

printf("Vvod elementov massiva B: \n");

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

printf("B[%d]= ",i);

scanf("%d",m2+i);

}

}

void vyvod()

{

printf("Vyvod elementov massiva A: \n");

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

printf("%d ",*(m1+i));

printf("\n");

printf("Vyvod elementov massiva B: \n");

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

printf("%d ",*(m2+i));

printf("\n");

}

void find()

{

int i_mi,i_ma,buf;

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

i_mi=i;

i_ma=i;

for (j=i;j<=n;j++){

if (*(m1+i_mi)>*(m1+j))

i_mi=j;

if (*(m2+i_ma)<*(m2+j))

i_ma=j;

}

buf=*(m1+i);

*(m1+i)=*(m1+i_mi);

*(m1+i_mi)=buf;

buf=*(m2+i);

*(m2+i)=*(m2+i_ma);

*(m2+i_ma)=buf;

}

printf("rezultat:\n");

int s=0;

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

printf("%d * %d = %d\n",*(m1+i),*(m2+i),((*(m1+i))*(*(m2+i))));

s+=(*(m1+i))*(*(m2+i));

}

printf("summa= %d\n",s);

}

void main()

{

m1=a;

m2=b;

vvod();

vyvod();

find();

}

Результат работы программы:

Задание 2. Ввести строки, в которых имеются круглые, фигурные и квадратные скобки. Проверить, правильно ли они расставлены. Результат вывести на экран. Стандартных функций со строками не использовать.

Блок-схема алгоритма функции main:

Начало

vvod()

vyvod()

result()

Конец

Блок-схема алгоритма функции vvod:

Начало

kol=-1

true

kol++

input[kol]

input[kol]<>”eof”

break

Конец

да нет

да

Блок-схема алгоритма функции vyvod:

нет

да

Начало

i=0

i<kol

input[i]

i++

Конец

Блок-схема алгоритма функции find:

Начало

A

B

i=0

fl=0

i<=sizeof(input[index])

input[index][i]=sc1

fl=0

input[index][i]=’!’

j=i

j<=sizeof(input[index])

input[index][j]=sc2

j++

i++

input[index][j]=’!’

fl=1

Конец

нет

да

нет

да

да нет

да нет

да нет

да нет

A

i=0

i<=sizeof(input[index])

input[index][1]=sc1

input[index][1]=sc2

i++

B

нет

да

k1++

k2++

да нет

C

C

fl=1

&

k1=k2

скобки расставлены верно

скобки расставлены не верно

Блок-схема алгоритма функции rezult:

Начало

i=0

i<kol

find(i,’(’,’)’)

find(i,’{’,’}’)

find(i,’[’,’]’)

i++

Конец

нет

да

Листинг программы:

#include "stdafx.h"

#include "stdio.h"

#include "string.h"

char input[255][255],buf[255]="eof",str[]="()()",*s1;

int kol=-1;

void vvod();

void find(int,char,char);

void vyvod();

void rezult();

void vvod()

{

printf("VVedite stroki:\nDlya okonchaniya vvoda naberite 'eof' i nazmite 'Enter'\n");

while (true){

kol++;

scanf("%s",&input[kol]);

if (strcmp(input[kol],buf))

true;

else

break;

}

}

void find(int index,char sc1,char sc2)

{

printf("skobki %c %c ",sc1,sc2);

int i,j,fl=0;

for (i=0;i<sizeof(input[index]);i++)

{

if (input[index][i]==sc1)

{

fl=0;

input[index][i]='!';

for (j=i;j<sizeof(input[index]);j++)

{

if (input[index][j]==sc2)

{

input[index][j]='!';

fl=1;

break;

}

}

}

}

if (fl==1)

printf("rasstavleny pravil'no");

else

printf("rasstavleny ne pravil'no");

printf("\n");

}

void vyvod()

{

printf("Stroki:\n");

int i;

for (i=0;i<kol;i++)

printf("%s\n",input[i]);

}

void rezult()

{

printf("Rezultat:\n");

int i;

for (i=0;i<kol;i++)

{

printf("V stroke #%d = %s:\n",i+1,input[i]);

find(i,'(',')');

find(i,'{','}');

find(i,'[',']');

}

}

void main()

{

vvod();

vyvod();

rezult();

}

Результат работы программы: