IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Задача с меню
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Большой привет всем участникам форума! У меня есть небольшая просьба: я написал программу, но не уверен, что все сделал эффекктивными методами. Не могли бы Вы посмотреть программу (файл прикреплен) и указать наявные и логические ошибки? Можно ли как-то уменьшить, улучшить программу?
Само задание:
Код

В программе осуществляется работа с 3 векторами. Память под них выделяется динамически с помощью getmem'а, по мере необходимости и в необходимом объёме.
Программа выводит и работает в соответствии со следующим меню:
выбор вектора
Выбирается один из трёх векторов. Все дальнейшие действия будут осуществляться с этим вектором, пока не будет выбран другой вектор. При переключении на новый вектор, старый вектор сохраняется и к нему можно вернуться, снова выбрав его номер.
ввод вектора
Вектор вводится в виде строки, содержащей целые числа, разделённые запятыми.
вывод вектора
Элементы вектора выводятся на экран.
сортировка вектора
Отсортировать вектор, метод сортировки выбирается в соответствии с вариантом (см. таблицу).
обработка вектора
Составить новый вектор из некоторых элементов текущего вектора, отсортировать и вывести. То, из каких элементов составлять новый вектор, и метод сортировки определяется вариантом (см. таблицу). Память под вектор выделяется getmem'ом, а после вывода освобождается freemem'ом.
выход
При выходе требуется освободить выделенную память с помощью freemem.

Программа должна корректно обрабатывать повторный ввод уже введённого вектора, попытки ввода невыбранного вектора, вывода невведённого вектора и т.п.

Какие элементы брать при обработке     Метод         
           повторяющиеся                           просеивание                   

Заранее спасибо.
- задание
P.S.: программа откомпилированна и работает, но не выполняет условие повторного ввода элементов в заданный вектор - не знаю как справиться с этой проблемой.

.DOC файл удален. Читаем правила!

Сообщение отредактировано: Денис18 -


Прикрепленные файлы
Прикрепленный файл  LAB.PAS ( 5.54 килобайт ) Кол-во скачиваний: 128
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


1. напиши задание
2. что такое нелогические ошибки?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Что-то ты очень намудрил по поводу запятой, вот посмотри такой вариант, правда сокращенный немного, я думаю делать стоит в таком ключе :

uses crt;

type


TType = integer;

PArr = record
arr : ^TArr;
size : word;
end;

TArr = array [1..1] of TType;
TArrays = array [1..3] of PArr;


procedure Free(var P : PArr);
begin
FreeMem(P.arr, P.size * sizeof(TType));
end;

procedure Init(var P : PArr; n : word);
begin
if p.size <> 0 then Free(P);
P.size := n;
GetMem(P.arr, P.size * sizeof(TType));
end;



procedure Input(var P : PArr);
var
i : word;
begin
clrscr;
writeln('Введите ', P.size, ' элементов через пробел');
for i := 1 to P.size do read(P.arr^[i]);
end;

procedure Print(const P : PArr);
var
i : word;
begin
for i := 1 to P.size do write(P.arr^[i], ' ');
end;

procedure Menu(var a : Tarrays; var quit : boolean; var indx : byte);
var
choice : char;
size : word;
begin

clrscr;

writeln('1 -> Choose array');
writeln('2 -> Input array');
writeln('3 -> Print array');
writeln('4 -> Quit');

choice := #0;

repeat
while keypressed do choice := readkey;
until choice in ['1'..'4'];

case choice of
'1' : begin clrscr; write('Indx = '); readln(indx); end;
'2' : begin write('n = '); readln(size); Init(a[indx], size); Input(a[indx]); end;
'3' : begin Print(a[indx]); readln; end;
'4' : quit := true;
end;
end;

var

arrays : TArrays;
indx : byte;
stop : boolean;

begin
stop := false;
while (not(stop)) do Menu(arrays, stop, indx);
end.


Сообщение отредактировано: volvo -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Денис18,
А еще лучше - попробовать пользоваться тем, что выкладывалось в ответ, кстати, на твой же вопрос:

Разбиение строки на числа
dry.gif Или ты думаешь, я делал это для чего? Просто, потому что время некуда было девать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Klem, cпасибо за помощь! Но вот только одна проблема? Ту задачу которую ты написал, она же не совсем сообветствует условию. Ты мне посоветуешь вписать твои процедуры в программу? Или же как-то можно исправить прям у меня в проге, чтоб не было траблов с идентификаторами и т.п.??

Цитата(volvo @ 8.04.2006 11:06) *

Денис18,
А еще лучше - попробовать пользоваться тем, что выкладывалось в ответ, кстати, на твой же вопрос:

Разбиение строки на числа
dry.gif Или ты думаешь, я делал это для чего? Просто, потому что время некуда было девать?

Уважаемый, Volvo!!! Я дико перед тобой извиняюсь! Я не вставил твою функцию в прогу, т.к не придумал, как реализовать твой алгоритм, не вызывая функцию из главной части программы). А в инсте препод сказал, что в главной части можно только инициализировать прогу и ожидать ввода команд! Не обижайся на меня! Я же только начинаю программировать, поэтому не всегда могу воткнуть, как изменить прогу - я всего лишь на 1 курсе! Если тебе не влом, то можешь хоть краем глаза указать на ошибки? Обещаю, впредь буду прислушиваться к твоему мнению. С уважением, Денис.

Сообщение отредактировано: Денис18 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






А ... Мммм... Какая разница, вызывать процедуру из "главной части", как ты ее называешь, программы, или из другой процедуры? Объясни мне этот момент...

Вообще-то процедуры и функции для того и были придуманы, чтобы их можно было вызывать ОТОВСЮДУ, в том числе и из других подпрограмм... Ты же в своей программе вызываешь InputArray из процедуры Wait? Значит, это можно делать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 8.04.2006 14:10) *

А ... Мммм... Какая разница, вызывать процедуру из "главной части", как ты ее называешь, программы, или из другой процедуры? Объясни мне этот момент...

Вообще-то процедуры и функции для того и были придуманы, чтобы их можно было вызывать ОТОВСЮДУ, в том числе и из других подпрограмм... Ты же в своей программе вызываешь InputArray из процедуры Wait? Значит, это можно делать?

Да, конечно, ты прав. Просто так вышло, что я написал разбиение строки раньше чем получил ответ на форум, а исправлять идентификаторы в твоей функции, вставляя ее в прогу, не захотел. Признаю, что поступил нехорошо. Впредь, обещаю такого не делать. Всегда буду пользоваться вашими советами. Но помогиет мне с уже написанной мной прогой. Укажите на ошибки. Я думаю, что если я написал сам, а не перекатал готовую процедуру лучше. Плз!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 24.08.2017 4:14
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"