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

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

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

> Задача с меню
Денис18
сообщение 7.04.2006 20:24
Сообщение #1





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

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


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

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

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

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

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

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

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


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


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 - 5.11.2006 19:07


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

Сообщений в этой теме


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

 



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