Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
1

Необходимо написать функцию в программе паскаль

11.12.2021, 12:52. Показов 983. Ответов 10

Author24 — интернет-сервис помощи студентам
Всем здравствуйте! есть задача Файл input.dat содержит несколько строк текста. Слова в тексте могут
разделяться пробелами и знаками препинания. Переписать текст в файл
output.dat, заменив прописные буквы заглавными в словах, содержащих
«запрещенные» слоги. Список «запрещенных» слогов находится в файле
errors.dat.
Программу я вроде как написал, но не пойму как сделать самую главную функцию, которая будет искать запрещенные слоги из файла errors.dat. в словах. Если вы поможете мне, буду премного благодарен. Мучаююсь уже дня 3 и ни разу ничего путного не получалось. Видел одну запись с этой задачей, но она, к сожалению, мне не помогла
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
program lab6v11;
{Файл input.dat содержит несколько строк текста. Слова в тексте могут
разделяться пробелами и знаками препинания. Переписать текст в файл
output.dat, заменив прописные буквы заглавными в словах, содержащих
«запрещенные» слоги. Список «запрещенных» слогов находится в файле
errors.dat.  }
const
  punc = ['.', ',', ' ', '-', ';', ':', '?'];
var
  f1, f2,errors: text;
  str: string;
  n: integer;
 
{Записывает строки в файл input.dat}
procedure write_input();
begin
  assign(f1, 'input.dat');
  rewrite(f1);
  write('Введите кол-во строк:');
 readln(n);
  for var i := 1 to n do
  begin
    readln(str); {вводим с клавиатуры строки}
    writeln(f1, str); {записываем последовательно строки в файл}
  end;
  close(f1);
end;
 
{Поиск отдельного слова в строке}
function find_word(s: string; i: integer): string;
var
  word: string;
begin
  while (i <= length(s)) and (not (s[i] in punc)) do
  begin
    word := word + s[i];
    i := i + 1;
  end;
  find_word := word;
end;
{Записывает строки в файл errors.dat}
procedure write_errors();
begin
  rewrite(errors,'errors.dat');
  write('Введите кол-во слогов:');
 readln(n);
  for var i := 1 to n do
  begin
    readln(str); {вводим с клавиатуры слоги, каждый слог с новой строчки}
    writeln(errors, str); {записываем последовательно слоги в файл}
  end;
  close(errors);
end;
{Функция проверки есть ли в слове запрещенные слоги}
function check_word(word: string): boolean;////не пойму как сделать именно эту функцию!!!!!!!
begin
end;
{Разделяет строку на слова, преобразует необходимые в нужный формат и выводит готовую строку}
function find_word(str: string): string;
var
  i: integer;
  word, slovo, out_slovo: string;
begin
    i := 1;
   while (i <= length(str)) do
        begin
          word := word + str[i];
          if (str[i] in punc) or ( i = length(str)) then
            begin
               slovo := word;                
               if (check_word(slovo) = true) then                  
               begin
                   for var j := 1 to length(slovo) do           
                   slovo[j] := UpCase(slovo[j]);
               end;
                word := '';
                out_slovo := out_slovo + slovo;
            end;
          i := i + 1;
        end;
  find_word := out_slovo;
end;
 
{смена регистра букв}
procedure BigLetters();
begin
  Reset(f1); {открываем первый файл для чтения} 
  assign(f2, 'output.dat'); {устанавливаем связь второй файловой переменной с
  физическим файлом}
  rewrite(f2); {открываем второй файл для записи} 
  while not eof(f1) do
  begin
    Readln(f1, str);{считываем очередную строку из первого файла}
      Writeln(f2, find_word(str)); {записываем во второй файл готовые отредактированные строки, удовлетворяющие условию}
  end;
  close(f1);
  close(f2);{заканчиваем работу с файлами}
end;
 
{Печатает что находится во втором файле output.txt}
procedure print_file();
begin
  Writeln('Второй файл содержит строки:');
  Reset(f2); {открываем второй файл для чтения}
  while not eof(f2) do {пока не конец второго файла}
  begin
    Readln(f2, str);{считываем очередную строку из второго файла}
    Writeln(str); {выводим строку на экран}
  end;
end;
 
begin
  write_input();
  BigLetters();
  writeln;
  print_file();
end.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2021, 12:52
Ответы с готовыми решениями:

Необходимо написать комментарии к программе
Помогите написать комментарии к программе программа решает СЛАУ методом Гаусса я часть написал,...

Нужно написать паскаль-функцию
Дан прямоугольник с длинами сторон a, b, c, d. Нужно написать паскаль-функцию, возвращающую...

Необходимо написать функцию
Нужно написать функцию которая находит в строке определенный подстринг и заменяет его на другой...

Паскаль.Написать функцию, которая вычисляет значение
Написать функцию, которая вычисляет значение а^b Числа а и в могут быть любыми дробными...

