Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 453
от 29.09.2007, 14:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 246, Экспертов: 55
В номере:Вопросов: 1, Ответов: 3


Вопрос № 103167: Доброго времени суток, уважаемые эксперты. Есть такая задача В одной газете 10 сотрудников. Необходимо создать базу данных, в которой указать возраст, опыт работы, должность и оклад каждого сотрудника. Организовать поиск по данным, в качеств...

Вопрос № 103.167
Доброго времени суток, уважаемые эксперты.
Есть такая задача
В одной газете 10 сотрудников. Необходимо создать базу данных, в которой указать возраст, опыт работы, должность и оклад каждого сотрудника. Организовать поиск по данным, в качестве параметра используя фамилию.
Только приступил к решению и сразу же прозоишла заминка в модуле для ввода с клавиатуры фамилии сотрудников. Ниже код:
program n;
var
ar: array [1..10] of string;
i:string;
begin
writeln('FAMILII ');
for i:=1 to 10 do
read(i);
end;
Паскаль пишет: "Invalid for control variable", из чего я догадываюсь, что ошибка вызвана несовпадением типов. Вопрос: как организовать цикл для ввода с клавиатуры фамилий сотрудников, не используя для прохода по массиву числовой индекс в опрераторе цикла, или как-то по-другому?
Если очень нравится прораммировать, можно решить всю задачу, буду благодарен, но прежде всего хотелось бы получить ответ на 1-ый вопрос.
Заранее спасибо
С уважением,
Отправлен: 24.09.2007, 07:26
Вопрос задал: Чепиков Александр Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Чичерин Вадим Викторович
!!!
Здравствуйте, Чепиков Александр Валерьевич!
У Вас объявленная строковая переменная I используется в качестве переменной цикла.
Требуется объявить и использовать переменную целочисленного типа (byte, int и т.п.)

У меня довольно сильные подозрения, что что фамилии сотрудников должны были вводиться в массив ar. :)
-----
∙ Отредактировал: sir henry (Академик)
∙ Дата редактирования: 24.09.2007, 07:47

Приложение:

---------
Чем больше я смотрюсь в зеркало, тем больше верю Дарвину...

Ответ отправил: Чичерин Вадим Викторович (статус: 4-ый класс)
Ответ отправлен: 24.09.2007, 07:30
Оценка за ответ: 3
Комментарий оценки:
Спасибо, Паскаль больше не выводит сообщение об ошибке, но цикл почему-то заверщается после ввода первой строки. Знать бы что нужно исправить

Отвечает: Tenevoi
Здравствуйте, Чепиков Александр Валерьевич!
1)for i:=1 to 10 do; i это, как вы можете обратить внимание не число, по этому летит ошибка
2)создание баз данных с помощью массива это не очень удачная затея, т.к. работать с этим весьма и весьма не удобно.
рекомендуется создать тип запись "сотрудник" в котором будут интересующие вас поля.
так же желательно хранить это в виде хештаблицы, если вам нужна хорошая скорость доступа к элементам, иначе можно хранить списком
(это пишется с использованием динамической памяти)

итого рекомендуется:
создать записи(1)
конструктор к записи(2)(подпрограмма которая создаст запись и как-то(на ваше усмотрение) заполнит поля)
создать адекватную структуру хранения их в памяти(3)(списокмассивхештаблица) и на винчестере(4)(в файле)
систему доступа к данным(5)(например: есть текущая и все подпрограммы обращаются к ней; текущей может стать любая,которая требуется, соответственно по команде)
процедуры прямого доступа к записи(6)(например setFamily("Sokolov") записывает в нужную запись фамилию; getFamili("Ivonov") которая будет искать первую(следующею) запись с такой фамилией, если той нет возвращать nul)

(1) - вам станет легче работать с записью
(2) - не придется мучатся ее создавая
(3) - поможет при работе с записями
(4) - что бы не вбивать по 50 раз одно и то же
(5) - даже с 10-ю записями нужно как-то работать(как - решать программисту(вам))
(6) - работать станет легче, в особенности когда с утра проснешься, проймешь как оно работает, а главное сможешь объяснить(если понадобится)

удачи)
Ответ отправил: Tenevoi (статус: 2-ой класс)
Ответ отправлен: 24.09.2007, 09:58
Оценка за ответ: 5
Комментарий оценки:
Спасибо, исчерпывающий компетентный ответ

Отвечает: Артём1983
Здравствуйте, Чепиков Александр Валерьевич!
я решил всю Вашу задачу, в приложении дан код. Решал через записи. Если что пишите.
По Вашему коду могу сказать пару слов:
program n;
var
ar: array [1..10] of string;
i:string;
begin
writeln('FAMILII ');
for i:=1 to 10 do <- i переменная типа строка, а должна быть перечеслимого типа
read(i);
end;<- нужно ставить точку
Вроде всё хотя мог что-то и пропустить.

Приложение:

Ответ отправил: Артём1983 (статус: 3-ий класс)
Ответ отправлен: 24.09.2007, 15:47
Оценка за ответ: 5
Комментарий оценки:
С опрератором repeat, я бы не догодался. 5+++ за ответ


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.60.05 от 27.09.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное