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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы