Similar presentations:
Seminar_1_3_2025
1.
Задача 1. Дан массив a[1:na]. Сформироватьмассив b[1:nb], содержащий все различные
элементы массива a по одному разу.
Например,
a[1:na]
1
4
2
1
2
2
0
-3
b[1:nb]
1
4
0
-3
0
2. Постановка задачи
Дано: na-цел, a[1:na]-цел.Результат: b[1:nb] -цел
При: na N, na<=lmax
Связь:
∀ i=1,na Ǝ k=1,nb : b[k]=a[i],
∀ t=1,nb, ∀ j=1,nb: t≠j b[t] ≠ b[j].
3. Алгоритм
Алг «новый массив из различных элементов исходного массива»Нач
ввод(na, a[1:na])
nb:=0 {длина массива b}
цикл от i:=1 до na
{проверка присутствия a[i] в массиве b}
j:=1 {текущий номер элемента в маccиве b}
цикл-пока j≤ nb и a[i] ≠ b[j]
j:=j+1
кц
если j>nb то {a[i] отсутствует в b}
{увеличим длину массива b и запишем a[i] в этот массив}
nb:=nb+1
b[nb]:=a[i]
всё
кц
вывод (b[1:nb])
кон
4. Трассировка
a[1:5]1
2
2
1
3
Nb=0, i=1, j=1, nb=1, b= 1
i=2, j=1, 2, nb=2, b= 1
2
i=3, j=1, 2
i=4, j=1
i=5, j=1, 2, 3, nb=3, b= 1
2
3
5.
#include<stdio.h>#define lmax 20
int main()
{int a[lmax+1], b[lmax+1], i, j,na, nb;
do
{printf(«Введите длину массива от 1 до %d\n", lmax);
scanf("%d", &na);
while (getchar()!='\n');
}
while (na<=0 || na>lmax);
printf(«Введите элементы массива\n");
for(i=1;i<=na;i++)
scanf("%d",&a[i]);
6.
nb=0;for(i=1;i<=na;i++)
{
j=1;
while (j<=nb&&a[i]!=b[j])
j=j+1;
if (j>nb )
b[++nb]=a[i];
}
printf(«Получен массив: ");
for(i=1;i<=nb;i++) printf("%10d",b[i]);
return 0;
}
7.
Задача 2. Дана целочисленная матрица A[1:na, 1:ma] и массивцелых чисел B[1:nb]. Найти минимальный среди элементов
матрицы, отсутствующих в массиве.
Например,
1. A[1:na, 1:ma]
2. A[1:na, 1:ma]
1 2 3 4
-5 6 -7 0
-4 3 11 1
1 2 3 4
4 3 2 1
B[1:nb]
B[1:nb]
1 2 3 0 5 -7
1 2 3 4
Min
-5
нет минимума
8. Постановка задачи
Дано: na-цел, ma-цел, a[1:na, 1:ma]-цел, nb-цел,b[1:nb]-цел.
Результат: min-цел, или сообщение “нет
минимума”
При: na є N, na<=lmax, ma є N,
ma<=lmax, nb є N, nb<=lmax
Связь:
Ǝ t=1, na, Ǝp=1,ma: ∀ i=1, na, ∀ j=1,ma
a[t,p] ≤a[i,j] :
∄ t1: t1=1,nb : b[t1] = a[t,p]
min=a[t,p]
9.
Алг «min из элементов матрицы, отсутствующих в исходноммассиве»
Нач
ввод(nb, b[1:nb], na, ma, a[1:na, 1:ma])
min:= Верхняя граница; flag:=false {нет элем. матрицы, отсутств.
в масс.}
цикл от i:=1 до na
цикл от j:=1 до ma {проверка присутствия a[i,j] в массиве b}
k:=1 {текущий номер элемента в маccиве b }
цикл-пока k≤ nb и (a[i, j] ≠b[k]) {не дошли до конца массива
и не нашли элемента, равного текущему элементу матрицы}
k:=k+1 {берем следующий элемент массива}
кц
если k>nb и a[i, j]<=min то {a[i, j] отсутствует в массиве b и не
превышает текущего значения min}
min:=a[i, j]; flag:=true {минимум найден}
всё
кц
кц
если flag=false то вывод(«нет минимума») иначе вывод(min) всё
10.
#include <stdio.h>#include <limits.h>
#define lmax 20
int main()
{
int a[lmax+1][lmax+1], b[lmax+1], flag, na,ma,nb,i,j,k,min;
printf(«введите число строк и столбцов матрицы a\n");
do{
k=scanf("%d%d",&na,&ma);
while(getchar()!='\n') ;
}while(na<=0||ma<=0||na>lmax||ma>lmax||k!=2);
printf(«Введите матрицу %d на %d\n",na,ma);
for( i=1;i<=na;i++)
for( j=1;j<=ma;j++)
scanf("%d",&a[i][j]);
11.
printf(«Введите длину массива b\n");do {scanf("%d",&nb);
while(getchar()!='\n') ;
} while(nb>=lmax||nb<0);
printf(" Введите массив b из %d элементов\n", nb);
for( i=1;i<=nb;i++) scanf("%d",&b[i]);
for(min= INT_MAX, flag=0,i=1;i<=na;i++)
for( j=1;j<=ma;j++)
{k=1;
while (k<=nb&&a[i][j] !=b[k]) k=k+1;
if (k>nb&&a[i][j]<=min)
{ min=a[i][j]; flag=1; }
}
if (flag==0) printf(“нет минимума");
else printf( "min=%d\n",min);return 0;}
programming