Помощь - Поиск - Пользователи - Календарь
Полная версия: Нужна помощь в решении!
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Plushka
Помогите пожалуйста решить задачки чтоб на их основе хоть что-нибудь понять smile.gif(Скоро зачет)
Я понимаю что они должны быть простыми но потратьте чуточку времени чтоб помочь.

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


В каждом столбце над побочной диагональю найти минимальные элементы.Сформировать из них масив,упорядочить его по убыванию и напечатать номера столбцов,соответсвуюшие этому масиву.
Krjuger
Ну первое я произвольно заполняю матрицу с данными размерами числами от 0 до 100,

program matrica;
uses crt;
type
    arrsort= array[0..100,1..100] of integer;{100 элементов в строке и столбце думаю хватит}
var 
 matr : arrsort;
 n,m : integer;{размеры матрицы}
 S : real;

Procedure CreateMatr(var matr :arrsort;n,m : integer);
var
 i,j : integer; 
begin
  for i:=1 to n do begin
   for j:=1 to m do begin
    matr[i,j]:=random(100);
    write(matr[i,j],' ');
  end;
  writeln;
 end;
end;

Procedure FindMiddle(var matr :arrsort;n,m : integer;Var S : real);
var
 i,j : integer; 
begin
S:=0;
  for i:=1 to n do
   for j:=1 to m do
    S:=S+matr[i,j];{суммируем все элементы матрицы}

 S:=S/(n*m);{Находим среднее арифметическое}
  
end;

Procedure FindElem(var matr :arrsort;n,m : integer; S : real);
var
 i : integer; 
begin
 if n<=m then
  begin
  write('Элементы больше среднего:');
  for i:=1 to n do
    if matr[i,i]>S then
      write(matr[i,i],' ');
  end
 else
  begin
  write('Элементы больше среднего:');
  for i:=1 to m do
    if matr[i,i]>S then
      write(matr[i,i],' ');
  end;
end;

begin
randomize;
write('Введите размеры матрицы');
read(n,m);
CreateMatr(matr,n,m);
FindMiddle(matr,n,m,S);
FindElem(matr,n,m,S);
readkey;
end.


Вроде все,если ничего не напутал,то будет работать.Со вторым заданием,я чето особо не понял.насчет побочной диагонали надо просто поменять порядок прохода цикла и в сравнении поставить знак минус.сформировать массив тоже несложно,надо просто перед строчкой печати в процедуре поиска элемента организовать заполнение массива,и перед этим создать этот пустой массив.насчет сортировки уточните,их очень много видов.насчет печати,извините голова не очень ясная,сообразить пока не могу, что вы хотите.
volvo
 ! 
Krjuger, я больше предупреждать не буду. Подними глаза чуть выше своего носа и перечитай в "Правилах раздела" то, которое идет пунктом 7. Оно относится к тебе ровно так же, как и ко всем остальным. Идея понятна? Твоя программа просто КИШИТ ошибками, раз уж ты взялся помогать - так хотя бы помогай правильно, а не так, чобы потом посыпался шквал недоуменных вопросов: "а у меня не компилируется", "не работает" и так далее. Может, тебе это и нужно, только вот это не нужно форуму. Я уж не говорю о том, что TP7 (а это именно его раздел) просто не даст тебе выделить 500*501*6 байт, но СИНТАКСИЧЕСКИЕ-то ошибки ты убрать мог???
Цитата
если ничего не напутал,то будет работать
Оно НИКОГДА работать не будет.

В следующий раз получишь наказание при бездумном шлепании программ...

На всякий случай присоединяю (чтоб было понятно, о чем речь вообще) скриншот программы ДО ее исправления:
Нажмите для просмотра прикрепленного файла

