0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 10
1

Строка: вывести на экран слова с четным количеством символов.

06.02.2013, 23:45. Показов 3480. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите где ошибка
Дана строка, состоящая из слов, отделенных друг от друга одним или не-сколькими разделителями (пробелы, точки, запятые, скобки и пр. Найти и вывести на экран слова с четным количеством символов.


Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;
 
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    BitBtn1: TBitBtn;
    Memo1: TMemo;
    procedure FormActivate(Sender: TObject);
    procedure ComboBox1KeyPress(Sender: TObject; var Key: Char);
    procedure ComboBox1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormActivate(Sender: TObject);
begin
   combobox1.setfocus;
end;
 
procedure TForm1.ComboBox1KeyPress(Sender: TObject;
     var Key: Char);
begin
   if key=#13 then
     begin
     combobox1.Items.Add( combobox1.text );
     combobox1.text:='';
     end;
end;
 
procedure TForm1.ComboBox1Click(Sender: TObject);
  Const c:Set of Char=[' ','.',',',':',';','(',')','?','!', '[',']','{','}'];                   //список разделителей слов
Var s:String;
n,k,i:Integer;
a:Array of String;
Begin
 s:= combobox1.text;      s:=s+' ';
  // удаление  пробелов в начале  строки
  while s[1]=' ' do delete(s,1,1);         //счетчик количества слов
repeat
    k:=pos('  ',s);
    if k<>0 then  delete(s,k,1);
  until k=0;
 
  n:=0;    memo1.Clear;
  repeat  // выделение отдельных слов
    k:=pos(' ',s);
    if k<>0 then begin
                 n:=n+1;
                 SetLength(a,n); // Отводим новую память для массива
                 a[n-1]:=copy(s,1,k-1);
                 delete(s,1,k);
                 end;
  until k=0;
  for i:=2 to n do
    for k:=0 to n-i do
  if length(a[k]) mod 2=0 then memo1.Lines.Add(a[k]);
    end;
 
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.02.2013, 23:45
Ответы с готовыми решениями:

Дана строка: Вывести на экран группы с четным количеством символов
Каждая группа отделяется пробелами

Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным количеством символов
Посмотрите плиз задачу, что я неправильно написал, выдаёт всё время &quot;четное&quot; даже если символов...

Найти и вывести на экран группы с четным количеством символов
Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным...

Дана строка. Найти группы с четным количеством символов.
Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран группы с четным...

2
13095 / 5876 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
07.02.2013, 01:45 2
Delphi
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
//Процедура извлекает из текста aStr слова с чётным
//количеством символов и добавляет их в список aSl.
procedure GetWords(const aStr : String; aSl : TStrings);
const
  //Множество разделителей слов.
  //Во множество D следует добавить полный набор разделителей.
  D = ['.', ',', ':', ';', '!', '?', '-', ' ', #9, #10, #13];
var
  i, Len, LenW : Integer;
begin
  Len := Length(aStr);
  LenW := 0; //Длина очередного слова.
  for i := 1 to Len do
    //Если символ не является разделителем.
    if not (aStr[i] in D) then begin
      //Учитываем символ в длине слова.
      Inc(LenW);
      //Если обнаружен конец слова.
      if (i = Len) or (aStr[i + 1] in D) then begin
        //Если в слове чётное количество символов, то добавляем его в список.
        if LenW mod 2 = 0 then aSl.Add( Copy(aStr, i - LenW + 1, LenW) );
        LenW := 0; //Сброс длины слова.
      end;
    end;
end;
 
//Проверка. Исходный текст берётся из Memo1. Результат записывается в Memo2.
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Clear;
  GetWords(Memo1.Text, Memo2.Lines);
end;
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
07.02.2013, 02:10 3
Цитата Сообщение от lazanalex Посмотреть сообщение
помогите где ошибка
Ну... учитывая, что разделение слов, происходит у тебя только через пробел - ошибок практически нет, за исключением строк 69 и 70. Замени
Delphi
1
2
for i:=2 to n do
    for k:=0 to n-i do
На
Delphi
1
for k:=0 to n-1 do
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.02.2013, 02:10
Помогаю со студенческими работами здесь

Строка: Все слова с нечетным количеством символов удалить...
Дана строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие...

Строка: Найти и вывести на экран самую короткую группу символов
Дана строка состоящая из групп нулей и единиц. Каждая группа отделяется друг от друга одним или...

Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три буквы
Дана строка, содержащая текст, заканчивающийся точкой. Вывести на экран слова, содержащие три буквы.

Дана строка содержащая текст, заканчивающийся точкой. Вывести на экран составляющие ее слова из трех букв
Дана строка содержащая текст, заканчивающийся точкой. Вывести на экран составляющие ее слова из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru