Вопрос № 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-ый вопрос.
Заранее спасибо
С уважением,
Отвечает: Чичерин Вадим Викторович !!! Здравствуйте, Чепиков Александр Валерьевич!
У Вас объявленная строковая переменная I используется в качестве переменной цикла.
Требуется объявить и использовать переменную целочисленного типа (byte, int и т.п.)
Приложение:
--------- Чем больше я смотрюсь в зеркало, тем больше верю Дарвину...
Ответ отправил: Чичерин Вадим Викторович (статус: 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+++ за ответ