Объединенный архив форумов UniverClub и StudLife (2006-2010). Поддерживает: Леонид Шевцов.

матрица в Pascal

1450
Помогите плз сделать несложную лабу по информатике в среде Pascal! По предыдущем лабораторкам полный зачет, все ок, НО вот про ету забыл, а сдавать в пятницу, времени разбираться нету, т.к. по остальным предметам нужно выезжать к сессии...очень надо!

Задача. Дана матрица m x n , все елементы которой различные вещественные(тоесть положительные, отрицательные, целые...) числа. В каждой строке выбрать елемент с наименьшим значением, затем среди етих чисел выбрать наибольшее значение. В качестве ответа вывести индексы елемента с найденым значением.

спасайте, плз!*HELP*
86

program Project1;

{$APPTYPE CONSOLE}

const
m = 2;
n = 3;
var
a : array [1..m, 1..n] of integer;
b : array [1..m] of integer;
i,j,f,k : integer;
begin

{ TODO -oUser -cConsole Main : Insert code here }

//Ввод значений в матрицу
for i := 1 to m do
begin
for j := 1 to n do
begin
writeln('Vvedite zna4eniya v massiv: ');
readln(a[i,j]);
end;
end;
writeln;
writeln('Matrica: ');

for i := 1 to m do
begin
for j := 1 to n do
begin
write(a[i,j], ' ');
end;
writeln;
end;



//Поиск наименьшего значения по строкам
f:=a[1,1];
k:=1;
for i := 1 to m do
begin
for j := 1 to n do
if a[i,j]<f then
begin
f:=a[i,j];
b[k]:=f;
inc(k);
end;
f := a[i,1];
end;
writeln;
writeln('Vektor naimenwix 4isel v strokax: &apos;);
for k := 1 to m do
write(b[k], ' &apos;);

writeln;

//Получаем наибольшее среди полученного веkтора

f:=b[1];
for k := 1 to m do
begin
if b[k]>f then
f:=b[k];
end;

writeln;

//Выводим наибольшее из того, что нарешали
for i:=1 to m do
for j:=1 to n do
if a[i,j]=f then
writeln ('4islo v stroke ', i, ' , stolbce ', j);
readln;
readln;
end.
1063
Lisena, так вывести вроде нужно индекс этого числа?
1450
Lisena, сенк)

добавлено через 30 секунд
Yu., тоесть?
2245
тебе нужет ответ не "число равно столько-то", а "число находится в энной строке и энном столбце".
1005
Lisena, сама писала что-ли?? Что-то это на обычный консольный паскаль мало похоже)) функция inttostr() заставляет предположить, что это Делфи.

f:=99999999;


Вот это вот ошибка! f нужно присваивать первому элементу при нахождении минимального числа.
b[k]:=f; можно написать возле инкремента. В общем для меня легче заново прогу написать, чем ошибки исправлять, но щас не досуг, на завтра много делать надо...
86
Maximus, начала писать я, а Fred у меня комп отобрал :) И творили вместе :) :)
Так что сложно ответить, сама писала или нет :) :) Скорее, вдвоем :)

А inttostr() - эт я и так знала ;)

добавлено через 1 минуту

Вот это вот ошибка!

Maximus

Я не думаю, что эт так категорично :) Это как вариант :) Ток не кричи громко)))

добавлено через 2 минуты

b[k]:=f

Maximus

А может, f:=b[k] ? :)
1010
Maximus, Знаю, что ошибка=)
просто на скорую руку, на очень скорую делал=)
а так - можно и так как ты и можно границу типа выставить))

добавлено через 1 минуту
Stiffler, а остальные правы, задание-то индексы вывести, но это не сложно))
если сам не додумаешь, я допишу вечерком))
86
Fred, это не именно ошибка, а недочет. ИМХО
2245
Lisena, какая у нас тут абитура собралась - аж гордость берет ;) *THUMBS UP*
1005
Lisena, я и не кричу:) А Фреда побей за такое! Так как f у нас integer, то ему нельзя присваивать значения больше 32767. Оно либо выведет ошибку, либо возвратит остаток от деления 99999999 на 32767, что тоже не есть правильным.
1450
)) эээ... может кто-то подведет черту?
1005

А может, f:=b[k] ?


нет, вот:
//Поиск наименьшего значения по строкам
f:=a[1][1];
k:=1;
for i := 1 to m do
begin
for j := 1 to n do
if a[i,j]<f then
f:=a[i,j];
b[k]:=f;
inc(k);
f := a[i][1];
end;
end;

