Создать матрицу, вывести ее на экран и отсортировать по возрастанию строку с наименьшей суммой элементов (Pascal -> C) - C (СИ)
Формулировка задачи:
Нужно перевести этот код:
uses crt; const m=3; n=4; type mtr=array [1..m,1..n] of integer; procedure print(a:mtr;s:string); var i,j:integer; begin writeln(s); for i:=1 to m do begin for j:=1 to n do write(a[i,j]:4); writeln end; end; procedure min(a:mtr;var mn,imn:integer); var i,j,sm:integer; begin for i:=1 to m do begin sm:=0; for j:=1 to n do sm:=sm+a[i,j]; if i=1 then begin mn:=sm; imn:=1 end else if sm<mn then begin mn:=sm; imn:=i end; end; writeln('Минимальная сумма в строке ',imn,'=',mn) end; procedure sort(var a:mtr;imn:integer); var i,j,x:integer; begin for i:=1 to n-1 do for j:=i+1 to n do if a[imn,i]>a[imn,j] then begin x:=a[imn,i]; a[imn,i]:=a[imn,j]; a[imn,j]:=x end; end; var i,j,mn,imn:integer; L:char; a:mtr; begin clrscr; repeat clrscr; writeln('Как заполнить массив?'); writeln('1.Как константу'); writeln('2.Случайные числа'); writeln('3.Вручную'); writeln('Другое выход'); readln(L); Case L of '1':begin clrscr; a[1,1]:=12;a[1,2]:=3; a[1,3]:=15;a[1,4]:=7; a[2,1]:=22;a[2,2]:=14;a[2,3]:=6; a[2,4]:=5; a[3,1]:=17;a[3,2]:=5; a[3,3]:=20;a[3,4]:=9; print(a,'Исходный массив:'); min(a,mn,imn); sort(a,imn); print(a,'Отсортированный массив:'); readln end; '2':begin clrscr; randomize; for i:=1 to m do for j:=1 to n do a[i,j]:=random(100); print(a,'Исходный массив:'); min(a,mn,imn); sort(a,imn); print(a,'Отсортированный массив:'); readln end; '3':begin clrscr; writeln('Введите элементы массива, целые числа'); for i:=1 to m do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; clrscr; print(a,'Исходный массив:'); min(a,mn,imn); sort(a,imn); print(a,'Отсортированный массив:'); readln end; else exit end; until not(L in ['1'..'3']) end.
Решение задачи: «Создать матрицу, вывести ее на экран и отсортировать по возрастанию строку с наименьшей суммой элементов (Pascal -> C)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define M 3 #define N 4 int array[M][N] = { { 12, 3, 15, 7 }, { 22, 14, 6, 5 }, { 17, 5, 20, 9 } }; void random(void) { int i, j; for (i = 0; i < M; i++) for (j = 0; j < N; j++) array[i][j] = rand() % (M * N); } int input(void) { int i, j; for (i = 0; i < M; i++) for (j = 0; j < N; j++) if (!scanf("%d", &array[i][j])) return 0; return 1; } void print(char *fmt) { int i, j; for (i = 0; i < M; i++) { for (j = 0; j < N; j++) printf(fmt, array[i][j]); printf("\n"); } } long sum(int *row) { int j; long s; s = 0; for (j = 0; j < N; j++) s += row[j]; return s; } int find(void) { int i, imin; long s, smin; imin = 0; smin = sum(array[0]); for (i = 1; i < M; i++) { s = sum(array[i]); if (s < smin) { smin = s; imin = i; } } return imin; } void sort(int *row) { int j, jmin, k, tmp; for (j = 0; j < N-1; j++) { jmin = j; for (k = j+1; k < N; k++) if (row[k] < row[jmin]) jmin = k; if (jmin != j) { tmp = row[jmin]; row[jmin] = row[j]; row[j] = tmp; } } } char promptmenu(void) { printf("Select array input method:\n"); printf("1 - use predefined constant\n"); printf("2 - random\n"); printf("3 - manual\n"); printf("> "); return getchar(); } int main(void) { int i; time_t t; srand((unsigned) time(&t)); switch (promptmenu()) { case '1': break; case '2': random(); break; case '3': if (!input()) { fprintf(stderr, "wrong input\n"); return 1; } break; default: fprintf(stderr, "wrong input\n"); return 1; } print("%3d "); i = find(); printf("row with minimal sum is %d\n", i); sort(array[i]); print("%3d "); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д