Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2010, 06:14   #1
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию Массивы

В первой части задания необходимо написать подпрограмму, которая генерирует массив приведенного вида из N*N элементов, где N это константа, заданная в начале программы. Также должна быть подпрограмма для вывода массива на экран. В отчете должны быть приведены примеры сгенерированных массивов для N, равного 4 и 10.
Сгенерировать массив из случайных чисел, выяснить, сколько в массиве совпадающих по величине чисел.

Должен получится массив вида:
4 3 2 1
3 2 1 0
2 1 0 0
1 0 0 0


Тут написана программа, для другого массива, и сравнивается произведение и сумма главной диагонали...Я вот не могу придумать как изменить первую часть проги, чтобы получился мой массив.

Цитата:
{$DEFINE DEBUG} //Объявляем режим отладки
const NMAX=50; //Максимальное кол-во элементов в
массиве.
type mas=array[1..NMAX,1..NMAX] of Integer;
//"скрываем" массив, для сохранности индексов

procedure FillArray(var m:mas;N:integer);
var i,j:integer; //используется, как индексы
элементов массива
begin
Randomize();
for i:=1 to N do //последовательный перебор всех
строк массива
for j:=1 to N do //последовательный перебор всех
столбцов массива
if ((i+j) mod 2 = 0) then //Если сумма
индексов четная
begin
m[i,j]:=0
end
65 else //Если сумма индексов не
четная
begin
if (i>j) then //Определяем где
находится элемент
m[i,j]:=N-i+1 // относительно
главной диагонали
else
m[i,j]:=N-j+1;
end;
end;

procedure FillArrayRandom(var
m:mas;min,max,N:integer);
var i,j:integer; //используется, как индексы
элементов массива
begin
Randomize();
for i:=1 to N do //последовательный перебор всех
строк массива
for j:=1 to N do //последовательный перебор всех
столбцов массива
m[i,j]:=min+random(max-min+1); //случ. числа
генерируем в диапазоне
end;

procedure PrintArray(var m:mas;N:integer);
var i,j:integer; //используется, как индекс
элементов массива
begin
for i:=1 to N do //последовательный перебор всех
строк массива
begin
for j:=1 to N do //последовательный перебор всех
столбцов массива
write(m[i,j]:3); //вывод элементов одной строки
writeln; //отделяем одну строку от другой
end;
end;

var a:mas; //объявили массив
c:integer; //переменная для значения, которое
необходимо будет найти
nom:integer; //для хранения (не)найденного индекс
элемента
66 n:integer; //кол-во элементов в массиве
i:integer; //для обхода массива
sum,prz:integer; //сумма и произведение элементов
begin
{$IFDEF DEBUG} //Для упрощения отладки используем
условные директивы компилятора
n:=4;
{$ELSE} //если не отладка
Write(Rus('Введите кол-во элементов в массиве:'));
Readln(n); //с каким кол-вом элементов программа
будет работать
{$ENDIF}
if ((n>NMAX) or (n<=0)) then
begin
Writeln(Rus('Элементов не может быть менее 1 и более
'),NMAX);
exit; //Выход из программы
end;
FillArray(a,n); //заполнение массива случайными
числами
PrintArray(a,n);
writeln('==========');
FillArrayRandom(a,-5,5,n); //генерируем случ. числа от
-5 до 5
PrintArray(a,n);
sum:=0;
prz:=1;
for i:=1 to N do
begin
sum:=sum+a[i,i];
prz:=prz*a[i,i];
end;
writeln(Rus('Сумма='),sum,Rus(' Произведение='),prz);
if (sum>prz) then
writeln(Rus('Сумма больше произведения'))
else if (sum=prz) then
writeln(Rus('Сумма равна произведению'))
else
writeln(Rus('Сумма меньше произведения'));
end.
Driver_09 вне форума Ответить с цитированием
Старый 22.05.2010, 09:07   #2
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Код:
 procedure FillArray(var x:mas; n:integer);
 var i,j:Integer;
 k:Integer;
 begin
  for I := 1 to n  do begin
  k:=n-i+1;
    for j := 1 to n-i+1  do
    begin
    x[i,j]:=k;k:=k-1;
     end;   end;
 end;
или
Код:
 procedure FillArray(var x:mas; n:integer);
 var i,j:Integer;
 k:Integer;
 begin
  for I := 1 to n  do 
    for j := 1 to n-i+1  do
    begin
    x[i,j]:=n-i-j+2;
     end;   
 end;
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!

Последний раз редактировалось DoDge_VipeR; 22.05.2010 в 09:12.
DoDge_VipeR вне форума Ответить с цитированием
Старый 22.05.2010, 19:37   #3
Driver_09
Пользователь
 
Регистрация: 11.10.2009
Сообщений: 61
По умолчанию

спасибо=)))
Driver_09 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++, Массивы, динамические массивы. -Sunshine- Помощь студентам 1 19.04.2010 02:17
Массивы ewans Общие вопросы C/C++ 4 31.12.2009 00:39
Даны одномерные массивы А и В. Сформировать массивы, состоящие из элемент LyaLya Помощь студентам 15 20.12.2009 14:12
Массивы StudentPolitech Общие вопросы C/C++ 4 24.09.2009 15:21