Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача на строки и массивы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
demure
Пожалуйста! Помогите срочно! Хотя бы наводку какую-нибудь... Вообще без понятия, что тут делать smile.gif

Программа должна содержать меню и ввод-вывод в окна на экране. Необходимо предусмотреть контроль ошибок пользователя при вводе данных.
При разработке программы применить технологию нисходящего проектирования. Логически законченные объекты оформить в виде подпрограммы, все необходимые данные которым передаются через список параметров. Использование глобальных переменных следует избегать.

Итак, задание smile.gif
Предприятие имеет местную телефонную станцию на 20 номеров. Телефонный справочник данного предприятия для каждого номера телефона содержит номер помещения и список служащих, сидящих в данном помещении.
Составить программу, которая:
- корректирует базу
- по номеру помещения выдает номер телефона
- по фамилии выдает номер телефона и номер помещения.
номер телефона двузначный.
klem4
Цитата
ввод-вывод в окна на экране


Программа под windows должна быть ? С окнами ? Или что ты имел в виду ?

А вообще-то очень пахнет обычной задачей на записи, на форуме решалось достаточно много их ... используй поиск, в какой конкретно части программы возникает проблемма ?
demure
сам не понял про какие окна там говорят. программа на BP 7.0, как в школе smile.gif
klem4
Хорошо. Про окна забыли smile.gif

Ты начни делать ... дальше само пойдет, вот увидишь, организуй для начала заполнение базы, запись я бы описал так :

Type
TRec = record
tNumb : byte; // номер телефона из 2-х цифр
p : byte; // номер цеха
t : byte; // кол-во рабочих в данном цехе
workers : array[1..20] of string[30]; // фамилии рабочих данного цеха
end;

var
base : array[1..20] of TRec;
volvo
demure, ты поиском по форуму пользовался? Скажи мне, чем кардинально твоя программа отличается от "магазина", "ж/д вокзала", "аэропорта", "спортивной команды"? Тем, что ЗА тебя решат ее так, что тебе только сдать останется?

Если не будет ТВОИХ набросков и конкретных вопросов по заданию (вопрос "ничего не получается" не пойдет), тема закрывается...
demure
Вот, наконец-то занялся программой.
Сделал заполнение базы. Код такой:

Код

uses Crt;
type
TelefStation = Record
phone: LongInt;
nomer: byte;
FIO: string;
end;
var
Book: array[1..20] of TelefStation;
Nums,I: byte;
code: integer;
c: char;
quit: boolean;
{dobavlenie novoi zapisi}
procedure New_Item;
var
Kom:byte;
F:String;
Tl:LongInt;
begin
Clrscr;
Inc(Nums);
if Nums>20 then
begin
write('maksimalnoe kolichestvo zapisei!');
exit; end;
begin
writeln('Zapis N:',Nums); writeln;
writeln('Vvedite Nomer telef:');
readln(Tl);
writeln('Vvedite Nomer pomesheniya:');
readln(Kom);
writeln('Vvedite FIO');
readln(F);
writeln;
with Book[Nums] do
begin
FIO:=F;
nomer:=Kom;
phone:=Tl;
end;
Write('Novaya zapis uspeshno dobavlena!');
end;end;


далее по заданию - корректировка базы.
т.е., как объяснила (мало что понимающая, к сожалению) преподша, нужно, чтобы программа могла редактировать любую запись (удалять, изменять и пр.)
с удалением, я думаю не сложно... а вот с изменением. не совсем понимаю, как делать... нужно еще искать наверное, или, может поможете? smile.gif
volvo
Цитата
а вот с изменением. не совсем понимаю, как делать...

Как раз, с изменением дело тоже обстоит просто. Тебе нужно выбрать (а может, это указано у тебя в задании где-нибудь), ты хочешь работать напрямую с файлом, или сначала все данные читать в массив, обрабатывать их, и перезаписывать файл?

Я бы советовал второй вариант. Тогда алгоритм изменения записи такой: Читаешь содержимое файла в массив, по нужному тебе полю ищешь запись, которую надо поменять, и, собственно, меняешь:
WhatToFind := '...'; { Кого будем искать, эту строку можно и вводить с клавиатуры}
For i := 1 To 20 Do
With Book[i] Do Begin

{ Может быть не FIO, а любое другое поле из типа TelefStation,
зависит от того, что тебе нужно искать }
If FIO = WhatToFind Then Begin
{ Здесь запрашиваешь новые данные и заменяешь ими старые }
End;
Guest
Цитата

да дело в том, что программа не должна использовать файлы. мы вообще работу с файлами еще не изучали smile.gif
в принципе можно и с ними сделать, ведь удобнее, ясное дело, училка все равно не допрет в чем дело, но мне это труднее...
demure
Задание дано в таком же виде, как я написал - больше ничего..
базу всю, видимо, нужно вводить вручную каждый раз))
да, контроль ошибок... куда ткнуть проверку на то, двузначный ли номер я тоже не совсем понимаю
volvo
Цитата
куда ткнуть проверку на то, двузначный ли номер я тоже не совсем понимаю

Сразу после ввода номера и проверяй его на двухзначность:
With Book[i] Do Begin
...
Repeat
Write('Введите номер: '); ReadLn(nomer);
If not nomer in [10 .. 99] Then
WriteLn('Ошибка - номер должен быть двухзначным !!!')
Until nomer in [10 .. 99];
...
End;
Guest
так, это понятно.
ну так что там с корректировкой? unsure.gif
volvo
blink.gif Я же в посте №7 написал, как в массиве найти нужную запись... Не работаешь с файлами - не надо, но массив-то у тебя есть...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.