Поменять местами наименьшие из положительных элементов массивов - C (СИ)
Формулировка задачи:
Помогите довести до ума программу, вот сама задача поставленная передо мной:
Поменять местами наименьшие из положительных элементов массивов А (55) и В (8х7)
1. Размеры массива/матрицы вводятся с клавиатуры
2. Память под них выделяется автоматически
3. Всё надо решить через функции
4. Обязательно на языке Сначала я всё понимал (до ввода вывода двух массивов/матриц), но потом получилась какая-та жесть и я не могу адекватно воспринять код.
Помогите пожалуйста собрать код в единую программу.
Да, кстати. До этого решил задачу - не выделяя динамически память. Может будет проще исправить этот вариант?
СИ!
5. Проблема в том, что всю тему проболел и вот, что своими и не своими усилиями насобирал:#include <stdlib.h> #include <stdio.h> //vvod void vvod(int **p, int na, int nb) { printf ("\n\nVvedite elementi massiva:\n\n"); for (int i=0; i<na; i++) for (int j=0; j<nb; j++) { printf(" stroka %d, chislo %d = ", i+1, j+1); scanf("%d", p+i*na+j); } } //vivod void vivod(int **p, int na, int nb) { for (int i=0; i<na; i++) { for (int j=0; j<nb; j++) printf("%5d", *((int *)p+i*na+j)); printf("\n"); } } //Poisk max int* Find_MAX(int *p, int max_i, int max_j) { int *max = p; for(int i = 0; i < max_i; i++) for(int j = 0; j < max_j; j++) if(*(p+i*max_i + j) > *max) max = (p+i*max_i + j); return max; } //Smena Max void Swap(int *Arr1, int *Arr2, int max_i1, int max_i2, int i1, int j1, int i2, int j2) { int a = *(Arr1 + i1 * max_i1 + j1); *(Arr1 + i1 * max_i1 + j1) = *(Arr2 + i2 * max_i2 + j2); *(Arr2 + i2 * max_i2 + j2) = a; } int main() { int **p, **q; int na, nb, ma, mb; int max_i, max_j; //matrica 1 printf("Razner 1 matrici:\n"); printf("stroki = "); scanf("%d", &na); printf("stolbci = "); scanf("%d", &nb); //videleni pama'ti P p=(int**)malloc(na*sizeof(int)); for(int i=0; i<nb; i++) p[i]=(int *)malloc(nb*sizeof(int)); vvod(p, na, nb); printf("Ishodnaya matrica 1:\n"); vivod(p, na, nb); Find_MAX(*p,max_i,max_j); //matrica 2 printf("\n\nRazner 2 matrici:\n"); printf("stroki = "); scanf("%d", &ma); printf("stolbci = "); scanf("%d", &mb); //videleni pama'ti Q q=(int**)malloc(ma*sizeof(int)); for(int i=0; i<mb; i++) q[i]=(int *)malloc(nb*sizeof(int)); vvod(q, ma, mb); printf("Ishodnaya matrica 2:\n"); vivod(q, ma, mb); Find_MAX(*p,max_i,max_j); system("pause"); return 0; }
#include <iostream> #include <conio.h> #include <stdio.h> using namespace std; //Функция void vvod(int** x, int *t1, int *t2) { int i,j; printf ("vvod n="); scanf ("%d",t1); printf ("vvod m="); scanf ("%d",t2); for (i=0; i<*t1; i++) for (j=0; j<*t2; j++) scanf("%d",&x[i][j]); } void vivod(int** x, int t1, int t2) { int i,j; for (i=0; i<t1; i++) { for (j=0; j<t2; j++) printf("%5d",x[i][j]); printf("\n"); } } void NMmin(int** x, int t1, int t2, int *nmin, int *mmin) { int i,j; *nmin=-1;*mmin=-1; for (i=0;i<t1;i++) { for(j=0;j<t2;j++) if (x[i][j]>0) {*nmin=i;*mmin=j;break;} if (*nmin!=-1) break; } if (*nmin!=-1) { for (i=0; i<t1; i++) for (j=0; j<t2; j++) if ((x[i][j]>0)&&(x[i][j]<x[*nmin][*mmin])) { *nmin=i; *mmin=j; } } } void swap(int** x, int y[10][10], int n1, int m1, int n2, int m2) { int c; c=x[n1][m1]; x[n1][m1]=y[n2][m2]; y[n2][m2]=c; } int main () { int a[10][10],b[10][10]; int na,ma,nb,mb,nminA,mminA,nminB,mminB; printf("Vvod matrici A:\n"); vvod(a,&na,&ma); printf("Vvod matrici B:\n"); vvod(b,&nb,&mb); printf("Исходная матрица A\n"); vivod(a,na,ma); printf("Исходная матрица B\n"); vivod(b,nb,mb); NMmin(a,na,ma,&nminA,&mminA); printf("Matrica A: N=%d M=%d\n",nminA+1,mminA+1); NMmin(b,nb,mb,&nminB,&mminB); printf("Matrica B: N=%d M=%d\n",nminB+1,mminB+1); if ((nminA!=-1)&&(nminB!=-1)) swap(a,b,nminA,mminA,nminB,mminB); printf("Новая матрица A\n"); vivod(a,na,ma); printf("Новая матрица B\n"); vivod(b,nb,mb); getch(); return 0; }
Решение задачи: «Поменять местами наименьшие из положительных элементов массивов»
textual
Листинг программы
#include <locale.h> #include <stdlib.h> #include <stdio.h> void razmer(int &, int &, int); void mclear(int** , int); void input(int** , int , int, int); void print(int** , int , int, int); void minimum(int** , int, int, int &); void replace(int** , int, int, int, int); int main() { setlocale(LC_ALL,"Rus"); int ma, na, mb, nb, min_a=-1, min_b=-1; int ** a, ** b; razmer(ma,na,1); a=(int**)malloc(ma*sizeof(int)); for(int i=0; i<na; i++){ a[i]=(int *)malloc(na*sizeof(int)); } razmer(mb,nb,2); b=(int**)malloc(mb*sizeof(int)); for(int i=0; i<nb; i++){ b[i]=(int *)malloc(nb*sizeof(int)); } input(a, ma, na, 1); print(a, ma, na, 1); input(b, mb, nb, 2); print(b, mb, nb, 2); system("pause"); minimum(a, ma, na, min_a); minimum(b, mb, nb, min_b); replace(a, ma, na, min_a, min_b); replace(b, mb, nb, min_b, min_a); print(a, ma, na, 1); print(b, mb, nb, 2); /* mclear(a, na); mclear(b, nb); printf("\nПамять очищена!\n"); */ system("pause"); return 0; } void razmer(int &m, int &n, int num) { printf("\nРазмер матрицы %d:\n", num); printf("строки = "); scanf("%d", &m); printf("столбцы = "); scanf("%d", &n); system("pause"); } void mclear(int** arr, int n) { for(int i=0; i<n; i++) free(arr[i]); free(arr); } void input(int ** arr, int m, int n, int num) { int i=0, j=0; printf ("\n\nВведите элементы матрицы %d:\n\n", num); for (i=0; i<m; i++) for (j=0; j<n; j++) { printf(" строка %d, столбец %d = ", i+1, j+1); scanf("%d", &arr[i][j]); } } void print(int** arr, int m, int n, int num) { printf("\n\nМатрица %d:\n", num); for (int i=0; i<m; i++) { for (int j=0; j<n; j++) printf("%5d", arr[i][j]); printf("\n"); } } void minimum(int** arr, int m, int n, int &min) { for (int i=0; i<m; i++) { for (int j=0; j<n; j++){ if(arr[i][j]>0){ if(min==-1) { min=arr[i][j]; } else if(min>arr[i][j]){ min=arr[i][j]; } } } } } void replace(int** arr, int m, int n, int min, int min_m) { for (int i=0; i<m; i++) { for (int j=0; j<n; j++){ if(min==arr[i][j]) arr[i][j]=min_m; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д