
ОАиП, ВМСиС, Заочка, Контрольная № 1, Вариант 23, 2012
.docМинистерство образования Республики Беларусь
БГУИР
Факультет заочного обучения
Кафедра: кафедра электронных вычислительных машин
Контрольная работа №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();
}
Результат работы программы: