Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Паскаль, подпрограммы функций (http://www.tehnari.ru/f41/t83765/)

Kampuchiec 10.01.2013 12:16

Паскаль, подпрограммы функций
 
Помогите с двумя программами.

Размеры исходных массивов задавать именованными константами в головной программе. Элементы исходных массивов задавать целыми случайными числами в диапазоне от v_min до v_max. Границы диапазона v_min и v_max задать с консоли. Ввод исходных данных и вывод результатов производить в головной программе.
Запрещается использовать в подпрограммах глобальные переменные и рабочие массивы. Векторы передавать в подпрограммы как открытые массивы. Не использовать конкретные числа в качестве фактических параметров процедур – только имена переменных, массивов или имена констант.

1 Создать функцию, определяющую в целочисленном прямоугольном массиве matrixnm сумму всех элементов, соприкасающихся углами с его максимальным элементом.

2 Создать процедуру, переворачивающую квадратный массив matrixnn на 90 градусов по часовой стрелке.

Kampuchiec 11.01.2013 04:40

Второе задание не надо. Объясните как найти сумму всех элементов вокруг максимального в матрице?

Vladimir_S 11.01.2013 09:44

Цитата:

Сообщение от Kampuchiec (Сообщение 847044)
Второе задание не надо. Объясните как найти сумму всех элементов вокруг максимального в матрице?

Примерно так:
Код:

S:=0;
for i:=Imax-1 to Imax+1 do
 for j:=Jmax-1 to Jmax+1 do
  if (i>0) and (i<=N) and (j>0) and (j<=M) and Not((i=Imax) and (j=Jmax)) then
  S:=S+a[i,j]


Kampuchiec 11.01.2013 10:08

Огромное спасибо

Kampuchiec 11.01.2013 10:49

Можно посмотреть мою программу, вроде бы все написал а результат при пересчете не верный.
Она должна. Создать функцию, определяющую в целочисленном прямоугольном массиве сумму всех элементов, соприкасающихся углами с его максимальным элементов.
Цитата:

uses crt;
const
n=4;
c=5;
type massiv = array [1..n,1..c] of integer;
procedure zapolnenie(var m:massiv);
var vmin,vmax,i,j:integer;
begin
randomize;
write('vmin=');
readln(vmin);
write('vmax=');
readln(vmax);
for i:=1 to n do
begin
for j:=1 to c do
m[i,j]:=random(vmax-vmin+1)+vmin;
end
end;
procedure vivod(var m:massiv);
var i,j:integer;
begin
For i:=1 To n Do
Begin
For j:=1 To c Do
Write(m[i,j]:5);
WriteLn;
End;
end;
procedure max (m:massiv);
var jmax,imax,max,i,s,j:integer;
begin
max:=0;
for i:=1 to n do
begin
for j:=1 to c do
begin
if max<m[i,j]
then
max:=m[i,j];
imax:=i;
jmax:=j;
end;
end;
S:=0;
for i:=imax-1 to imax+1 do
for j:=jmax-1 to jmax+1 do
begin
if (i>0) and (i<=n) and (j>0) and (j<=c) and Not((i=imax) and (j=jmax)) then
S:=S+m[imax,jmax];
end;
writeln('max=',max);
writeln('sum=',S);
end;
var m:massiv;
begin
writeln('Massiv');
Zapolnenie(m);
vivod(m);
max(m);
end.

Vladimir_S 11.01.2013 14:12

Две ошибки.
1. У Вас:
begin
max:=0;
for i:=1 to n do
begin
for j:=1 to c do
begin
if max<m[i,j]
then
max:=m[i,j];
imax:=i;
jmax:=j;
end;
end;
Надо:
Код:

max:=vmin; {Лучше так}
for i:=1 to n do
  for j:=1 to c do
  if max<m[i,j] then
    begin
    max:=m[i,j];
    imax:=i;
    jmax:=j;
    end;

2. У Вас:
S:=S+m[imax,jmax];
Надо:
Код:

S:=S+m[i,j];

Kampuchiec 11.01.2013 14:30

Спасибо еще раз


Часовой пояс GMT +4, время: 21:26.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.