10
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
11.12.2021, 13:12 2
Цитата Сообщение от Alex678918 Посмотреть сообщение
функцию, которая будет искать запрещенные слоги из файла errors.dat. в словах
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
{Функция проверки есть ли в слове запрещенные слоги, True = есть}
function check_word(word: String): Boolean;
var t: String; b: Boolean;
begin
  {Assign(errors,'errors.dat');} {если выше гарантирован аналогичный вызов, то здесь не нужен}
  Reset(errors); b:=False;
  while not EoF(errors) and not b do begin
    ReadLn(errors,t); b:=Pos(t,word)>0;
  end;
  Close(errors);
  check_word:=b;
end;
Добавлено через 3 минуты
Если количество запрещенных слогов позволяет хранить их в памяти (в массиве), то есть смысл один раз прочитать необходимое в массив, в дальнейшем проверку проводить по нему, а не читать файл каждый раз.

Добавлено через 3 минуты
Символов пунктуации на самом деле несколько больше:
Pascal
1
const punc = [#32..#127]-['0'..'9','A'..'Z','a'..'z','_'];
Добавлено через 1 минуту
Или еще кардинальнее:
Pascal
1
const punc = [#0..#127]-['0'..'9','A'..'Z','a'..'z','_'];
1
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
11.12.2021, 20:44  [ТС] 3
Спасибо тебе огромное, правда, почему-то все равно не получается. То есть ошибку не выдает, но после ввода строки и ввода запрещенных слогов опять появляется какое-то поле ввода(пробовал туда что-то вводить и на этом все, ничего дальше не происходит) .Пробовал чет убрать и изменить, но тоже самое. Может сможешь подсказать где я накосячил?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
program lab6v11;
{Файл input.dat содержит несколько строк текста. Слова в тексте могут
разделяться пробелами и знаками препинания. Переписать текст в файл
output.dat, заменив прописные буквы заглавными в словах, содержащих
«запрещенные» слоги. Список «запрещенных» слогов находится в файле
errors.dat.  }
const
 punc = [#0..#127]-['0'..'9','A'..'Z','a'..'z','_'];
var
  f1, f2, errors: text;
  str: string;
  n: integer;
 
{Записывает строки в файл input.dat}
procedure write_input();
begin
  assign(f1, 'input.dat');
  rewrite(f1);
  write('Введите кол-во строк:');
 readln(n);
  for var i := 1 to n do
  begin
    readln(str); {вводим с клавиатуры строки}
    writeln(f1, str); {записываем последовательно строки в файл}
  end;
  close(f1);
end;
 
{Поиск отдельного слова в строке}
function find_word(s: string; i: integer): string;
var
  word: string;
begin
  while (i <= length(s)) and (not (s[i] in punc)) do
  begin
    word := word + s[i];
    i := i + 1;
  end;
  find_word := word;
end;
{Записывает строки в файл errors.dat}
procedure write_errors();
begin
  assign(f1, 'errors.dat');
  rewrite(errors,'errors.dat');
  write('Введите кол-во слогов:');
 readln(n);
  for var i := 1 to n do
  begin
    readln(str); {вводим с клавиатуры слоги, каждый слог с новой строчки}
    writeln(errors, str); {записываем последовательно слоги в файл}
  end;
  close(errors);
end;
{Функция проверки есть ли в слове запрещенные слоги, True = есть}
function check_word(word: String): Boolean;
var t: String; b: Boolean;
begin
  Reset(errors); b := False;
  while not EoF(errors) and not b do begin
    Read(t); b:=Pos(t,word)>0;
  end;
  Close(errors);
  check_word:=b;
end;
{Разделяет строку на слова, преобразует необходимые в нужный формат и выводит готовую строку}
function find_word(str: string): string;
var
  i: integer;
  word, slovo, out_slovo: string;
begin
    i := 1;
   while (i <= length(str)) do
        begin
          word := word + str[i];
          if (str[i] in punc) or ( i = length(str)) then
            begin
               slovo := word;                
               if (check_word(slovo) = true) then                  
               begin
                   for var j := 1 to length(slovo) do           
                   slovo[j] := UpCase(slovo[j]);
               end;
                word := '';
                out_slovo := out_slovo + slovo;
            end;
          i := i + 1;
        end;
  find_word := out_slovo;
end;
 
{замена прописные буквы заглавными в словах, содержащих
две и более подряд идущих одинаковых букв}
procedure BigLetters();
begin
  Reset(f1); {открываем первый файл для чтения} 
  assign(f2, 'output.dat'); {устанавливаем связь второй файловой переменной с
  физическим файлом}
  rewrite(f2); {открываем второй файл для записи} 
  while not eof(f1) do
  begin
    Readln(f1, str);{считываем очередную строку из первого файла}
      Writeln(f2, find_word(str)); {записываем во второй файл готовые отредактированные строки, удовлетворяющие условию}
  end;
  close(f1);
  close(f2);{заканчиваем работу с файлами}
end;
 
{Печатает что находится во втором файле output.txt}
procedure print_file();
begin
  Writeln('Второй файл содержит строки:');
  Reset(f2); {открываем второй файл для чтения}
  while not eof(f2) do {пока не конец второго файла}
  begin
    Readln(f2, str);{считываем очередную строку из второго файла}
    Writeln(str); {выводим строку на экран}
  end;
end;
 
begin
  write_input();
  write_errors();
  BigLetters();
  writeln;
  print_file();
end.
0
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
11.12.2021, 21:00  [ТС] 4
вот скрин. А то не уверен, что я понятно объяснил в чем проблема
Миниатюры
Необходимо написать функцию в программе паскаль  
0
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
11.12.2021, 21:29  [ТС] 5
bormant, а это скрин после того как я ввожу что-то в это поле и на этом все останавливается(ввел туда ??? чтобы было понятнее)
0
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
11.12.2021, 21:39  [ТС] 6
bormant, а это скрин после того как я ввожу что-то в это поле и на этом все останавливается(ввел туда ??? чтобы было понятнее)
Миниатюры
Необходимо написать функцию в программе паскаль  
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
12.12.2021, 08:22 7
Pascal
61
ReadLn(errors,t);
Выше поправил тоже.
1
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
12.12.2021, 11:51  [ТС] 8
bormant, Спасибо большое, теперь программа работает, но все равно неправильно )
Миниатюры
Необходимо написать функцию в программе паскаль  
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
12.12.2021, 13:18 9
Лучший ответ Сообщение было отмечено Alex678918 как решение

Решение

"меня", "НЯ", "зовут", "ЗО".
Откуда верхний регистр взялся-то?
И если слоги перевели в верхний регистр, то почему со словами то же самое не сделали?

Добавлено через 17 минут
Хинт: В PascalABC.NET функция UpperCase корректно работает и с русскими строками.

Добавлено через 5 минут
Pascal
55
56
57
58
59
60
61
62
63
64
65
{Функция проверки есть ли в слове запрещенные слоги, True = есть}
function check_word(word: String): Boolean;
var t: String; b: Boolean;
begin
  Reset(errors); word:=UpperCase(word); b := False;
  while not EoF(errors) and not b do begin
    ReadLn(errors,t); b:=Pos(t,word)>0;
  end;
  Close(errors);
  check_word:=b;
end;
Pascal
41
42
43
44
45
46
47
48
49
50
51
52
53
{Записывает строки в файл errors.dat}
procedure write_errors;
begin
  Rewrite(errors,'errors.dat');
  Write('Введите кол-во слогов:');
  ReadLn(n);
  for var i:=1 to n do
  begin
    ReadLn(str); {вводим с клавиатуры слоги, каждый слог с новой строчки}
    WriteLn(errors,UpperCase(str)); {записываем последовательно слоги в файл}
  end;
  Close(errors);
end;
1
0 / 0 / 0
Регистрация: 11.12.2021
Сообщений: 6
12.12.2021, 13:32  [ТС] 10
bormant, Спасибо! Ты просто гений!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
12.12.2021, 13:37 11
Но лучше так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const ferrName='errors.dat';
var
  Errs: array of String;
 
procedure read_errors;
var f: Text; t: String; n: Integer;
begin
  Assign(f,ferrName); Reset(f); n:=0;
  while not EoF(f) do begin
    ReadLn(f,t); Inc(n);
  end;
  Close(f); Reset(f); SetLength(Errs,n);
  for n:=0 to n-1 do begin
    ReadLn(f,t); Errs[n]:=UpperCase(t);
  end;
  Close(f);
end;
 
{Функция проверки есть ли в слове запрещенные слоги, True = есть}
function check_word(word: String): Boolean;
begin
  check_word:=True;
  word:=UpperCase(word);
  for var i:=0 to Length(Errs)-1 do
    if Pos(Errs[i],word)>0 then Exit;
  check_word:=False;
end;
0
12.12.2021, 13:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2021, 13:37
Помогаю со студенческими работами здесь

Необходимо написать функцию на Файлы
Напишите, пожалуйста, функцию file_print, которая получает путь к файлу и возвращает целое число. ...

Написать программу, которая работает со статическими одномерными массивами. В программе необходимо: ввести с клавиатуры
Написать программу, которая работает со статическими одномерными массивами. В программе необходимо:...

необходимо написать функцию на языке программирования С
необходимо написать функцию на языке программирования С , на вход которой подается указатель на...

Написать функцию к программе
Есть программа: #include&lt;stdio.h&gt; #include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;math.h&gt;...

Написать функцию к программе
Здраствуйте, помогите пожалуйста написать функцию к данной программе #include &lt;iostream&gt;...

Написать функцию к программе
Помогите пожалуйста написать функцию #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std;...

Написать функцию, которая находит наименьший элемент дерева.Паскаль
Помогите люди добрые,сдавать завтра(


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru