Можно рассмотреть другой алгоритм решения той же задачи, начав перебор с последнего элемента массива.
Задача 2. Образовать из элементов двух массивов, упорядоченных по возрастанию, новый массив. Элементы нового массива также
Задача 4. Удалить повторяющиеся элементы массива А, отсутствующие в массиве В. Для вычислений используется указатель и
Задача 2. Удалить повторяющиеся элементы массива А, отсутствующие в массиве В. Для вычислений используется указатель и
Задача 3 . Вычислить максимальный среди отрицательных элементов целочисленной матрицы А, не встречающихся в массиве В.
136.42K
Category: programmingprogramming

Seminar_2_2_2025

1.

Задача 1. Перестановка двух последних нечетных
элементов целочисленного массива А. Для обращения к элементам
массива использовать указатель. Форматный ввод-вывод.
В начале цикла
u1=u2=NULL и t=a
u1
u2
++
t
a
1
0
115 21
3
3 124 21
c
3

2.

#include <stdio.h>
int main() {
int a[20], na, *u1, *u2, *t, c, *ua;
printf("Введите 0<n<=100 n = "); scanf("%d", &na);
printf("Введите элементы массива\n");
for (ua=a;ua< a+na; ua++) scanf("%d", ua);
for (t=a, u1=u2=NULL; t<a+na; t++)
if (*t%2!=0)
if (u1==NULL) u1=t; else
if (!u2) u2=t; else u1=u2, u2=t;
if (!u1) printf(“Нет подходящих элементов”); else
if (!u2) printf(“Один нечётный”); else
if (*u1==*u2) printf(“Значения равны”); else
{ c=*u1, *u1=*u2, *u2=c; printf(“Обмен произведён”);
for (t=a; t<a+na; t++) printf(“%5d”,*t ); }
return 0;}

3. Можно рассмотреть другой алгоритм решения той же задачи, начав перебор с последнего элемента массива.

