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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 20:39   #1
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию Двумерный массив, и действие над ним...

Вот задача - Удалить строку с максимальным средним арифметическим значением ее элементов. Решение:
Код:
uses crt;
const Q=20;
var a:array [1..Q,1..Q] of integer;
b:array [1..Q] of real;
i,j,n,m,k:integer;
sa,max,sum:real;
begin
 clrscr;
 write('Введите количество строк - ');
 readln(n);
 write('Введите количество столбцов - ');
 readln(m);
 for i:=1 to n do
  for j:=1 to m do
   begin
    write('Введите ',i,',',j,' элемент массива - ');
    readln(a[i,j]);
   end;
 clrscr;
 for i:=1 to n do
 begin
   sum:=0;
   sa:=0;
  for j:=1 to m do
  begin
   sum:=a[i,j]+sum;
   sa:=sum/m;
   b[i]:=sa;
  end;
 end;
 writeln('Исходный массив');
 for i:=1 to n do
  begin
   for j:=1 to m do
     write(a[i,j]:4);
     writeln;
  end;
 writeln;
 writeln('Среднее арифметическое значение каждой строки');
 for j:=1 to i do
 begin
  write('Ca бва®ЄЁ б ь ',j,' - ',b[j]:4:2);
  writeln;
 end;
 max:=b[1];
 for j:=2 to i do
 if max<b[i] then
 begin
  max:=b[i];
  k:=i;
 end;
 for i:=k to n do
 for j:=1 to m do
 a[i,j]:=a[i+1,j];
 for j:=1 to m do
 a[i,m]:=0;
 writeln('Полученный массив');
 for i:=1 to n-1 do
 begin
 for j:=1 to m do
  write(a[i,j]:4);
  writeln;
 end;
 readln;
 end.
Вроде все легко, но тут сказали, что может быть и такое - в нескольких строкаХ есть максимальное Ср.ариф. и вот сколько не мучился переделать не получилось, мне нужно чтоб не одну такую удалял а несколько, типо так:
Дано:
1 2 3 4
9 9 9 9
1 2 3 4
9 9 9 9
Ответ:
1 2 3 4
1 2 3 4
нужно чтоб получилось нечто подобное, Помогите пожлуйста!!!

Последний раз редактировалось Stilet; 28.11.2010 в 19:47.
Neksion вне форума Ответить с цитированием
Старый 26.11.2010, 23:52   #2
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

Введите количество строк - 4
Введите количество столбцов - 4
Введите 1,1 элемент массива - 1
Введите 1,2 элемент массива - 2
Введите 1,3 элемент массива - 3
Введите 1,4 элемент массива - 4
Введите 2,1 элемент массива - 5
Введите 2,2 элемент массива - 6
Введите 2,3 элемент массива - 7
Введите 2,4 элемент массива - 8
Введите 3,1 элемент массива - 9
Введите 3,2 элемент массива - 134
Введите 3,3 элемент массива - 3
Введите 3,4 элемент массива - 5
Введите 4,1 элемент массива - 3
Введите 4,2 элемент массива - 5
Введите 4,3 элемент массива - 2
Введите 4,4 элемент массива - 2
Исходный массив
1 2 3 4
5 6 7 8
9 134 3 5
3 5 2 2

Среднее арифметическое значение каждой строки
Ca бва®ЄЁ б ь 1 - 2.50
Ca бва®ЄЁ б ь 2 - 6.50
Ca бва®ЄЁ б ь 3 - 37.75
Ca бва®ЄЁ б ь 4 - 3.00
Полученный массив
1 2 3 4
5 6 7 8
9 134 3 5

пробовал у себя запускать (PascalABC) вот что получилось... как то не верно она у тебя работает.

А по поводу нескольких одинаковых строк... можно создать массив целых чисел, и заносить в него номера строк с одинаковым ср.арифм, ну и соответственно потом удалить их

или значения средних арифмитических занести в массив найти среди них макс элемент. и получить индексы других равных ему

Последний раз редактировалось unbanned; 26.11.2010 в 23:56.
unbanned вне форума Ответить с цитированием
Старый 28.11.2010, 17:35   #3
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию

