Создать матрицу, вывести ее на экран и отсортировать по возрастанию строку с наименьшей суммой элементов (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;
}