![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
SunDevil |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите, плиз, разобраться с такой проблемой: в прикрепленном файле наполовину сделанный мой курсовик. Все ООП содержтся в файле Main.PAS В этом файле нормально работает только массив (с матрицей и списком я еще не разобрался). Когда запустите прогу, то увидете меню. Мне надо, чтобы на данный момент ВЫ помогли бы мне реализовать первый пункт меню (РАБОТА С МАССИВОМ). Надо, чтобы когда я зашел в этот пункт меню и выбрал любой другой пункт (Ввод массива, ввод диапазона от А до В, вывод измененного массива), то соотвественно это все работало. Моя проблема заключается в том, что я не знаю как вызывать файл Main.PAS и чтобы там все прекрасно работало :o
ПОМОГИТЕ, плиз :p2: Прикрепленные файлы ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Так напиши процедуры, который вызываются вот тут:
input_baza(list,n); Как ты хочешь, чтобы тебе помогли, если там у тебя черт ногу сломит в этих вызовах меню из одного в другое?... Да и с массивом тоже... Ты же его не подключил, откуда знаешь, что он работает? |
SunDevil |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Чтобы всем понятнее было :
Исходный код unit main; interface type TAbst=object n,k:integer; constructor Init; procedure InData; virtual; procedure OutData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; mas=array[1..1] of real; TMas=object(TAbst) x,y:^mas; constructor Init; procedure InData; virtual; procedure OutData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; matr=array[1..1] of ^mas; TMatr=object(TAbst) m:integer; x:^matr; y:^mas; constructor Init; procedure InData; virtual; procedure OutData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; PList=^List; List=record dat:real; next:PList; end; TList=object(Tabst) beg,beg1:PList; constructor Init; procedure InData; virtual; procedure OutData; virtual; procedure Form; virtual; procedure OutRes; virtual; destructor Done; virtual; end; PMas=^TMas; PMatr=^TMatr; {PList=^TList;} implementation constructor TAbst.Init; begin writeln('Введите количество элементов'); readln(n); end; procedure TAbst.InData; begin end; procedure TAbst.OutData; begin end; procedure TAbst.Form; begin end; procedure TAbst.OutRes; begin end; destructor TAbst.Done; begin end; constructor TMas.Init; begin TAbst.Init; getmem(x,n*sizeof(Mas)); getmem(y,n*sizeof(Mas)); end; procedure TMas.InData; var i:integer; begin for i:=1 to n do begin writeln('a[',i,']= '); readln(x^[i]); end end; procedure TMas.OutData; var i:integer; begin for i:=1 to n do write(x^[i],' '); end; procedure TMas.Form; var i:integer; a,b:real; begin writeln('Введите диапазон значений от A до B'); readln(a,B); k:=0; for i:=1 to n do if (x^[i]<a) OR (x^[i]>b) then begin inc(k); y^[k]:=x^[i]; end end; procedure TMas.OutRes; begin { for k:=1 to n do write(y^[k],' ');} end; destructor TMas.Done; begin freemem(x,n*sizeof(Mas)); freemem(y,n*sizeof(Mas)); end; end. Это модуль с ООП, так. Вопрос, где я не подключил массив? Мне надо чтобы на данный момент вызывалась и работала процедура ввода массива (procedure TMas.InData), вывода массива (procedure TMas.OutData) и процедура TMas.Form Как это, так сказать, реализовать??? Сообщение отредактировано: volvo - 12.06.2005 20:09 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ну, и где во всей программе у тебя хоть одна их этих функций вызывается? Покажи мне !!! У тебя этот модуль где-нибудь в программе упоминается? Ты вообще разницу между "реализовать" и "подключить" знаешь? Куда ты полез? Какое ООП? Не ты ли позавчера говорил:
Цитата(SunDevil @ 3.06.05 22:30) Помогите переделать прогу. Там все на объектах, а мне надо просто чтобы без объектов было, а то я в них не шарю... Уже шаришь? |
SunDevil |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
Разницу между реализовать и подключить знаю, подключить-то я смогу, мне надо чтобы ВЫ показали, как вызов делается этих объектов??? |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Цитата(SunDevil @ 5.06.05 19:20) как вызов делается этих объектов??? Вот так: var massObj: TMas; Я бы massObj.Init делал сразу на входе в процедуру ShowMenu2, а massObj.Init - вот тут: procedure show_menu2; Одно замечание: У тебя в программе используется вызов одной функции из другой: procedure show_menu; Я бы не советовал так делать. Лучше оформи меню отдельной функцией и делай так: { это вернет выбранный пункт меню } |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Вот тебе простой пример работы с многоуровневым меню... Я подключил массив, он инициализируется и удаляется при выходе в предыдущее меню, больше с ним никаких действий не производится...
Попробуй разобраться в работе menu.PAS ... Прикрепленные файлы ![]() |
SunDevil |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
2 volvo
СПАСИБО ЗА МЕНЮ ОГРОМНОЕ! РАЗОБРАЛСЯ! Но появилась одна проблемка: в файле main.pas есть такая процедура: Код procedure TMas.OutRes; begin clrscr; for k:=1 to n do write(y^[k],' '); readln; clrscr end; Так вод копмилятор ругается ![]() Что это такое??? Помогите, плиз ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата(SunDevil @ 10.06.05 20:01) компилятор ругается ![]() Правильно ругается. Смотри: Цитата(Pascal Help) The FOR statement control variable must be a simple variable defined in the declaration part of the current subprogram. То есть управляющая переменная цикла должна определяться в разделе описаний текущей подпрограммы... А у тебя она где описана? В объекте-предке? Так нельзя... Переопредели ее: procedure TMas.OutRes; Кстати, если ты собираешься использовать те переменные n, k из TAbst только как переменные цикла - то можешь смело их удалять, Паскаль тебе это сделать не позволит. Определяй переменные там, где они нужны, а не "на всякий случай"... ![]() |
SunDevil |
![]()
Сообщение
#10
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo
Спасибо, буду работать дальше... |
SunDevil |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да и еще такой вопрос. Можно ли запретить вводить массив и список перед вводом матрицы? Потому что на основе размерности матрицы надо создавать уже размерность массива и списка???
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Цитата(SunDevil @ 10.06.05 21:12) Можно ли запретить вводить массив и список перед вводом матрицы? Ты имеешь в виду запретить создание объектов типа TMas и TList если не был создан экземпляр TMatr? Тогда работай с указателями, а не с самими объектами: Var |
SunDevil |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Еще есть вопрос:
... Мне надо чтобы когда я выбирал этот пунт (СПРАВКА), то в окне появлялось всего пять строчек текста. Как это сделать??? |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Ну, раз только 5 строчек, то я бы просто задавал их в константе, а потом выводил и ждал нажатия на Enter ...
Const Вот и все... |
SunDevil |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Постепенно добрался до работы с матрицей... Соответсвенно надо писать процедуру procedure InData для матрицы. В типе у меня написано так:
matr=array[1..1] of ^mas; Я уже сказал, что мне надо пока только ввести матрицу. Чего-то ковырялся я с вводом, ковырялся, да ничего в отличии от массива сделать не могу. В массиве хоть просто было. А тут делал так: procedure TMatr.InData Копмилятор снова бухтел на меня...Помогите написать эту процедурку, СПАСИБО! |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата(SunDevil @ 12.06.05 15:12) Копмилятор снова бухтел на меня... И снова он прав ![]() procedure TMatr.InData |
SunDevil |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
procedure TMas.Form; Это процедура для работы с массивом. В ней я ввожу диапазон значений и получаю новый массив. А как ее надо переделать под матрицу, чтобы искала в матрице и выводило в виде массива? Вроде надо еще цикл один или два??? Помогите, плиз ;) Сообщение отредактировано: volvo - 12.06.2005 17:33 |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Один дополнительный цикл:
procedure TMatr.Form; |
SunDevil |
![]()
Сообщение
#19
|
Новичок ![]() Группа: Пользователи Сообщений: 28 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сделал как вы написали, пишу далее процедуру procedure TMatr.OutRes
procedure TMatr.OutRes; В программе выводит черт знает что :o Тестил на: -3 4 5 6 -7 3 2 4 5 Диапазон: 0;4 Выводит массив: -3 5 6 -7 5 5 8 1 7 Откуда еще и 8 вылезла??? Ничего не понимаю, поправьте меня |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
:no: Неправильно... В массиве Y скорее всего или просто мусор, или остатки от предыдущего использования... Нельзя распечатывать весь массив. Лучше ввести переменную ArrLen в тип TMatr, и работать с ним:
Type |
![]() ![]() |
![]() |
Текстовая версия | 5.07.2025 22:17 |