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 килобайт ) Кол-во скачиваний: 217
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 7.04.2006 21:01
Сообщение #2


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

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

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


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 8.04.2006 9:43
Сообщение #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 - 5.11.2006 19:07


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


Гость






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

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





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

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


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

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

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

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

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

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


Гость






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

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





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

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


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

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

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

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

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

 



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