Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с текстом, задача на нахождение символа "!" 
V
    Опции темы
digitech
Дата 23.11.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 1.4.2007

Репутация: нет
Всего: 1



В символьной строке подсчитать кол-во цифр стоящих до символа '!'.
Вот код, только почему-то он работает неправильно {вот к примеру такая строка-  asdfgdf1234656!uioiopj67866 и он должен выдать ответ }
Код

var s:string;
k,i,d:integer;
begin
Writeln('Введите строку (не более 255 символов)');
readln(s);
k:=0; i:=0;
d:=Length(s);  
while (s[i]='!')or(i<d) do
begin
if (s[i]<='1')and(s[i]<='9') then k:=k+1;
i:=i+1;
end;
Writeln(k);
readln;
end;



PM MAIL   Вверх
Snowy
Дата 23.11.2007, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: нет
Всего: 484



Код
var s:string;
  k,i,d:integer;
begin
  Writeln('Введите строку (не более 255 символов)');
  readln(s);
  k:=0; i:=1; // тут единичка - с 1-го символа
  d:=Length(s);  
  while (i <= d) and (s[i] <> '!') do // тут условие ты напутал
  begin
    if (s[i] >= '0') and (s[i] <='9' ) then k:=k+1; // и тут условие напутал
    i:=i+1;
  end;
  Writeln(k);
  readln;
end;

PM MAIL   Вверх
digitech
Дата 23.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 1.4.2007

Репутация: нет
Всего: 1



а разьве отсчёт символов не с нуля ведётся?

Код



begin
clrscr;
Writeln('Введите строку (не более 255 символов)');
readln(s);
k:=0; i:=1;
d:=Length(s);  {порядок !}
while (s[i]<>'!')and(i<=d) do
begin
if (s[i]<='0')or(s[i]<='9') then k:=k+1;
i:=i+1;
end;
if i=1 then writeln('! стоит первым') else
if (k=0)and(i>1) then writeln('цифр до ! нет') else
if {что спросить здесь} then writeln('нет знака !') else
Writeln('Цифр до воскл. знака - ',k);
readln;
end.


Это сообщение отредактировал(а) digitech - 23.11.2007, 21:10
PM MAIL   Вверх
volvo877
Дата 23.11.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(digitech @  23.11.2007,  17:49 Найти цитируемый пост)
разьве отсчёт символов не с нуля ведётся?
Нет... Символы строки индексируются с единицы. В нулевом символе хранится длина строки...

Код

if i=1 then Writeln('Символ "!" стоит первым')
else
  if k=0 then Writeln('Цыфр до символа "!" нет') 
  else
    if i > d then Writeln('Символа "!" нет вообще');
    else Writeln(k, ' цифр до символа "!"')
readln;
Ты это имеешь в виду?
PM MAIL   Вверх
digitech
Дата 23.11.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 1.4.2007

Репутация: нет
Всего: 1



странно, но при этих условиях не всегда правильно выводится ответ:
Вот при этих всё правильно:
Код

if i=1 then writeln('! стоит первым') else
if (k=0)and(i>1) then writeln('цифр до ! нет') else
if i-1=d then writeln('нет знака !') else
Writeln('Цифр до воскл. знака - ',k);

чуть поз-же догадался
PM MAIL   Вверх
Ofer
Дата 23.11.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Вот можеш еще так попробовать. Работает, вроде отлично.

Код

uses CRT;
var
  n, i, c, x, Kol : Integer;
  S : String;
begin
  ClrScr;
  Kol := 0;
  WriteLn('Введите строку');
  ReadLn(S);
  n := Pos('!',S);
  for i := 1 to n do
  begin
    Val(S[i], x, c);
    if c = 0 then
    Inc(Kol);
  end;
  WriteLn('Количество цифр до ! = ',Kol);
  ReadLn;
end.


PM MAIL ICQ   Вверх
digitech
Дата 24.11.2007, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 1.4.2007

Репутация: нет
Всего: 1



Оригинально! я бы так не догадался
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0941 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.