Помощь - Поиск - Пользователи - Календарь
Полная версия: Использование типа-record
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость_anka
--------------------------------------------
Сформировать запись "Операторы Турбо Паскаля":оператор, действие.
Подсчитать их количество и количество операторов имеющих повторяющиеся ключевые слова.
---------------------------------------------
Код

Program xxx;
Uses crt;
Type
   operators=record
         oper:string;
         deis:string;
         end;
Var
  z:array [1..24] of operators;
  i:byte;
  f1:text;
  n:string;
Begin
CLRSCR;
assign(f1,'c:\ttp\db.dat');
reset(f1);
{*}
for i:=1 to 12 do
begin
readln(f1,z[i].oper);
readln(f1,z[i].deis);
end;
{**}
writeln('Введите оператор:');
readln(n);
for i:=1 to 12 do
if n=z[i].oper then write('Оператор ',n,'-',z[i].deis,'');
readln
end.

Файл db.dat-содержит 24 строки, где 1строка -оператор,2-действие оператора.
Как сделать чтоб программа подсчитывала кол-во операторов, и кол-во операторов имеющих повторяющиеся ключевые слова?
Altair
Цитата
Файл db.dat-содержит 24 строки, где 1строка -оператор,2-действие оператора.
Как сделать чтоб программа подсчитывала кол-во операторов, и кол-во операторов имеющих повторяющиеся ключевые слова?


====Количество операторов====

1) файл точно текстовый? (может он типизированный- file of operators ?) или это без разницы?
2) если есть 12 строк с операторами, то зачем их подсчитывать???
А если там максимум может быть 12 операторов, то считаем их так:
сначала считываем их в массив (у вас это есть - стоит между * и ** )
потом проверяем, пуста ли строка (если нет, значит оператор есть, иначе больше нет операторов)
Код

{вставить этот код после ** }
{от 1 до 12 - если строка не пуста, значит увеличить кол-во операторов, иначе - выйти из цикла}
for i:=1 to 12 do If z[i].oper<>'' then inc(maxoperators) else exit;
{теперь в пер. maxoperators- кол-во операторов}

3) Зачем вам массив z из 24 элементов? надо 12 элементов (ведь у вас массив записей, а их максимум 12)
4) не очень понимаю, что значит "действие оператора" -поясните пожалуйста на примере
5) что такое повторяющиеся ключевые слова? (или ключ. слова- это тоже, что и действия)
6) сколько у 1 оператора может быть действий (1 или нет? )
====
пожалуйста ответьте на эти вопросы, и мы попробуем сделать 2 часть задания (кол-во повтор. ключ. слов)
Гость_anka
1)Нет это обычный файл.
2)подсчёт потому что, третья часть задания - это дополнить программу заполнением и обработкой файла(т.е. запись файла db.dat из программы)
4)Пример:
Вводим "case"(первая строка в файле db.dat), в ответ программа пишет -"оператор выбора, которая в зависимости от значения какого-либо выражения выполнить те или иные выражения"(вторая строка в файле)...и т.д. 1строка-оператор,2-пояснение что делает этот оператор.
5)У операторов могут повторяться ключевые слова.
---------------------------------
Altair
Так, хорошо, а где мы ищем ключевые слова:
1)В операторах, например:
while do
case of
for to do
- количество операторов в данном случае с повтор. словами буде 2 (ключевое слово do)
2) В действиях, например:
while do
цикл с предусловием ...
case of
оператор выбора ...
for to do
цикл с постусловием
- тогда тоже 2 , но ключевое слово мы искали в дейсвиях (описании оператора)
и ключевое слово, в данном случае- ЦИКЛ
Guest
Если я правильно поняла:
1-ключевые слова в операторах
Altair
Ну вот попробуйте:
(если будут вопросы - задавайте)
(В присоед. файле - файл DB.DAT - на котором я тестировал эту программу)
Код
Program OperatorsTurboPascal;
Uses crt;
Type
  operators=record
 oper:string;
 deis:string;
 end;
Var
 z:array [1..12] of operators;  {¬ ббЁў ®ЇҐа в®а®ў}
 i:byte;
 f1:text;
 n:string;
 MaxOperators:byte; {Є®«-ў® ®ЇҐа в®а®ў}

Procedure KluchSlova(a:array of operators; n:byte;var n1,n2:byte);
{‚맮ў нв®© Їа®жҐ¤гал: KluchSlova(z,MaxOperators,MaxOper1,MaxOper2); }
Var
I,k:byte;
MO1,MO2:byte;
s:string;
Begin
{Є«озҐўлҐ б«®ў , Є®в®алҐ ўбваҐз овбп ў ®ЇҐа в®а е вгаЎ®-Ї бЄ «п:
 do (for to do, while do)
 end (record ... end,  begin ... end)
 }
mo1:=0; mo2:=0;
For i:=1 to n do
begin
 s:='';
 s:=a[i].oper;
 k:=1;
 for k:=1 to ORD(s[0]) do
 begin
  If (s[k]='d') and (s[k+1] ='o') then MO1:=MO1+1;
  If (s[k]='e') and (s[k+1] ='n') and (s[k+2]='d') then INC(MO2,1)
 end
end;
n1:=mo1;
n2:=mo2
end;

Var
n1,n2:byte;

Begin
CLRSCR;
assign(f1,'C:\DB.DAT');
reset(f1);
for i:=1 to 12 do
begin
 readln(f1,z[i].oper);
 readln(f1,z[i].deis);
 If z[i].oper<>'' then inc(MaxOperators);
end;
writeln('Љ®«ЁзҐбвў® ®ЇҐа в®а®ў = ',MaxOperators);
{Є®«-ў® ®ЇҐа в®а®ў б Ї®ўв®а. Є«оз. б«®ў ¬Ё}
KluchSlova(z,MaxOperators,n1,n2);
Writeln('Љ®«ЁзҐбвў® ®ЇҐа в®а®ў, Ё¬ҐойЁе Ї®ўв®апой. б«®ў® DO :',n1);
Writeln('Љ®«ЁзҐбвў® ®ЇҐа в®а®ў, Ё¬ҐойЁе Ї®ўв®апой. б«®ў® END:',n2);
write('‚ўҐ¤ЁвҐ ®ЇҐа в®а: '); readln(n);
for i:=1 to 12 do if n=z[i].oper then write('ЋЇҐа в®а ',n,'-',z[i].deis,'')

end.


Что-то довольно странно.
Задача на записи, а просят найти слова.
Если что-то не так, то пожалуйста напишите все задание, так , как оно вам было заданно (слово в слово)
annna
Спасибоsmile.gif
Гость_anka
Спасибо, всё работаетsmile.gif. Запись заключается в последней части задания-это дополнить программу заполнением и обработкой файла(т.е. запись файла db.dat из программы)...точно не знаю, но может стоит добавить в программу, что если введённый оператор в базе не найден, то программа записывается его в файл db.dat ,а так же требует ввести действие этого оператора(ну и тоже записывает)...но возможно ли это...а задание полностью написанно в первом сообщении, буква в букву...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.