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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачка, Символьные массивы 
:(
    Опции темы
bombaka
Дата 10.4.2008, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите написать прогу. условие такое:

Дана последовательность до 30 слов, в каждом из кот от 1 до 5 символов, между словами пробел или запятая, в конце последовательности - точка. Напечатать все слова, в которых присутствуют знаки, не являющиеся буквами.
PM MAIL   Вверх
digitech
Дата 11.4.2008, 08:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это что, задача на строки? Если строки, то проверяй так^
Код

uses crt;
var i : word;
    s : string;
begin
clrscr;
s:='dfdfsdfsdf12544';
for i:=1 to length(s) do
if (s[i]>'a') and (s[i]<'z') = false then Write(s[i]);
readln;
end.

Ну это ради примера. Чтоб понял как проверять.

Это сообщение отредактировал(а) digitech - 11.4.2008, 08:55
PM MAIL   Вверх
mmvds
Дата 11.4.2008, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



digitech, что-то криво как-то smile
в условии если на то пошло сравнение типа >= и <= надо делать, а не > и <, большие буквы также не мешает добавить, да и выводить будет столько раз сколько цифр

Код

const
  alf: set of char = ['0'..'9','a'..'z','A'..'Z'];
  cifr: set of char = ['0'..'9'];
var
  s:string;
  i,j:integer;
  flag:boolean;
  n:integer;
  slova:array[1..30]of string[5];
begin
   n:=0;
   flag:=false;
   s:='sdkfh fdjk2,lejf gfn l4 jj5.';
 

{разбиваем на слова}
  for i:=1 to length(s) do
   begin
     if s[i] in alf then
        begin
          if flag=false then
            begin
              flag:=true;
              n:=n+1;
            end;
          slova[n]:=slova[n]+s[i];
        end
     else if not (s[i] in alf) and flag then flag:=false;
   end;

{выводим те, которые с цифрами}
for i:=1 to n do
  begin
    flag:=false;
    for j:=1 to length(slova[i]) do
       if (slova[i][j] in cifr)and (flag=false) then
       begin
         flag:=true;
         writeln(slova[i]);
       end;
  end;
readln;
end.

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


Опытный
**


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

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



Цитата(mmvds @  11.4.2008,  09:48 Найти цитируемый пост)
что-то криво как-то

Я знаю.

Цитата(mmvds @  11.4.2008,  09:48 Найти цитируемый пост)
в условии если на то пошло сравнение типа >= и <= надо делать, а не > и <, большие буквы также не мешает добавить, да и выводить будет столько раз сколько цифр

У меня было 20 мин - так как на перемене, за которые надо успеть много.  smile 
PM MAIL   Вверх
volvo877
Дата 11.4.2008, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(digitech @  11.4.2008,  08:55 Найти цитируемый пост)
Я знаю.
Зачем ДРУГИМ нужна эта кривизна? Делаешь сам - делай, другим советовать не надо... Потом от такого бреда очень долго отучать приходится...

Цитата
У меня было 20 мин - так как на перемене, за которые надо успеть много.
Ты перепутал... Здесь - не Formula I... "Поспешность нужна только при ловле блох..." (С)

bombaka, название темы поменяй, а то "Задачка" с главной страницы - как то не очень информативно ...

Это сообщение отредактировал(а) volvo877 - 11.4.2008, 10:01
PM MAIL   Вверх
bombaka
Дата 11.4.2008, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь!!  smile Надеюсь разберусь в том, что mmvds  написал)


