Перевести код с turbo pascal - C (СИ)
Формулировка задачи:
помогите плз в си перевести
Var
i,j,n,m,imin,imax,max,min,tmp: Integer;
p: Longint;
x: Array[1..5,1..10] of Integer;
BEGIN
Repeat
Writeln('Введите размеры матрицы:');
Readln(n,m);
until (n<=5) and (m<=10);
Randomize;
Writeln('Матрица:');
max:=-maxint;
min:=maxint;
For i:=1 to n do
begin
p:=1;
For j:=1 to m do
begin
x[i,j]:=Random(9)+1;
p:=p*x[i,j];
Write(x[i,j]:4);
end;
If p>max Then
begin
max:=p;
imax:=i;
end;
If p<min Then
begin
min:=p;
imin:=i;
end;
Writeln
end;
Writeln('Максимум= ',max,' в строке ',imax);
Writeln('Минимум= ',min,' в строке ',imin);
Writeln('Преобразованная матрица:');
For j:=1 to m do
begin
tmp:=x[imin,j];
x[imin,j]:=x[imax,j];
x[imax,j]:=tmp;
end;
For i:=1 to n do
begin
For j:=1 to m do
Write(x[i,j]:4);
Writeln
end;
Readln
END.Решение задачи: «Перевести код с turbo pascal»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int x[5][10];
unsigned n, m;
do
{
printf("Введите размеры матрицы: ");
scanf("%u %u", &n, &m);
}
while ((n > 5) || (m > 10));
printf("Матрица:\n");
int max = 0x80000001;
int min = 0x7fffffff;
int imax = -1, imin = -1;
long long p;
unsigned i, j;
for (i = 0; i < n; ++i)
{
p = 1;
for (j = 0; j < m; ++j)
{
x[i][j] = rand()%9 + 1;
p *= x[i][j];
printf("%4d", x[i][j]);
}
printf("\n");
if (p > max)
{
max = p;
imax = i;
}
if (p < min)
{
min = p;
imin = i;
}
}
printf("Максимум= %d в строке %d\n", max, imax + 1);
printf("Минимум= %d в строке %d\n", min, imin + 1);
printf("Преобразованная матрица:\n");
for (j = 0; j < m; ++j)
{
int tmp = x[imin][j];
x[imin][j] = x[imax][j];
x[imax][j] = tmp;
}
for (i = 0; i < n; ++i)
{
for (j = 0; j < m; ++j)
{
printf("%4d", x[i][j]);
}
printf("\n");
}
system("PAUSE");
return 0;
}
Объяснение кода листинга программы
- Программа начинается с инициализации генератора случайных чисел с помощью функции srand(time(NULL)).
- Создается матрица x[5][10] и две переменные n и m для хранения размеров матрицы.
- С помощью цикла do-while программа запрашивает у пользователя размеры матрицы до тех пор, пока они не будут введены корректно (не больше 5 строк и 10 столбцов).
- Выводится сообщение
Матрица:и переменные max и min инициализируются значениями 0x80000001 и 0x7fffffff соответственно, а также imax и imin устанавливаются на -1. - С помощью двух вложенных циклов перебираются все элементы матрицы. Значение каждого элемента x[i][j] вычисляется как произведение всех элементов строки и записывается в переменную p. Также выводится значение элемента x[i][j] и значение p.
- Если p больше max, то max присваивается новое значение p, а imax заменяется на i. Аналогично, если p меньше min, то min присваивается новое значение p, а imin заменяется на i.
- После завершения циклов выводится сообщение
Максимум= %d в строке %dс текущими значениями max и imax. - Выводится сообщение
Минимум= %d в строке %dс текущими значениями min и imin. - С помощью двух вложенных циклов осуществляется перестановка элементов матрицы так, чтобы на месте min было максимальное значение, а на месте max - минимальное.
- С помощью двух вложенных циклов выводятся все элементы матрицы.
- Программа завершается с помощью функции system(
PAUSE). - Возвращается 0, что означает успешное выполнение программы.