...
86
Изменила... Похоже, так должно быть. Если что - говорите, исправлю ;)
213
убери все ИнтТуСтр - в паскале это не нуна
лишнее:

{ TODO -oUser -cConsole Main : Insert code here }

Lisena

{$APPTYPE CONSOLE}

uses
SysUtils;

Lisena
86
Frodo, убрала :) И еще одну ошибку нашла и ликвидировала :) :)

ЗЫ: в константах поставишь то значение, которое нужно будет. 2 и 3 ставили, чтоб легче было проверять :)
3
неграмотно сделано
86
Вы меня извините, но критиковать все могут! А сделать - впадлу.
Можно просто сказать, что кто БЫ изменил и почему.
2052
Lisena, молодец, что программу написала и так быстро! *THUMBS UP* Действительно, не каждый сподобится... Тем более не так уж и много недостатков :)
...но просто инициатива наказуема, что ж поделаешь ;)
213
Lippy, ну напсиала не она а Фред... но это уже не важно.

Lisena, кое-что исправил. то что скажу дальше принимай не как критику в твой адрес, а как совет.

ты находишь минимальное в каждой строке.
потом ищешь максимальное среди них.
а потом опять бегаешь по матрице и сравниваешь найденое с каждым числом.
ИМХО было бы лучше вместо последнего действия просто запомнить изначально индексы наибольшего среди наимешьних.
просто если матрица будет не 2х3 а 20000х30000 то мой вариант будет работать на порядок быстрее. :)
1010
Frodo,
а если 20 одинаковых чисел?
первое попавшееся возьмет да и все...
86
Frodo, а ты F7 не пробовал проверять? У меня этой прогой при проверке выводит минимальное : 0 0.

добавлено через 46 секунд
Lippy, да, действительно, все сделал Фред!! И все "спасибо" тоже ему!! Вот такой вот он у нас молодец!! :)

добавлено через 27 секунд

не как критику в твой адрес, а как совет.

Frodo

Советы по-другому выглядят. ИМХО

добавлено через 29 секунд

лишнее:

Frodo

Без этого были ошибки.
1010
Сеня критиковали за то, что компиляторы паскаля не воспримут этот код.
Берем довольно популярный компилер FPC и пробуем...
213
Fred, ты че дурак? какой нах ФПЦ ? обычным паскалем компилить надо!

а если 20 одинаковых чисел?
первое попавшееся возьмет да и все...

Fred

ну а я о чем?

Frodo, а ты F7 не пробовал проверять

Lisena

не пробовал, так как писал не в паскале, а прямо тут
1010
Frodo,
Эмм... Пиши, но думай или проверяй... FPC - Free Pascal...
Или ты готов оспорить, что это не компилятор паскаля?

Free Pascal (также известный как FPС Pascal) — это 32-х и 64-хбитный профессиональный компилятор языка паскаль. Он доступен для различных процессоров: Intel x86, Amd64/x86_64, PowerPC, Sparc. Прерванная версия 1.0 также поддерживала Motorola 680x0. Поддерживаются следующие операционные системы: Linux, FreeBSD, Mac OS X/Darwin, Mac OS classic, DOS, Win32, OS/2, Netware (libc и classic) и MorphOS.

86
Frodo, и к твоему сведению - я у Фреда хотела спросить лишь совет: правильные ли у меня были мысли по написанию этой проги. Как ее писать - я знала!

Цитата:
Сообщение от Fred
а если 20 одинаковых чисел?
первое попавшееся возьмет да и все...
ну а я о чем?

Frodo

А если тебе сдачу в магазине должны дать 20 грн (4 банкноты, стоимостью 5 грн.), а тебе дадут одну и скажут: "Иди, мальчик!" ?! Грубо, но похожа ситуация, правда?!
213
Fred, дочитал бы сначала статью про фпц а потом постил:

Важной особенностью данного компилятора, в отличие, например, от GNU Pascal, является ориентация на распространённые коммерческие диалекты языка: Object Pascal и Delphi.


то есть русским по белому написано что это не оригинальный ТПшный компилятор, а ближе к дельфийскому

добавлено через 2 минуты

А если тебе сдачу в магазине должны дать 20 грн (4 банкноты, стоимостью 5 грн.), а тебе дадут одну и скажут: "Иди, мальчик!" ?! Грубо, но похожа ситуация, правда?!

Lisena

нихрена не похожая. ты не поняла суть ситуевины. неправильно работает именно твой вариант.

пример:
найденное число: 13. с индексами [5,7]
твоя прога ищет первое попавшееся число 13 и выводит его индексы (например [3,2]), но это 13 не является минимальным в своей строке, следовательно ответ неправильный.

я предлагаю запоминать сразу индексы чтоб такого не было.
1010
Бляц!
Паскаль?! Паскаль!
Как заявлено у топикстартера "среда паскаль", я такого не знаю! Турбо паскаль - да!
Выбор среды - соответственно за мной, за тем, кто делает!
Конечно понимаю, что в униках стоит Турбо или Делфя! Но все же! Алгоритм человеку был дан!
Что в твоем понимании оригинальный копмилятор? От борланда? А чем други плохи?
Ть.. Все хорошо, только борланда уже нет!

А какой более "оригинальный" для С++ - Визуал, Борланд, ГСС??
213
сделал сам
проверил
работает
матрица задается случайными числами от 1 до 1000

uses crt;
const m=3;
n=3;
var a:array[1..n,1..m] of double;
b:array[1..m] of double;
mini,minj:array[1..n] of byte;
i,j:byte;
min,max:double;

Begin
clrscr;
Randomize;
{Vvod matrici}
for i:=1 to n do
for j:=1 to m do
a[i,j]:=random(1000);
{=====================================================}
{Iwem minimal'noe v kajdoy stroke}
for i:=1 to n do
begin
min:=maxint;
for j:=1 to m do
if a[i,j]<min then
begin
min:=a[i,j];
mini:=i;
minj[i]:=j;
end;
b[i]:=min;
end;
{=====================================================}
max:=-maxint;
j:=0;
for i:=1 to m do
if b[i]>max then
begin
max:=b[i];
j:=i;
end;
{Vivod nujnix indeksov}
writeln('a[',mini[j],',',minj[j],']&apos;);
readln;
end.


[i] добавлено через 18 минут

Бляц!
Паскаль?! Паскаль!
Как заявлено у топикстартера "среда паскаль", я такого не знаю! Турбо паскаль - да!
Выбор среды - соответственно за мной, за тем, кто делает!
Конечно понимаю, что в униках стоит Турбо или Делфя! Но все же! Алгоритм человеку был дан!
Что в твоем понимании оригинальный копмилятор? От борланда? А чем други плохи?
Ть.. Все хорошо, только борланда уже нет!

А какой более "оригинальный" для С++ - Визуал, Борланд, ГСС??

Fred

ну тут не совсем прав топикстартер тчо не указал в чем оин пишут. ну суть одна: не в "среде обджект паскаль" или "среде дельфи" а в "среде паскаль", что само собой исключает всякие обджекты!

алгоритм был дан неправильный. почему? смотри предыдуший пост про число 13
1010

ну тут не совсем прав топикстартер тчо не указал в чем оин пишут. ну суть одна: не в "среде обджект паскаль" или "среде дельфи" а в "среде паскаль", что само собой исключает всякие обджекты!

Так же, как и разные турбо! И не конкретизирует на чем писать!

алгоритм был дан неправильный. почему? смотри предыдуший пост про число 13

Незнаю, как ты там проверял, но он был правильный! Кроме разве что "лопнувшего" типа, в вашей пресловутой "среде паскаль". ну и вобще применения этого действия. Макс был прав, тут спорить не буду!
213

Незнаю, как ты там проверял, но он был правильный!

Fred

блин, ну ты логически подумай. вчитайся в мой пост и подумай так это или нет. если нет - обоснуй
1010
Начнем с того, что я уже не писал поиск индексов этого числа этого числа, как сейчас написанно! я писал когда версия была, что выводила только само число а не его индексы! к Этой проге, что сейчас, я не имею отношения!
213
Fred блин, не был бы я супер модером написал бы по другому, ну так чего ты тогда говоришь?
1450
Frodo, и тебе спасибо за помощ, признателен.
1010
Я тебе вобще говорил, за алгоритм нахождения этого числа. Его индексы, это уже не сложно. Дело в том, что вы мне старательно доказывали свою турбо-паскале-сависимость! На что я ответил со смыслом, что доводы не обоснованы! что моя прога запашет и запашет в компиляторе языка паскаль
213
Fred, твоя прога (та что висит во втором посте) сломается на второй строчку. не веришь? проверь.

зыЖ я говорю про ТУРБО паскаль


Stiffler, скажи, в каком паскале вы работаете?
1010

Fred, твоя прога (та что висит во втором посте) сломается на второй строчку. не веришь? проверь. зыЖ я говорю про ТУРБО паскаль

Frodo

Повторяю вопрос, где была конкретно оговорена Среда Разроботки?
Синтаксис языка(Обжект паскаль, паскаль, прочее) к алгоритму не имеет ни малейшего отношения!
1450
Fred, Frodo, топик не для выяснения отношений! спасибо, что помогли, но сраться не стоит.

Stiffler, скажи, в каком паскале вы работаете?

Frodo
я дал не полную инфу в топикстарторе, т.к. мы еще даже не запускали паскаль на компах,работали с другим...я не знаю, что там стоит у них( возможно что я просто провтыкал начало лекции, и писал уже особенности, алгоритм, коды...). Но коды Фродо мне не известны, в отличие от Фреда.

PS. скачал себе ТМТ Pascal IDE, так в нем 1ый вариант проги не пашит(Фред). со вторым все ок
213

но сраться не стоит.

Stiffler

та мы не сремся, это у нас нормальные отношения такие :)
26


PS. скачал себе ТМТ Pascal IDE, так в нем 1ый вариант проги не пашит(Фред). со вторым все ок

Stiffler

бррр, по-моему это компилер ада/си/паскаль, там пробовал писать самый простой код, херня получалась. PascalABC для учебных целей самое то + задачник в пдфе
213

PascalABC

KomCrER

ИМХО ацтой. мне вообще не понравился
26

ИМХО ацтой. мне вообще не понравился

Frodo

для учебных целей


как полноценное ide никак низя использовать
86
Frodo, все равно: если у тебя таам будет 2 числа одинаковые (притом, ИМХО, надо выводить массив на экран, который был заполнен рандомом), то выведет ток одно число? Это ж будет несовсем правильно: Тебе дано было задание вывести индексы максимального числа из минимальных в каждой строке. Если у тебя будет такая матрица:
2 11 16
1 15 3
10 96 2
, то оно минимальные должно выбрать 2[1,1], 1[2,1] и 2[3,3]. Так ведь?
а потом из этих оно должно выбрать максимальное. Т.е., это будут 2[1,1] и 2[3,3]. У тебя оно выведет ток 2[1,1]. А 2[3,3] куда денется? Это будет ошибка, ИМХО.

добавлено через 2 минуты

твоя прога (та что висит во втором посте)

Frodo

Потом я ее изменяла. Добавила, чтоб выводились индексы чисел и убирала IntToScr.
Потом ты ее еще раз редактировал.

добавлено через 2 минуты
Frodo, распиши Stiffler'у не известные ему коды: ему ж ее еще сдавать надо :)
213

Frodo, распиши Stiffler'у не известные ему коды: ему ж ее еще сдавать надо

Lisena

а я хз что ему не понятно. пусть говорит что - расскажу
86
Frodo, ты подправил в проге мои замечания?
1450
здал. !!! 8))
Missing
Stiffler, поздоровляю!
Відверто порадувала дискусія про компілятори і форми паскаля ;)
По суті - Фродо правий в тому що всілякі загадкові написи зайві, бігати по масиву тричі - зайве, а САМЕ головне, що якщо декілька мінімальних елементів є максимальними, виводити ВСІ - безглуздя. Виводиться ОСТАННІЙ (чому в когось вийшов перший - не зрозумів).
Взагалі задача вирішується одним вкладеним циклом. В кінці в певних змінних зберігаються індекси макса серед мінів. За циклом - вивід на екран.
1450

