Заменить минимальный элемент массива А максимальным элементом массива В - C (СИ)

  1. Добрый вечер. Не понимаю как работать с функциями, помогите с программой. Заменить минимальный элемент массива А (5х8) максимальным элементом массива В (7х6), а минимум массива В - максимальным элементом массива А.


textual

Код к задаче: «Заменить минимальный элемент массива А максимальным элементом массива В - C (СИ)»

#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int** create_matrix(int rows, int cols)
{
    int i = 0;
    int** matrix = (int**)malloc(sizeof(int*) * rows);
    for (i = 0; i < rows; i++)
        matrix[i] = (int*)malloc(sizeof(int) * cols);
    return matrix;
}
 
void fill_matrix(int** matrix, int rows, int cols)
{
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
        for (j = 0; j < cols; j++)
            matrix[i][j] = rand() % 20;
}
 
void destroy_matrix(int** matrix, int rows)
{
    int i = 0;
    for (i = 0; i < rows; i++)
        free(matrix[i]);
    free(matrix);
}
 
void print_row(const int* row, 
               int size, 
               const char *elem_fmt, 
               const char *row_separator)
{
    while (size--)
        printf(elem_fmt, *row++);
    printf(row_separator);
}
 
void print_matrix(const int** matrix, 
                  const int rows,
                  const int cols,
                  const char *elem_fmt, 
                  const char *row_separator)
{
    int i = rows;
    while (i--)
        print_row(*matrix++, cols, elem_fmt, row_separator);
}
 
struct point
{
    int x, y;
};
 
struct point matrix_max_element(const int** matrix, int rows, int cols)
{
    struct point max_point = { 0, 0 };
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
            if (matrix[i][j] > matrix[max_point.y][max_point.x])
            {
                max_point.x = j;
                max_point.y = i;
            }
    }
    return max_point;
}
 
struct point matrix_min_element(const int** matrix, int rows, int cols)
{
    struct point min_point = { 0, 0 };
    int i = 0, j = 0;
    for (i = 0; i < rows; i++)
    {
        for (j = 0; j < cols; j++)
            if (matrix[i][j] < matrix[min_point.y][min_point.x])
            {
                min_point.x = j;
                min_point.y = i;
            }
    }
    return min_point;
}
 
void replace_value_in_matrix(int** matrix, const struct point* p, int value)
{
    matrix[p->y][p->x] = value;
}
 
int main(void)
{
    int a_rows = 5, 
        a_cols = 8,
        b_rows = 7,
        b_cols = 6;
    struct point a_min, a_max, b_max, b_min;
    int **a, **b;
    srand(time(0));
    a = create_matrix(a_rows, a_cols);
    b = create_matrix(b_rows, b_cols);
    fill_matrix(a, a_rows, a_cols);
    fill_matrix(b, b_rows, b_cols);
 
    a_min = matrix_min_element(a, a_rows, a_cols);
    a_max = matrix_max_element(a, a_rows, a_cols);
 
    b_min = matrix_min_element(b, b_rows, b_cols);
    b_max = matrix_max_element(b, b_rows, b_cols);
    
    print_matrix(a, a_rows, a_cols, "%4d", "\n");
    putchar('\n');
    print_matrix(b, b_rows, b_cols, "%4d", "\n");
    puts("\n");
 
    replace_value_in_matrix(a, &a_min, b[b_max.y][b_max.x]);
    replace_value_in_matrix(b, &b_min, a[a_max.y][a_max.x]);
 
    print_matrix(a, a_rows, a_cols, "%4d", "\n");
    putchar('\n');
    print_matrix(b, b_rows, b_cols, "%4d", "\n");
    puts("\n");
 
    destroy_matrix(a, a_rows);
    destroy_matrix(b, b_rows);
#ifdef _MSC_VER
    system("pause");
#endif
    return 0;
}

СДЕЛАЙТЕ РЕПОСТ

13   голосов, оценка 4.154 из 5



Похожие ответы
  1. Нужно написать рекурсивную функцию (программу) которая будет искать минимальный элемент в массиве.

  1. Всем доброго времени суток! Смотрите, у меня получился код, который меняет местами (отражает зеркально) элементы, расположенные выше главной и побочной диагоналей и ниже их. Элементы диагоналей не затронуты. А мне нужно чтобы был найден максимальный элемент выше главной диагонали и минимальный – ниже ее, и нужно их поменять местами. У кого какие соображения? Я так понимаю нужно поменять условия, начиная с 3 цикла for. Должно быть как на картинке. Код:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 #include //inclusion of libraries #include #include #include   int main() { int i, j, n, massiv_min, massiv_max,swap;   time_t t;   // actual time for initialization // of random number generator   srand((unsigned) time(&t)); // generator initialization   printf("\nInput the lower border of range:"); scanf("%d", &massiv_min); printf("\nInput the upper border of range:"); scanf("%d", &massiv_max); printf("\nInput number of rows and columns:"); scanf("%d", &n);     int massiv[n][n];   printf("\nSource massive:\n");   for (i=0; i

  1. Помогите реализовать задание: Заменить все пары букв «XY» на цифры «12», через do-while. Находил похожее, но там решения так и не было получено.

  1. Привет! Можете помочь в Си? Есть начало, но как именно менять может кто-то подсказать? Дана квадратная матрица действительных чисел размером 6х6. Заменить элементы лежащие ниже главной диагонали соответствующими элементами, лежащими выше главной диагонали, умноженными на максимальный элемент всей матрицыC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 void form_matr (int *a, int n, int m) {     int i,j;     for (i=0;i*max) *max=*(a+i*m+j);         }     }     printf("max= %d ", *max); }  int main()  {      int n=6, m=6, max, a[6][6];      form_matr(&a[0][0], n, m);      f1(&a[0][0], n, m, &max);      getch();      return 0;  }

  1. Ввести в память машины массив размером N. Заменить все нулевые элементы на минимальный. Замену произвести через макрофункцию.

  1. Здравствуйте. Помогите, пожалуйста, исправить ошибку. Дан массив вещественных чисел, состоящий из N элементов (N=10). Найти, в какой его половине находятся минимальный и максимальный элементы.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include #include #define N 10 int main() {     int n=N;     float a[N]={1.2,2.2,3.3,4.4,5.5,6.6,7.7,8.8,99.9,10.1}, *p,*pmin,*pmax;     *pmax=a[0];     *pmin=*pmax;     for(p=a;p<&a[N];p++)     {     if(*p>*pmax)         *pmax=*p;     if(*p<*pmin)         *pmin=*p;     }     if(pmax>&a[n/2]) printf("\nmaximum sprava =%1.f",*pmax);     else printf("\nmaximum sleva =%1.f",*pmax);     if(pmin>&a[n/2]) printf("\nminimum sprava =%1.f",*pmin);     else printf("\nminimum sleva =%1.f",*pmin);     getch();     return 0; }

  1. 2. Дана символьная строка. Заменить все символы '+' на символы '-' кроме второго и вывести полученную строку. "Кроме второго", не получается ввести в код, помогитеC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include #include #include #include   int main() {      char str[20];      int n=0,i,j;      //puts("vvedite stroku\n");      gets(str);      for(i = 0; i < strlen(str); i++)          if(str[i]=='+')              str[i]='-';              for(i = 0; i < strlen(str); i++)              printf("%c",str[i]);         return 0; }

  1. Задается массив строк. Каждая строка включает в себя Фамилию Имя Отчество. Задается две строки (суффиксы) (например, "ov" "idze" или "chuk" "ko") suf1 и suf2. Заменяем все вхождения suf1 в фамилию на suf2. Прим. в данной работе не пользоваться библиотечными функциями string.h.Все необходимые функции реализовывать вручную.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #include"stdio.h" void Replace(char str[],char a[],char b[],char buffer[]) {     int i,j,pos=0;     for(i=0;str[i];i++)     {         for(j=0;str[i+j]&&a[j];j++)   //начинается ли с i-ой позиции строка a             if(str[i+j]!=a[j]) break;         if(!a[j])  //если a[j]=0, то мы дошли до конца строки a         {             i+=j-1;  //в j у нас длина стоки a, которую мы перепрыгиваем             for(j=0;b[j];j++) buffer[pos++]=b[j];  //на место стоки a ставим строку b         }         else         {             buffer[pos++]=str[i];   //просто копируем символ         }         buffer[pos]=NULL;  //ставим конец строки     }     strcpy(str,buffer);  //копируем в первоначальную строку }   int main() {     int x;     char* str[x];     printf("\ninput number of strings\n");     scanf("%d",x);     for(int i=0;i

  1. a0=1, ak=k*ak-1+1/k, k=1,2,... . Дано n. Получить an.C1 2 3 4 5 6 7 int cycle (int n){     double a0=1; for (int i,k = 1; i<=n; k++, i++) {     a0 = k*a0+1/k; }     return a0; }

  1. Вообщем, есть цикл который считает простую задачу: Пусть V1=1, V2=2, Vi=2*Vi-1+3*Vi-2, i=3,4,… . Дано n. Получить Vn. Вот код:C1 2 3 4 5 6 7 8 9 10 11 int cycle(int n) {     int Vn, V1 = 1, V2 = 2;     for (int i = 3; i <= n; i++)     {         Vn = 2 * V2 + 3 * V1;         V1 = V2; // V[i-2]         V2 = Vn; // V[i-1]     }     return Vn; }Нужно заменить этот цикл - рекурсией. Как сделать это не могу понять, голову ломаю второй час, в гугле только примеры с факториалом.