![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
fly |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите с задачкой
Вводится массив чисел MxM.Найти максимальные элементы по солбцам и выевсти на экран их значения и местоположение. Пример: Вводим массив размером 4x4 3 4 6 4 6 2 5 3 5 6 2 7 9 1 8 5 Ответ: Столбец 1 max 9 в строке 4 Столбец 2 max 6 в строке 3 Столбец 3 max 8 в строке 4 Столбец 4 max 7 в строке 3 Вот коешто написал.Но этот код находит только максимальное значение из всего массива. Код var A:array[1..100,1..100] of integer; n,i,j:integer; begin writeln('vv razmer massiva'); readln(n); for i:=1 to n do writeln('vvodite',n,'chisel'); for i:=1 to n do begin for j:=1 to n do begin Write('...'); Readln(a[i,j]); end; end; function max(A:array of array of integer):pair; i,j:byte; maxi,maxj:byte; result:pair; begin maxi:=1; maxj:=1; for i:=2 to N do for j:=2 to N do if A[i,j]>A[maxi,maxj] then begin maxi:=i; maxj:=j; end; result.i:=maxi; result.j:=maxj; max:=result; writeln(result) end; end. Как находить максимальный элемент по каждому столбцу?И как опеределить местоположение элемента? Сообщение отредактировано: fly - 5.05.2007 23:04 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Но этот код находит только максимальное значение из всего массива. Этот код в Турбо-Паскале даже не откомпилируется... |
Tan |
![]()
Сообщение
#3
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Вопрос, который вытекает из коммента volvo : fly, что у тебя за компилятор ? Так как судя по твоему посту ты выражаешься так, как - будто программа у тебя запустилась.
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата что у тебя за компилятор А это без разницы... Нарушена структура программы - описание процедуры внутри основного блока (после слова begin) не позволяет ни один компилятор Паскаля... |
Tan |
![]()
Сообщение
#5
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Цитата Вот коешто написал.Но этот код находит только максимальное значение из всего массива. Из этой фразы я сделал вывод, что автор запустил программу. Вопрос к fly : а как ты мог не запустив программу заключить, что она считает ?Сообщение отредактировано: Tan - 5.05.2007 23:44 -------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
fly |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да,вы правы,прога даже не компилится.Ступил я немного выложив прогу непроверевши.
Давайте вначале научимся находить максимальное значение из всего массива и правильно строить структуру программы с функциями. Насколько я понял описание функции должно находится после обявления переменных.Правильно? Тогда почему компилятор ругается на это слово? function max(A:array of array of integer):pair; |
Tan |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Типа pair изначально не существует (если ты его не создал сам). Если ты подразумевал логический результат функции, для для тебя тип boolean. Ты также не указал границы массива А. В общем виде A : array [1..X,1..Y] of твой тип - для двумерного массива.
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата почему компилятор ругается на это слово? Потому что конструировать тип ВНУТРИ описания заголовка нельзя... Все типы, которые используются в описании, уже должны существовать... Исключение - только открытые массивы (open arrays).Кроме этого, динамических массивов в Турбо Паскале тоже нет... |
fly |
![]()
Сообщение
#9
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Типа pair изначально не существует (если ты его не создал сам). Если ты подразумевал логический результат функции, для для тебя тип boolean. Ты также не указал границы массива А. В общем виде A : array [1..X,1..Y] of твой тип - для двумерного массива. А где нужно создавать тип pair?Просто указать после объявления перменных,напимер так:k:pair?Правильно? И ещё один вопрос: Переменные функции (i,j:byte; maxi,maxj:byte) должны указываться после обявления переменных или после описания функции? |
Tan |
![]()
Сообщение
#10
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Для начала тебе надо понять, какое результирующую значение будет у твоей функции? Судя по всему это максимальный элемент, зачем использовать свой тип если можно взять стандартный (real или integer). Переменные объявляешь либо в основной программе (тогда они видны во всех подпрограммах) либо в подпрограмме (тогда будут видны только в определённой подпрограмме). Подпрограммы - это функции и процедуры. У функции есть результирующее значение, у процедуры нет.
-------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
fly |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Я так понял шапка программы будет выглядеть следующим образом.Правильно?
Код var A:array[1..100,1..100] of integer; n,i,j,maxi,maxj,result:integer; function max(A:array[1..100,1..100] of integer ):integer begin Но почему компилятор ругается на эту квадратную скобку?Пишет error 54. function max(A:array[1..100,1..100] of integer ) Сообщение отредактировано: fly - 6.05.2007 18:08 |
Tan |
![]()
Сообщение
#12
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
смотри пост вольво, создай свой тип MyMas = array [1..X,1..y] of integer , и объявляй переменную с этим типом.
function max(A: MyMas):integer; Сообщение отредактировано: Tan - 6.05.2007 18:14 -------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
fly |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Никак не пойму почему компилятор ругается на слово "max" в строке finction max(A:MyMas):integer; .Пишет 86 ошибку.В хелпе посмотрел что это пропущен знак двоеточие.Если добовляешь знак двоеточие то компилятор говорит что идентефикатор "max" не был объявлен.Объявляю идентефекатор "max" в переменных.Компилятор выдаёт ошибку номер 21. |
Tan |
![]()
Сообщение
#14
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Потому что ты не выполнил указание, надо создать свой тип, для этого тебе надо в разделе Type его зарегестрировать
Type MyMas = array [1..100,1..100] of integer; Сообщение отредактировано: Tan - 6.05.2007 19:30 -------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
#86 - не из-за этого... Из-за того, что нет слова fInction, а есть только fUnction ...
|
fly |
![]()
Сообщение
#16
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Можешь объяснить для чего ты добавил вот эту строку.
|
Tan |
![]()
Сообщение
#17
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 559 Пол: Мужской Реальное имя: Бруно Репутация: ![]() ![]() ![]() |
Просто объявил массив со своим типом.
Добавлено через 12 мин. uses crt; Посмотри, если это то, что тебе надо. Я специально не указал в какой строке этот максимальный элемент, если мой наброски удовлетворяют остальным условиям, допиши сам. -------------------- Цитата Imagination is more important than knowledge. Albert Einstein |
fly |
![]()
Сообщение
#18
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ясно.
С шапкой разобрались...Програмим дальше... Я так понимаю что после шапки мы должны указать размер массива и вводить значения его элементов.Делаем это следующем образом.Верно? Type MyMas = array [1..100,1..100] of integer; Может кто нибуть объяснить в каком случае мы должны использовать команду ввода Read а в каком readLN?Читал в какомто учебнике по Паскалю что эти команды отличаются только тем что команда Readln пропускает строку а read нет.Они насамом деле только этим отличаются? Сообщение отредактировано: fly - 6.05.2007 20:18 |
volvo |
![]()
Сообщение
#19
|
Гость ![]() |
fly, эта программа у тебя в TP откомпилируется, на при запуске ты получишь Stack Overflow... Смотри:
function max(A:MyMas):integer;- здесь ты пытаешься передать массив размером 100*100*2 байта (каждый Integer) = 20000 байт... Размер стека по умолчанию - 16К... Получаешь переполнение... Так что либо уменьшай размерности массива, либо передавай массив не по значению (как ты его передаешь сейчас), а по ссылке: function max(var A:MyMas):integer;Вот так все содержимое массива в стек не копируется, вместо этого в функцию передается указатель на массив (4 байта), с которым она и работает... Кроме этого, есть еще как минимум одна ошибка - я уже говорил неоднократно, но эта ошибка возвращается вновь и вновь: никогда не описывай счетчики циклов где-то снаружи, как глобальные переменные... Описание счетчиков цикла должно быть КАК МОЖНО ближе к месту использования этого счетчика... Если это функция - то локально, в функции, если вложенная функция - то именно во вложенной, а не в материнской функции... Этим ты сильно облегчишь себе работу при отладке... |
fly |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ты имеешь ввиду счётчики циклов maxi,maxj" ?
Я так понял у нас обычная функция а не вложенная,значит мы должны объявить переменные циклов локально. Как локально объявить переменные цикла? После end; добавить строчку maxi,maxj:integer;?Но в таком случае компилятор говорит что maxi и maxj неизвестные идентификаторы. Где я ошибаюсь? Сообщение отредактировано: fly - 7.05.2007 12:04 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 6:33 |