Добавлено через 2 мин.
Автору топика: тему переименуй... "Помогите" - не является информативным названием...
Krjuger
Хорошо замолкаю, сотри мои посты в этой теме.Да и во всех остальных.
И кстати шлепание совсем не бездумное.(есть люди которые за это "шлепание" и поблагодарили.Да и плюс я пишу с нуля без кода самого человека,чем вы не занимаетесь,насчет того что паскаль мне не даст таких ресурсов,да согласен,по началю я вообще хотел создать динамический массив отталкивающий он параметров входного файла,но потом изменил(понял что человеку оно не нужно),и пришлось выкручиваться.по поводу моих же тем,так Вы не давали мне никакого информативтого совета,а лиш тыкали меня в места,где ошибки,хотя я от вас больше ожидал советов в реализации или теоретически.В ответ же я получал ответы.
Цитата

Трудно ожидать от программы, вываливающейся по RTE 216 корректной работы... То, что твой компилятор не отлавливает эту ошибку времени выполнения, не значит, что ее нет:

И думай тут сам, что, где и как.Из всех ваших постов по моей проблеме я только 2 могу выделить, как информативные,один про печать дерева(это было действительно интересно и поучительно),и второй и пост про стеку если не ошибасюь №7,все остальные же были написаны с некоторым надмением,а результатом было то что "я у вас ничему не научился и стою на одном месте и вы потеряли интерес к моей проблеме".А как можно сдвинутся,если вы совета не даете.Хотя нет был еще третий,когда вы сделали вывод по поводу программы по стему и деку,это было поучительно.
Цитата

потом посыпался шквал недоуменных вопросов: "а у меня не компилируется", "не работает" и так далее
Если я начал писать в тему,то я буду следить за ней до тех пор пока человек не решит свою задачу.И если я совершил любую ошибку,то Я ЛИЧНО принесу за нее свои извенения и САМ ее исправлю,если человек сам не сможет ее исправить,потому что за то что я пишу,я отвечаю.

P.S. Теперь я ВСЕ ошибки исправил и ТЕПЕРЬ она уж точно работает,потому что я на Паскале проверил.так что девушка,теперь можете разбираться.Кстати кроме орфографических ошибок других и не было.
Plushka
Сасибочки!!!Не представляешь как ты мне помог!

А насчет напечатать так это наверно вывести его и чтобы у каждого элемента была подпись из какого столбца его взяли.
volvo
Цитата
И думай тут сам, что, где и как
А что, думать для тебя - это очень сложно? Надо, чтоб за тебя думали другие, а тебе подавали решения на блюдечке с голубой каемочкой? А на кой тогда такой программист, за которого думают, ты не задумывался? Что такое RTE не знаешь? В гугле забанен?

Цитата
Из всех ваших постов по моей проблеме я только 2 могу выделить, как информативные
Спасибо хоть и на этом, хоть что-то было признано твоим Величеством полезным. Только вот ты не учел, что КРОМЕ меня тебе никто не отвечал вообще. Не задумывался, почему? Подумай на досуге...

Цитата
так Вы не давали мне никакого информативтого совета
Я не пишу программ ЗА кого-то после определенных событий. Максимум что я могу сделать - это сказать, что, и почему не работает или работает неправильно. В очень редких случаях (и не тебе решать, когда именно) - могу написать правильную версию. Что является для тебя информативным советом - понятия не имею, и иметь не хочу. По-моему, указание на то, что программа вылетает с ошибкой, и где это происходит (заметь, в то время, как ты утверждаешь, что программа "влегкую" компилируется и работает, когда этого в принципе происходить не может), достаточно информативно.

А насчет "дружелюбности" ответов dry.gif Тот ответ предназначался НЕ ТЕБЕ. Улавливаешь идею?
Plushka
Улвеклись!Лучше помогите осушествить печать с подписью!!!
volvo
Какую печать? С какой подписью? Это две разных задачи, на всякий случай... Приведенное решение - только для первой из них. Причем, решение просто блещет программерскими находками, вроде:
Цитата
 if n<=m then
  begin
  write('Элементы больше среднего:');
  for i:=1 to n do
    if matr[i,i]>S then
      write(matr[i,i],' ');
  end
 else
  begin
  write('Элементы больше среднего:');
  for i:=1 to m do
    if matr[i,i]>S then
      write(matr[i,i],' ');
  end;
, но это пусть остается на совести автора.

Теперь о второй части: поскольку в задании явно не указано, что за матрица, и откуда она берется - то вот это:
const
  n = 10;
  m = 10;

type
  arrtype = array[1 .. n, 1 .. m] of integer;
  vectype = array[1 .. m - 1] of integer;

procedure sort(const arr: vectype; var ix: vectype; n: integer);
var i, j, T: integer;
begin
  for i := 1 to n do
    for j := n downto i + 1 Do
      if arr[ix[j - 1]] < arr[ix[j]] then begin
        T := ix[j - 1]; ix[j - 1] := ix[j]; ix[j] := T
      end;
end;

var
  arr: arrtype;
  mins, index: vectype;
  i, j, min: integer;

begin
  for i := 1 to n do begin
    for j := 1 to m do begin
      arr[i, j] := random(100);
      write(arr[i, j]:4);
    end;
    writeln;
  end;

  writeln; writeln;

  for j := 1 to m - 1 do begin
    min := maxint;
    for i := 1 to (n - j) do begin
      if min > arr[i, j] then min := arr[i, j];
    end;
    mins[j] := min; index[j] := j;
  end;

  sort(mins, index, m - 1);
  for i := 1 to m - 1 do begin
    write(mins[index[i]], '(', index[i], ') ');
  end;

end.
не противоречит ни одной букве задания:
Цитата
В каждом столбце над побочной диагональю найти минимальные элементы.Сформировать из них масив,упорядочить его по убыванию и напечатать номера столбцов,соответсвуюшие этому масиву
Krjuger
Короче порешим так,если я делаю только хуже,то УДАЛИ все мои посты.Насчет RTE я и без гугла могу понять,что это run time error 216.
Думать не сложно,но если ты показываеш человеку ошибку,то логично сказать причину, по которой она вылетает.
Цитата

хоть что-то было признано твоим Величеством полезным

О чем я и говорил,так самого начала.
Цитата

Я не пишу программ ЗА кого-то после определенных событий

В моем варианте это событие наступило еще до начала того,как начал писать, видимо.И кстати, я не просил ЗА МЕНЯ писать, и меня вообще больше интересовали мои ошибки логические на уровне алгоритма решения,чем синтаксические,которые отлавливаются простым F9.
Цитата

решение просто блещет программерскими находками,

А твой вариант тоже этим блещет,а хотяб попытался сделать диалог с пользователем,при введении размеров массива,а ты же выкрутился наиболее просто,только, как мне говоорил преподаватель мой:"пользователь не будет лазить в код программы и менять там значения".а вывод мой такой корявый,потому что жеского ограничения на отношение m,n я не задал.А так на скорость программы повлиять это не должно было,лиш чуть больше строчек кода.А так можно было найти меньшею границу и поставить от 1 до меньшей и тогда проблем не было бы,но на мой взгляд это носит чисто эстетический характер.какого либо усложнения или упрощения программы я от этого не вижу.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.