Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Firepwnz
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 2
1

Замена окончаний ING на ED

27.02.2011, 14:04. Просмотров 734. Ответов 4
Метки нет (Все метки)

Уже месяц сдаю курсовую работу и не могу добиться одного результата. Проблема заключается в том, что при замене окончаний в слове с ing на ed если после слова не поставить пробел слово не переведется. Надо сделать так чтобы программа проверяла конец слова. И если там есть ING окончание переводило.Вот код программы

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
Program Kurs;
uses crt;
var
d,e:text;
q,w:array[1..800] of char;
h,n,g,y,z:integer;
u:char;
i,o: string[255];
begin
h:=0;
writeln('chose type of input:');
writeln('--------------------------------------');
writeln('1 - from file, 2 - type from keyboard:');
readln(g);
case g of
1:begin
Write('Path to file: ');
ReadLn(i);
Assign(d, i);
Reset(d);
writeln('Your file:');
writeln;
while not eof(d) do
  begin
    inc(h);
    read(d,q[h]);
    write(q[h]);
  end;
  end;
  2:begin
  writeln('Enter your text here:');
  while u<>#13 do
  begin
  inc(h);
  u:=readkey;
  q[h]:=u;
  write(q[h]);
  end;
  end;
  end;
  writeln;
  writeln('Press any key to continue');
  readln;
n:=0;
while n<=h+1 do
begin
if (q[n] in ['a'..'z']) or (q[n] in ['A'..'Z']) then
if (q[n+1] = 'i') or (q[n+1] = 'I') then
if (q[n+2] = 'n') or (q[n+2] = 'N') then
if (q[n+3] = 'g') or (q[n+3] = 'G') then
if (q[n+4] = ' ') or (q[n+4] = '.') or(q[n+4] = ',') then
begin
if q[n+1] = 'I' then q[n+1] := 'E' else q[n+1]:= 'e';
if q[n+2] = 'N' then q[n+2] := 'D' else q[n+2]:= 'd';
z:=n;
while z+3 <= h+1 do
begin
q[z+3]:=q[z+4];
inc(z);
end;
dec(h);
n:=n+2;
end;
inc(n);
end;
writeln('Text after changing:');
writeln('--------------------');
n:=0;
while n <= h+1 do
begin
write(q[n]);
inc(n);
end;
writeln;
writeln('Path to save:');
ReadLn(o);
Assign(e,o);
Rewrite(e);
for n:=0 to h+1 do
begin
write(e,q[n]);
end;
close(e);
readln;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2011, 14:04
Ответы с готовыми решениями:

Программа корректировки окончаний ФИО
Написать программу корректировки окончаний фамилии,имени,отчества при...

Заменить окончание ING каждого слова, встречающегося в заданном предложении, на ED
Заменить окончание ING каждого слова, встречающегося в заданном предложении, на...

В тех словах, которые заканчиваются на ing, заменить это окончание на en.
Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не...

В тех словах которые оканчиваются сочетанием букв ing, заменить это сочетание на ed
В тех словах которые оканчиваются сочетанием букв ing, заменить это сочетание...

Замена окончаний слов
Доброго времени суток уважаемые форумчане! Пишу программу, которая генерирует...

4
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
28.02.2011, 04:36 2
Предлагаю сделать таким способом:
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
program Project1;
 
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  S1, S2, sWord, sEnd : String;
  i, j, k, P1, Len, LenW : Integer;