Извиняюсь, перепутал переменную=))
Код:
uses crt;
const Q=20;
var a:array [1..Q,1..Q] of integer;
b:array [1..Q] of real;
i,j,n,m,k:integer;
sa,max,sum:real;
begin
clrscr;
write('Введите количество строк - ');
readln(n);
write('Введите количество столбцов - ');
readln(m);
for i:=1 to n do
for j:=1 to m do
begin
write('Введите ',i,',',j,' элемент массива - ');
readln(a[i,j]);
end;
clrscr;
for i:=1 to n do
begin
sum:=0;
sa:=0;
for j:=1 to m do
begin
sum:=a[i,j]+sum;
sa:=sum/m;
b[i]:=sa;
end;
end;
writeln('Исходный массив');
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
writeln;
writeln('Среднее арифметическое значение каждой строки');
for j:=1 to i do
begin
write('Ca строки с № - ',j,' - ',b[j]:4:2);
writeln;
end;
max:=b[1];
for j:=1 to i do
if max<=b[j] then
begin
max:=b[j];
k:=j;
end;
for i:=k to n do
for j:=1 to m do
a[i,j]:=a[i+1,j];
for j:=1 to m do
a[i,m]:=0;
writeln('Полученный массив');
for i:=1 to n-1 do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
readln;
end.

Последний раз редактировалось Stilet; 28.11.2010 в 19:48. Причина: Недописал
Neksion вне форума Ответить с цитированием
Старый 29.11.2010, 21:18   #4
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию

Никак не получатся создать цикл для удаления((
Думал будет примерно так:
for j:=i downto 1 do
begin
if b[j]=max then
begin
s:=0;
for i:=n downto k do
begin
a[i,j]:=a[i+1,j];
s:=s+1;
end;
a[n,j]:=0;
end;
end;
writeln(Полученный массив');
for i:=1 to n-s do
begin
for j:=1 to m do
write(a[i,j]:4);
writeln;
end;
readln;
end.

Но не пашет нисколько((
Дайте, пожалуйста, более точную подсказку, чтоб нормально на нее опереться.
Neksion вне форума Ответить с цитированием
Старый 29.11.2010, 22:25   #5
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

ну ты записываешь в массив значения СА всех строчек, т.е. индекс в массиве получается номером строки(у тебя это массив b, получается). далее находишь макс (max) элемент.
Код:
s:=0;
for i:=1 to Q do begin
if (b[i]<>0) and (b[i]=max) then 
for j:=1 to m do
удаляем элементы a[i-s,j]
s:=s+1;
т.е. получается удаляем строчку которая соответствует макс значению СА

входит что массив а уменьшается на одну строчку, соответственно все номера строк выше удаленной уменьшились на 1.
создаешь переменную типа integer. и прибавляешь 1 к ней каждый раз как удаляешь строку из массива а. тогда получается что удаляешь элементы a[i-s,j]. например

1234
9999
1234
9999

у тебя 2я и 4я строчки с одинаковым СА. первый раз получается удаляются a[2-0,j].
строки сдвигаются 4я строчка становиться третьей. удаляются элементы a[4-1,j].

ну вот как-то так...
unbanned вне форума Ответить с цитированием
Старый 30.11.2010, 12:40   #6
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию

Спасибо, за внимание!
Ну у меня примерно те же мысли были, но и с этим задача не идет( удаляет одну строку(последнюю) с макс. СА.
Neksion вне форума Ответить с цитированием
Старый 30.11.2010, 13:17   #7
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от Neksion Посмотреть сообщение
Спасибо, за внимание!
Ну у меня примерно те же мысли были, но и с этим задача не идет( удаляет одну строку(последнюю) с макс. СА.
У меня вопрос , просто может я немного не понял условия задачи .

Тебе надо физически удалить элементы из массива , или просто не надо распечатывать на экран строки с максимальным средним ?
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 30.11.2010, 19:04   #8
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию

andrewpalkin, по заданию надо удалить строку если ее СА больше чем у остальных, и удалить несколько, в том случае если макс.СА несколько.
ну если покороче то
Цитата:
или просто не надо распечатывать на экран строки с максимальным средним
Neksion вне форума Ответить с цитированием
Старый 30.11.2010, 21:21   #9
Neksion
Пользователь
 
Регистрация: 24.11.2010
Сообщений: 29
По умолчанию

Есть ли еще способ выполнить удаление?
Neksion вне форума Ответить с цитированием
Старый 01.12.2010, 10:11   #10
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от Neksion Посмотреть сообщение
Есть ли еще способ выполнить удаление?
Кроме того , что не распечатывать на экран , то что тебе не надо . Ты можешь создать новый массив , в котором будет строк меньше на столько , сколько тебе надо удалить . И потом в него записать все , что не должно быть удалено.
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание виртуального ландшафта и интерактивного полета над ним. Иван Мещеряков Помощь студентам 2 20.12.2009 12:08
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40
GroupBox обьекты над ним KoBRaAndrey Общие вопросы Delphi 5 30.10.2009 12:43
Двумерный массив!!! hoangvu2005 Помощь студентам 2 17.02.2009 21:50
массив tedit и процедура с ним(delphi) xbIm Помощь студентам 2 21.02.2008 23:57