Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Нужна помощь в решении!

Автор: Plushka 23.05.2009 23:11

Помогите пожалуйста решить задачки чтоб на их основе хоть что-нибудь понять smile.gif(Скоро зачет)
Я понимаю что они должны быть простыми но потратьте чуточку времени чтоб помочь.

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


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

Автор: Krjuger 24.05.2009 1:04

Ну первое я произвольно заполняю матрицу с данными размерами числами от 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 24.05.2009 1:20

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

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

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

Добавлено через 2 мин.
Автору топика: тему переименуй... "Помогите" - не является информативным названием...

Автор: Krjuger 24.05.2009 2:13

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

Цитата

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

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

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

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

Автор: Plushka 24.05.2009 12:20

Сасибочки!!!Не представляешь как ты мне помог!

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

Автор: volvo 24.05.2009 13:24

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

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

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

А насчет "дружелюбности" ответов dry.gif Тот ответ предназначался НЕ ТЕБЕ. Улавливаешь идею?

Автор: Plushka 24.05.2009 14:07

Улвеклись!Лучше помогите осушествить печать с подписью!!!

Автор: volvo 24.05.2009 16:58

Какую печать? С какой подписью? Это две разных задачи, на всякий случай... Приведенное решение - только для первой из них. Причем, решение просто блещет программерскими находками, вроде:

Цитата
 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 24.05.2009 17:48

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

Цитата

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

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

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

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

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

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