begin
  repeat
    Writeln('Задайте строку:');
    Readln(S1);
 
    Len := Length(S1);
    SetLength(S2, Len);
    j := 0;
    for i := 1 to Len do begin
      //Переписываем разделители.
      if S1[i] in D then begin
        Inc(j);
        S2[j] := S1[i];
        Continue;
      end;
      //Отслеживаем начало слова.
      if (i = 1) or (S1[i - 1] in D) then P1 := i;
      //Отслеживаем конец слова.
      if (i = Len) or (S1[i + 1] in D) then begin
        //Длина слова.
        LenW := i - P1 + 1;
        //Слово.
        sWord := Copy(S1, P1, LenW);
        if LenW >= 3 then begin
          //Последние 3 буквы в слове.
          sEnd := Copy(sWord, LenW - 2, 3);
          //Меняем ING на ED
          if UpperCase(sEnd) = 'ING' then begin
            sWord := Copy(sWord, 1, LenW - 3);
            //Определяем какими буквами надо напечатать окончание
            //- заглавными или строчными.
            if sEnd[1] = UpCase(sEnd[1]) then
              sWord := sWord + 'ED'
            else
              sWord := sWord + 'ed'
            ;
            //Новая длина слова
            LenW := Length(sWord);
          end;
        end;
        //Переписываем слово в результирующую строку.
        for k := 1 to LenW do begin
          Inc(j);
          S2[j] := sWord[k];
        end;
      end;
    end;
    //Корректируем длину результирующей строки в соответствие
    //с количеством добавленных в неё символов.
    SetLength(S2, j);
 
    Writeln('Строка после обработки:');
    Writeln(S2);
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S1);
  until S1 <> '';
end.
0
Firepwnz
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 2
28.02.2011, 07:15 3
Проблема в том что, программа должна редактировать текстовый файл со словами, а ручной ввод это так сказать добровольное желание было у меня в программе
0
Puporev
Модератор
55027 / 42315 / 29221
Регистрация: 18.05.2008
Сообщений: 99,999
28.02.2011, 09:28 4
А разница то какая для алгоритма, чтение из файла или ввод с клавиатуры?
0
Mawrat
12830 / 5738 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
28.02.2011, 14:49 5
С файловым вводом/выводом:
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
program Project1;
 
const
  //Разделители слов.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
  Fn1 = 'file1.txt';
  Fn2 = 'file2.txt';
var
  F1, F2 : TextFile;
  S1, S2, sWord, sEnd : String;
  i, j, k, P1, Len, LenW : Integer;
begin
  Assign(F1, Fn1);
  Reset(F1);
  Assign(F2, Fn2);
  Rewrite(F2);
 
  while not Eof(F1) do begin
    Read(F1, S1);
 
    Len := Length(S1);
    SetLength(S2, Len);
    j := 0;
    P1 := 0;
    for i := 1 to Len do begin
      //Переписываем разделители.
      if S1[i] in D then begin
        Inc(j);
        S2[j] := S1[i];
        Continue;
      end;
      //Отслеживаем начало слова.
      if (i = 1) or (S1[i - 1] in D) then P1 := i;
      //Отслеживаем конец слова.
      if (i = Len) or (S1[i + 1] in D) then begin
        //Длина слова.
        LenW := i - P1 + 1;
        //Слово.
        sWord := Copy(S1, P1, LenW);
        if LenW >= 3 then begin
          //Последние 3 буквы в слове.
          sEnd := Copy(sWord, LenW - 2, 3);
          //Меняем ING на ED
          if UpperCase(sEnd) = 'ING' then begin
            sWord := Copy(sWord, 1, LenW - 3);
            //Определяем какими буквами надо напечатать окончание
            //- заглавными или строчными.
            if sEnd[1] = UpCase(sEnd[1]) then
              sWord := sWord + 'ED'
            else
              sWord := sWord + 'ed'
            ;
            //Новая длина слова
            LenW := Length(sWord);
          end;
        end;
        //Переписываем слово в результирующую строку.
        for k := 1 to LenW do begin
          Inc(j);
          S2[j] := sWord[k];
        end;
      end;
    end;
    //Корректируем длину результирующей строки в соответствие
    //с количеством добавленных в неё символов.
    SetLength(S2, j);
 
    Write(F2, S2);
    
    //Точно учитываем переносы строк.
    if Eoln(F1) and (not Eof(F1)) then begin
      Readln(F1);
      Writeln(F2);
    end;
  end;
  
  //Закрываем файлы.
  Close(F1);
  Close(F2);
 
  Writeln('Результат записан в файл: ', Fn2);
  Readln;
end.
1
28.02.2011, 14:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2011, 14:49

Поиск слов и замена окончаний
потребуется программа которая бы в тексте искала слова с окончанием &quot;ing&quot; и...

В словах, которые имеют окончание "ing", сделать замену "ing" на "ed"
Задан текст. Группы символов, разделённые пробелами (одним или несколькими) и...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru