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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 17:53   #1
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию Delphi - операции со строкой

Помогите найти ошибку!

Задача:
Дана текстовая строка. Написать подпрограммы, выполняющие следующие действия:
* Подсчет количества слов в строке
* Подсчет количества цифр в строке

В общем ошибка, не правильно считает, всегда выдаёт единицу... Помогите!
Исходник:

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
S : string ;
N: byte ;
begin
N := 0;
S := Edit1.Text ;
if  Pos(' ', S) > 0 then
Begin
N := N + 1 ;
end;
Edit2.Text:=IntToStr(N) ;
end;
procedure TForm1.Button2Click(Sender: TObject);
Var
S : string ;
N: byte ;
begin
N := 0;
S := Edit1.Text ;
if  Pos('1', S) or Pos('2', S) or Pos('3', S)or Pos('4', S) or Pos('5', S) or Pos('6', S) or Pos('7', S) or Pos('8', S) or Pos('9', S) or Pos('0', S)> 0 then
Begin
N := N + 1 ;
end;

Edit3.Text:=IntToStr(N) ;

end;
Sianessa вне форума Ответить с цитированием
Старый 06.05.2009, 18:04   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
S : string ;
N: byte ;
begin
N := 0;
S := Edit1.Text ;
if  Pos(' ', S) > 0 then
Begin
N := N + 1 ;
end;
Edit2.Text:=IntToStr(N) ;
end;
Вы ищете единственный пробел. Естественно, N всегда будет = 1.

Вот:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s : string;
len,i,kolSlov,kolCifr : integer;
begin
kolSlov := 0;
kolCifr := 0;
s := Edit1.Text;
i := 1;
len := length(s);
while i<=len do
 begin
 while (s[i]=' ') and (i<=len) do inc(i);
 while (s[i]<>' ') and (i<=len) do
  begin
  if (s[i]>='0') and (s[i]<='9') then inc(kolCifr);
  inc(i);
  end;
  inc(kolSlov);

 end;
ShowMessage('Количество слов: '+IntToStr(kolSlov)+#10#13+'Количество цифр: '+IntToStr(kolCifr));

end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.05.2009, 18:12   #3
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);

function CountStr(s:string):integer;
var   i:integer;
      sub:string;
begin
i:=0;result:=0;
repeat
inc(i);
if (s[i] in Delim)and(sub<>'')
              then begin
                   inc(result);
                   sub:='';
                   end
else if not(s[i] in Delim) then sub:=sub+s[i];
until i=length(s);
inc(result);
end;

function CountDig(s:string):integer;
var   i:integer;
      sub:string;
begin
i:=0;result:=0;
repeat
inc(i);
if s[i] in ['0'..'9'] then inc(result);
until i=length(s);
end;

begin
ShowMessage(IntTostr(CountStr(Edit1.Text)));
ShowMessage(IntTostr(CountDig(Edit1.Text)));
end;
Все можно делать в одной функции, но раз нужно две....
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 06.05.2009, 18:16   #4
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Sazary, большое спасибо ^_^
Sianessa вне форума Ответить с цитированием
Старый 06.05.2009, 18:17   #5
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Ано... не могли бы вы ещё посоветовать, как вот это реализовать:

* Определение десятичного числа, которому соответствует строка, если она представляет запись
этого числа в шестнадцатеричной системе
* Проверку соответствия содержимого строки правилам записи идентификаторов языков
программирования.

Хотя бы алгоритм... А то соображений нет никаких =__=
Sianessa вне форума Ответить с цитированием
Старый 06.05.2009, 18:35   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
* Определение десятичного числа, которому соответствует строка, если она представляет запись
этого числа в шестнадцатеричной системе
Ну это проверяете каждый символ, является ли он шестнадцатиричной цифрой. Ну и если все верно, то переводите число из 16-ричной в 10-тичную систему (здесь уже подобное решалось).
Цитата:
* Проверку соответствия содержимого строки правилам записи идентификаторов языков
программирования.
А какие правила-то?
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.05.2009, 18:39   #7
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

Цитата:
в качестве имени переменной можно использовать последовательность лат. букв
и некоторых спецсимволов.первым символом в имени должна быть буква и в
имени не должно быть пробелов!
по крайней мере в делфе так ну еще чтобы служебным словом не являлась
Резюме: 1 - проверка первого символа
2 - поиск пробела
3 - проверка присутствия русских букв и недопустимых символов и будет вам счастье

вот вам из 16 в 10
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
  d:integer;
  s:string;
begin
  s:=edit5.Text;
  d:= StrToInt('$' + s);
  edit6.Text:=intTostr(d);

end;
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»

Последний раз редактировалось IT-man; 06.05.2009 в 18:47.
IT-man вне форума Ответить с цитированием
Старый 06.05.2009, 18:42   #8
Sianessa
Форумчанин
 
Регистрация: 18.01.2009
Сообщений: 144
По умолчанию

Sazary, понятно, спасибо, попробую...
А я не знаю какие правила, в задаче больше ничего не сказано...
Sianessa вне форума Ответить с цитированием
Старый 06.05.2009, 18:47   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Sianessa
А я не знаю какие правила, в задаче больше ничего не сказано...
Скорее всего, это то, что описал IT-man.

А если имеются в виду какие-нибудь правила, вроде Венгерской нотации, то это уже отдельный разговор. Т.к. совсем уж общепринятых правил нет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 06.05.2009, 18:49   #10
IT-man
АльTRUEи$т
Форумчанин
 
Аватар для IT-man
 
Регистрация: 19.03.2009
Сообщений: 784
По умолчанию

sazary +1 например в С# и 1С названия переменных можно писать по-русски
Цитата:
«Никто не войдет в Рай, имея хотя бы крупицу гордыни в своем сердце». «Аллах Красив и любит красоту. Гордыня означает отказ от истины и высокомерие»
IT-man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi - операции с массивом Sianessa Помощь студентам 7 05.05.2009 00:27
Delphi: строковые операции Sianessa Помощь студентам 6 21.04.2009 18:05
Проблема со строкой Djonik Общие вопросы Delphi 4 16.04.2009 12:32
Арифметика, выражение вводится строкой [Delphi] iFool Помощь студентам 3 21.10.2008 18:51
Вопрос. Операции с аудио/видео в Delphi Air Мультимедиа в Delphi 6 24.02.2008 06:19