P.S. название темы менять не умею(
PM MAIL   Вверх
bombaka
Дата 13.4.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня вопрос: 

А как сделать так, чтобы выводились и слова со знаками(точка, запятая,дефис)??
PM MAIL   Вверх
mmvds
Дата 13.4.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В смысле из вот этого:
Код

sdkfh fdjk2,lejf gfn l4 jj5.

должно вывести: 
Код

fdjk2,
l4 
jj5.

? или что, уточни, если так, то достаточно при разбиении на слова изменить:
Код

else if not (s[i] in alf) and flag then flag:=false;
     
на
Код

else if not (s[i] in alf) and flag then
       begin
         flag:=false;
         slova[n]:=slova[n]+s[i];
       end;

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


Новичок



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

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



Да, именно. Чтобы выводились слова в которых помимо букв есть еще и знаки, то бишь например цифра, запятая, точка, дефис,слэш ну и т.д.

Вообщем по моему ты меня понял. Спасибо smile
PM MAIL   Вверх
mmvds
Дата 13.4.2008, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



значит не так,
что должно вывести на эту строчку:
sdkfh fdjk2,lejf gfn l4 jj5.
или приведи свой пример
PM MAIL ICQ   Вверх
bombaka
Дата 13.4.2008, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всмысле? Ну у меня например такая строка: 

ghj mj,k l6kg j.kh kld

Ну и соответственно вывести нужно mj,k l6kg j.kh так как в этих словах есть знаки не являющиеся буквами(запятая, точка и цифра).

Это сообщение отредактировал(а) bombaka - 13.4.2008, 23:06
PM MAIL   Вверх
mmvds
Дата 14.4.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



противоречит начальному условию: между словами пробел или запятая, в конце последовательности - точка.

Если все-таки необходимо добавить '.' ',' '-' то нужно добавить эти знаки в алфавит для разбиения на слова и фильтр для выборки.
В первоначальном коде заменить: 
Код

const
  alf: set of char = ['0'..'9','a'..'z','A'..'Z'];
  cifr: set of char = ['0'..'9'];

на
Код

const
  alf: set of char = ['0'..'9','a'..'z','A'..'Z',',','.','-'];
  cifr: set of char = ['0'..'9',',','.','-'];

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


Новичок



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

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



Ну необходимо добавить не только ',' '.' и '-' но и вообще все знаки которые могут быть: начиная с '^' и заканчивая ']', включая естественно и числа.

А что такое фильтр для выборки? Я вот так добавил как ты предложил и ничего не вывелось.
PM MAIL   Вверх
mmvds
Дата 14.4.2008, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(bombaka @  14.4.2008,  10:15 Найти цитируемый пост)
Я вот так добавил как ты предложил и ничего не вывелось

Значит неправильно добавил, у меня выводит то что нужно 
Код

const
  alf: set of char = ['0'..'9','a'..'z','A'..'Z',',','.','-'];
  cifr: set of char = ['0'..'9',',','.','-'];
var
  s:string;
  i,j:integer;
  flag:boolean;
  n:integer;
  slova:array[1..30]of string[6];
begin
   n:=0;
   flag:=false;
   s:='ghj mj,k l6kg j.kh kld';
   for i:=1 to length(s) do
   begin
     if s[i] in alf then
        begin
          if flag=false then
            begin
              flag:=true;
              n:=n+1;
            end;
          slova[n]:=slova[n]+s[i];
        end
     else if not (s[i] in alf) and flag then
       begin
         flag:=false;
         slova[n]:=slova[n]+s[i];
       end;
   end;
for i:=1 to n do
  begin
    flag:=false;
    for j:=1 to length(slova[i]) do
       if (slova[i][j] in cifr)and (flag=false) then
       begin
         flag:=true;
         writeln(slova[i]);
       end;
  end;
readln;
end.

результат:
Код

mj,k
l6kg
j.kh

Если разделителем слов может быть только пробел то можно было сделать все гораздо легче, но чтоб заново не делать, опять же изменим множества символов
Код

const
  alf: set of char = [chr(33)..chr(255)];
  cifr: set of char = [chr(33)..chr(64),chr(91)..chr(96),chr(123)..chr(191)];


33..255 все символы кроме пробела и спецсимволов
65..90-английские заглавные
97..122-англ маленькие
192..255-русские буквы

Теперь в качестве разделителя слов могут выступать пробелы и спец символы (например, табуляция)
Кстати русские буквы теперь тоже учитываются smile

Код

const
  alf: set of char = [chr(33)..chr(255)];
  cifr: set of char = [chr(33)..chr(64),chr(91)..chr(96),chr(123)..chr(191)];
var
  s:string;
  i,j:integer;
  flag:boolean;
  n:integer;
  slova:array[1..30]of string[6];
begin
   n:=0;
   flag:=false;
   s:='gh:j mj,k l6kg j.kh kld';
   for i:=1 to length(s) do
   begin
     if s[i] in alf then
        begin
          if flag=false then
            begin
              flag:=true;
              n:=n+1;
            end;
          slova[n]:=slova[n]+s[i];
        end
     else if not (s[i] in alf) and flag then
       begin
         flag:=false;
         slova[n]:=slova[n]+s[i];
       end;
   end;
for i:=1 to n do
  begin
    flag:=false;
    for j:=1 to length(slova[i]) do
       if (slova[i][j] in cifr)and (flag=false) then
       begin
         flag:=true;
         writeln(slova[i]);
       end;
  end;
readln;
end.

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


Новичок



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

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



Ну спасибо! Надеюсь теперь все будет ок  smile 
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.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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