for (t=a + na - 1, u1=u2=NULL; t >= a && (u1 == NULL); t--)
if (*t%2!=0)
if (u2==NULL) u2=t; else
u1 = t;
if (!u2) printf("Нет подходящих элементов“); else
if (!u1) printf("Один нечётный“); else
if (*u1==*u2) printf("Значения равны“); else
{ c=*u1, *u1=*u2, *u2=c; printf("Обмен произведён“);
for (t=a; t<a+na; t++) printf(“%5d”,*t ); }

4. Задача 2. Образовать из элементов двух массивов, упорядоченных по возрастанию, новый массив. Элементы нового массива также

должны быть упорядочены по возрастанию.
A[0:n-1]
1 2 5 6
B[0:m-1]
2 3 4
C[0:n+m-1]
1 2 2 3 4 5 6

5.

#include <stdio.h>
#define Lmax 20
//надежный ввод
int check_input()
{int c,p;
do
{ c=scanf("%d",&p);
while(getchar()!=‘\n’);
}
while(!c);
return p;
}

6.

//ввод массивa с проверкой упорядоченности
int input_array (int a[])
{ int i, n;
do
{ printf (" input n (0<n<=%d :",Lmax);
n=check_input();
}
while(n<1||n>Lmax);
printf(" input # 1=");
a[0]=check_input();
for(i=1;i<n;i++)
do
{printf(" input # %d=", i+1);
a[i]=check_input();
}
while (a[i]<=a[i-1]);
return n;
}

7.

void make_array(int a[], int b[], int c[], int n,int m)
{int i,j,k;
j=0; //индекс в A
k=0; //в B
for(i=0; i<n+m;i++) //номер элемента в C
if (j==n) //все эл-ты A уже в массиве С
c[i]=b[k++];
else
if (k==m) //все эл-ты B уже в массиве С
c[i]=a[j++];
else //есть эл-ты и в A и в B
if (a[j]<b[k])
c[i]=a[j++];
else
c[i]=b[k++];
}

8.

int main()
{ int a[Lmax],b[Lmax], c[2*Lmax],n,m,i;
printf("array a:\n");
n= input_array(a);
printf("array b:\n");
m= input_array(b);
make_array(a,b,c,n,m);
printf("array c:\n");
for(i=0;i< m+n; i++)
printf("%7d",c[i]);
return 0;
}

9. Задача 4. Удалить повторяющиеся элементы массива А, отсутствующие в массиве В. Для вычислений используется указатель и

отдельная функция.

10. Задача 2. Удалить повторяющиеся элементы массива А, отсутствующие в массиве В. Для вычислений используется указатель и

отдельная функция.
#include <stdio.h>
void del_elem(int *na, int a[], int nb, int b[])
{int *ua, *ua1, *ub, d, *t;
for(ua=a; ua<a+*na;ua++)
{ for (ua1=a;ua1<a+*na && (*ua!=*ua1||ua==ua1);ua1++);
if (ua1<a+*na) //повторяется
{for (ub=b;ub<b+nb&&*ua!=*ub;ub++);
if(ub==b+nb) //отсутствует
{d=*ua; //что удаляем
for(ua1=ua, t=ua; ua1<a+*na; ua1++)
if(*ua1!=d) *t++=*ua1;//остаются элементы, не равные удаляемому
*na=t-a; //новая длина массива
ua--; //на место удаленного может попасть повторяющийся элемент
}
}
}

11.

int main()
{ int a[20], b[10], na, nb, *up, len_a;
printf("Введите длину массива A: na = “); scanf(“%d”,&na);
printf("Введите элементы массива A:\n“);
for (up = a; up < a+na; up++)
scanf(“%d”,up);
//ввод массива B аналогично
len_a=na; //исходная длина массива
del_elem(&na,a,nb,b); //вызов функции
if(!na) printf("Полное удаление ");
else if(len_a==na) printf(" Нет удаления ");
else
{ printf(" массив A:\n");
for (up = a; up < a+na; up++)
printf(" %6d”,*up );}
return 0;
}

12. Задача 3 . Вычислить максимальный среди отрицательных элементов целочисленной матрицы А, не встречающихся в массиве В.

Ввод и вывод матрицы, ввод массива и вычисления оформить
в виде отдельных функций.
Формальные параметры функции maxot() (для вычислений):
Вход:
n – количество строк в матрице А,
m – количество столбцов матрицы А,
a – указатель на массив указателей на строки матрицы А,
k – количество элементов в массиве В,
b – указатель на первый элемент массива В,
Выход:
Значение, возвращаемое функцией maxot() - flag – признак
существования max (=false, если max не найден ).
max– искомый элемент (передается по адресу).

13.

#include <stdio.h>
#include <limits.h>//для INT_MIN
//прототипы функций
void vv_matr(int a[][10], int *n, int *m);
void viv_matr(int a[][10], int n, int m);
int vv_mass(int b[]);

14.

int maxot(int n, int m, int a[][10], int k, int b[], int*max)
{int flag=0;
int i,j,t; *max =INT_MIN;
for (i = 0; i < n; i++)
for (j = 0; j < m; j++)
if (a[i][j] < 0)
{
for (t = 0; t < k && a[i][j] != b[t]; t++);
if (t == k)
if (a[i][j] >= *max)
{
*max = a[i][j];
flag = 1;
}
}
return flag;
}

15.

int main()
{
int n, m, a[10][10], k, b[10], max;
vv_matr(a, &n, &m);
// viv_matr(a, n, m);
k = vv_mass(b);
if (maxot(n,m,a, k, b, &max))
printf("max = %7d", max);
else
printf("нет max");
return 0;
}

16.

/* здесь должны располагаться функции vv_matr,
viv_matr, vv_mas см. лекцию , например*/
int vv_mass(int b[]){
int *i, k;
printf("Enter length of array: \n");
scanf("%d", &k);
printf("Enter %d elements of array:\n", k);
for(i=b; i<b+k; i++)
scanf("%d", i);
return k;
}
English     Русский Rules