Stiffler, поздоровляю!

Timer

*THUMBS UP*
86
Stiffler, поздравляю!! :)
1010
Stiffler, Мои поздравления! Молодец! Обращайся еще, вот такими перепитиями - поможем=)


Timer, По логике решения проблемы могу с тобой поспорить, но уже не в этой теме!
86
Timer, а почему последний должен выводиться?!
1450
Fred, Lisena пасиб. правда пришлось еще и алгоритм решения писать и обьяснять, но я выкрутился))
86
Stiffler, алгоритм был у первого варианта проги :)
Missing
Fred, я з радістю!

Lisena, там Фродо намагався посянити. Читаємо початкове завдання

В качестве ответа вывести индексы елемента с найденым значением


Тобто ОДИН елемент і його індекси, а не ВСІ.
Насправді, за УМОВАМИ ЗАДАЧІ

все елементы которой различные

такий і буде 1 і його індекси виведуться... Але якщо вже залазити в рендоми, то НЕМАЄ ЗНАЧЕННЯ при відповіді на питання "хто постяв на Бобік?" кого з трьох ми вкажемо, якщо сцяли троє ;)
Ну.. пробач за образність - про 20 гривень ви наче не зрозуміли
86
Timer, рандомом тоже будет не очень правильно. Есть одинаковые числа - уже не выполняется условие тогда. (Я ту строчку не дочитала сначала)
Missing
Lisena, можна зробити рандом з перевіркою чи не було ще такого елементу ;) Це не саме важливе