Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2013, 22:14   #11
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Да, кстати, перед вывод было бы правильно проверить что tcnt <> 0.
Poma][a вне форума Ответить с цитированием
Старый 03.10.2013, 22:28   #12
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

А зачем именно на Label, в Delphi есть и другие полезные компоненты, например Memo.
Тем более выводить надо не одну строку, а несколько. Вот так:
Код:
Memo1.Lines.Add('n равно '+IntToStr(n));
А ShowMessage - это окошечко, тоже с одной строкой.
type_Oleg вне форума Ответить с цитированием
Старый 03.10.2013, 23:10   #13
Иринкин
Новичок
Джуниор
 
Регистрация: 03.10.2013
Сообщений: 7
По умолчанию

unit UnitC;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TfrmSt = class(TForm)
edtS: TEdit;
Label1: TLabel;
btnC: TButton;
Memo1: TMemo;

procedure btnCClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
frmSt: TfrmSt;

implementation

{$R *.dfm}

{ TfrmSt }

procedure TfrmSt.btnCClick(Sender: TObject);
var
i, tcnt: integer;
ch:char;
begin
for ch := 'A' to 'Z' do
begin
tcnt := 0;
for i := 1 to Length(edtS.Text) do
if UpCase (edtS.Text[i]) = ch then
Inc (tcnt);
if tcnt <> 0 then
Memo1.Lines.Add(ch+'='+IntToStr(tcn t))
else
ShowMessage('NO');
break;
end;
end;

end.


Что-то я не так делаю... Не ругается,но и не работает. При нажатии кнопки выдает мне сообщение NO...
Иринкин вне форума Ответить с цитированием
Старый 04.10.2013, 00:17   #14
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Я не поленился, переписал понятнее. Вот что у вас получается:
Код:
begin
 for ch := 'A' to 'Z' do
   begin
     tcnt := 0;
     for i := 1 to Length(edtS.Text) do if UpCase (edtS.Text[i]) = ch then Inc(tcnt);
     if tcnt <> 0 then Memo1.Lines.Add(ch+'='+IntToStr(tcnt)) else  ShowMessage('NO');
     Break;
   end;
end;
После первой же буквы 'A' сразу раз ... и Break - выход из внешнего цикла.

И еще ch+'='+IntToStr(tcn t) - там в самом деле пробел в идентификаторе tcn t ? Ошибки не было ?

PS Написано было ..какие буквы повторились.... То есть только те надо, что больше 1 раза?

Последний раз редактировалось type_Oleg; 04.10.2013 в 00:42.
type_Oleg вне форума Ответить с цитированием
Старый 04.10.2013, 16:47   #15
Иринкин
Новичок
Джуниор
 
Регистрация: 03.10.2013
Сообщений: 7
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Я не поленился, переписал понятнее. Вот что у вас получается:
Код:
begin
 for ch := 'A' to 'Z' do
   begin
     tcnt := 0;
     for i := 1 to Length(edtS.Text) do if UpCase (edtS.Text[i]) = ch then Inc(tcnt);
     if tcnt <> 0 then Memo1.Lines.Add(ch+'='+IntToStr(tcnt)) else  ShowMessage('NO');
     Break;
   end;
end;
После первой же буквы 'A' сразу раз ... и Break - выход из внешнего цикла.

И еще ch+'='+IntToStr(tcn t) - там в самом деле пробел в идентификаторе tcn t ? Ошибки не было ?

PS Написано было ..какие буквы повторились.... То есть только те надо, что больше 1 раза?
Спасибо, это действительно опечатка. Break подкорректирую.
И да, только те, что больше 1 раза.
Иринкин вне форума Ответить с цитированием
Старый 04.10.2013, 18:16   #16
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Вот так сделайте:
Код:
begin
 Memo1.Clear;   // очистка Memo
 for ch := 'A' to 'Z' do
    begin
      tcnt := 0;
      for i := 1 to Length(edtS.Text) do if UpCase (edtS.Text[i]) = ch then Inc (tcnt);
      if tcnt > 1 then Memo1.Lines.Add(ch+'='+IntToStr(tcnt));
    end;
 if Memo1.Lines.Count=0 then ShowMessage('повторений латинских букв не найдено');
end;
type_Oleg вне форума Ответить с цитированием
Старый 05.10.2013, 16:58   #17
Иринкин
Новичок
Джуниор
 
Регистрация: 03.10.2013
Сообщений: 7
По умолчанию

type_Oleg, спасибо огромное! Все поняла, все получилось!
Иринкин вне форума Ответить с цитированием
Старый 05.10.2013, 17:06   #18
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
for i := 1 to Length(edtS.Text)
Не очень правильно.. Если дана строка 'АА', то программа выдаст что встретились символы A - 2 раза и A - 2 раза..
Нужно делать что-то вида : if Pos (s[i], Copy (s, 1, i-1) = 0 then Continue;
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со строками lolwto Помощь студентам 1 22.03.2013 13:07
работа со строками lilywka Помощь студентам 1 20.03.2013 18:30
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа со строками Pormonik Общие вопросы C/C++ 1 21.05.2010 20:45
Работа со строками eR- Помощь студентам 2 23.02.2009 15:11