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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2012, 00:19   #1
lemme
 
Регистрация: 11.11.2011
Сообщений: 3
По умолчанию Двумерный массив (Pascal)

Доброй ночи, помогите пожалуйста решить данную задачу:

Дана матрица B[N,M]. Найти в каждой строке матрицы максимальный и минимальный элементы и поменять их местами с первым и последним элементом строки соответственно.
(Желательно, чтобы матрица выводилась автоматически с помощью команды randomize.)

Наработки:
Код:
program new;
uses crt;
const m=5; n=5;
var i,j:integer; p,k,b,b1,k1:integer;
var a:array [1..5,1..5] of integer;
begin
uses crt;
clrscr;
for i:=1 to m do
for j:=1 to n do
read (a[i,j]);
for i:=1 to m do begin
k:=a[i,1]; b:=a[i,1];
for j:=1 to n do begin
if k>a[i,j] then k:=a[i,j];k1:=j; end;
b>:=j;end;
if b<[i,j] then begin b:=a [i,j]; end;
p:=a[i,k];
a[i,k1]:=a[i,b1];
a[i,b1]:=p;
end;
for i:=1 to m do
for j:=1 to n do
write (a[i,j]);
end.
Спасибо.
UPD: Простите, что запостил очередной вопрос "по матрицам", но именно эта программа у меня не получается..

Последний раз редактировалось lemme; 02.02.2012 в 00:29.
lemme вне форума Ответить с цитированием
Старый 02.02.2012, 02:46   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Цитата:
и поменять их местами с первым и последним элементом строки соответственно.
не очень понял, вот например дана такая строка в массиве
Код:
1 2 3 4 5
какой она должна стать, в результате выполнения программы?

-------------
Ну смотрите, не отвечаете, значит держите, как понял задание
Код:
for i:=1 to 5 do
  begin
    min:= a[i,j];
    max:= a[i,j];
    for j:=1 to 5 do
      begin 
        if a[i,j]>max then begin max_ind:= j; max:= a[i,j]; end;
        if a[i,j]<min then begin min_ind:=j; min:= a[i,j]; end;
      end;
      {ставим минимальный элемент строки, на первую позицию в строке, 
        а первый элемент, на место минимального}
      temp:= a[i,min_ind]
      a[i,min_ind]:= min
      a[i,1]:= temp;
      {ставим максимальный элемент строки, на последнюю позицию в строке, 
        а последний элемент, на место максимального}
      temp:= a[i,max_ind];
      a[i,max_ind]:= max;
      a[i,5]:= temp; 
  end;
Упс, была ошибка, исправил

А вот заполнение массива с помощью random, сделайте сами, на форуме КУЧА примеров с этим
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 02.02.2012 в 03:51.
Niro вне форума Ответить с цитированием
Старый 02.02.2012, 03:38   #3
lemme
 
Регистрация: 11.11.2011
Сообщений: 3
По умолчанию

Большое спасибо!

Последний раз редактировалось lemme; 02.02.2012 в 03:46.
lemme вне форума Ответить с цитированием
Старый 02.02.2012, 03:44   #4
Firstchar
Пользователь
 
Регистрация: 29.09.2011
Сообщений: 23
По умолчанию

Код:
program abc;
uses crt;
var mas:array[1..100,1..100] of integer;
k,k1,i,j,n,m,min,max:integer;
procedure mas_output;
begin
for i:=1 to n do
begin
writeln;
for j:=1 to m do
write(mas[i,j]:3);
end;
end;
begin
clrscr;
randomize;
write('введите количество строк: ');
readln(n);
write('введите количество столбцов: ');
readln(m);
for i:=1 to n do
for j:=1 to m do
mas[i,j]:=random(20)-5;
mas_output;
for i:=1 to n do
begin
min:=mas[i,1];
max:=mas[i,1];
for j:=1 to m do
begin
if min>mas[i,j] then
begin 
min:=mas[i,j];
k:=j;
end;
if max<mas[i.j] then 
begin
max:=mas[i,j];
k1:=j;
end;
end;
mas[i,k]:=mas[i,m];
mas[i,k1]:=mas[i,1];
mas[i,m]:=min;
mas[i,1]:=max;
end;
mas_output;
readkey;
end.
вроде как-то так

Последний раз редактировалось Firstchar; 02.02.2012 в 03:46.
Firstchar вне форума Ответить с цитированием
Старый 02.02.2012, 04:16   #5
lemme
 
Регистрация: 11.11.2011
Сообщений: 3
По умолчанию

Код:
mas[i,j]:=random(20)-5;
вот тут выдаёт 215 (Арифмитическое перевыполнение)
lemme вне форума Ответить с цитированием
Старый 02.02.2012, 10:44   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от lemme Посмотреть сообщение
Код:
mas[i,j]:=random(20)-5;
вот тут выдаёт 215 (Арифмитическое перевыполнение)
бывает такое у TurboPascal - он тип данных определяет по первому элементу выражения и иногда "тупит" при этом

попробуйте записать эту строчку так:
Код:
      mas[i, j] := -5 + random(20);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двумерный массив(Pascal) Вероника_94 Помощь студентам 3 21.01.2012 01:35
двумерный массив(Pascal) Shegi Помощь студентам 1 18.01.2012 06:23
Двумерный массив на Pascal Daniboy Помощь студентам 5 16.02.2011 21:07
Pascal. Двумерный массив. Fonthreat Помощь студентам 1 29.03.2010 17:57
Pascal Двумерный массив vovalski Помощь студентам 1 16.11.2009 20:42