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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2012, 19:47   #1
moto125
 
Регистрация: 22.02.2012
Сообщений: 5
По умолчанию Если слово содержит цифру, то заключить ее в скобки..

здравствуйте, помогите написать прогу.. 3ий день уже мучаюсь.. вот задание:


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


спасибо...

Код:
program laba;
Const dig = ['0'..'9'];
var
fIn,fOut : text;
s,p : string;
i,sum,k , start: integer;
f: boolean;

begin
assign(fIn,'input.txt');
assign(fOut,'output.txt');
reset(fIn);
rewrite(fOut);

while not eof(fIn) do
read(fIn, s);

i:=0;
f := false;
sum:=0;
p := '';
while i <=Length(S) do begin
  Inc(I);

  if (s[i] <> p) and ((s[i-1]=p) or (i=1)) then
    begin
     start :=i;
     k:=i;
    while s[k] <> p do

    if s[k] in dig then

    Insert('(', s, start);
   end;
   f := True;
   sum:= sum+1;


  end;
  writeln(sum);
  writeln(s);
  close(fOut)
 end.

________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 23.02.2012 в 04:59.
moto125 вне форума Ответить с цитированием
Старый 23.02.2012, 01:40   #2
ACE Valery
Сама себе режиссер
Старожил
 
Аватар для ACE Valery
 
Регистрация: 27.04.2007
Сообщений: 3,365
По умолчанию

Так а в чем проблема?
Если я вас напрягаю или раздражаю, вы всегда можете забиться в угол и поплакать
ACE Valery вне форума Ответить с цитированием
Старый 23.02.2012, 01:44   #3
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

У меня такое ощущение, что p := ''; как то сильно пусто для пробела =)
AlexDark вне форума Ответить с цитированием
Старый 23.02.2012, 05:24   #4
moto125
 
Регистрация: 22.02.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от AlexDark Посмотреть сообщение
У меня такое ощущение, что p := ''; как то сильно пусто для пробела =)
да и пробывал ' '.. это уже конечный вариант попыток) а сама проблема в том что недописана часть выделения слова скобками...
moto125 вне форума Ответить с цитированием
Старый 23.02.2012, 08:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот разбиение строки на слова:http://www.programmersforum.ru/showt...369#post398369
Товя задача дописать в цикл там где идет перескок на другое слово что-то типа
Код:
if dig(a[count]) then a[count]:='('+a[count]+')';
Где
Код:
fonction dig(s:string):boolean;var i:byte;
begin for i:=1 to length(s) do if s[i] in ['0'..'9'] then begin dig:=true;exit;end; dig:=false;end;
Ну и после сам массив в таком же цикле записывай в файл.
Ясно?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.02.2012, 12:56   #6
moto125
 
Регистрация: 22.02.2012
Сообщений: 5
По умолчанию

так и не получилось поправьте если вам не трудно, буду благодарен..
Код:
program laba8;
var
fIn,fOut : text;
s,p : string;
i,sum,k , count: integer;
f,dig: boolean;
 a: array[1..100] of string;


function diga(s : string):boolean;
var i:byte;
begin for i:=1 to length(s) do
  if s[i] in ['0'..'9'] then
   begin
     dig:=true;
     exit;
   end;
    dig:=false;
end;


begin
assign(fIn,'input.txt');
assign(fOut,'output.txt');
reset(fIn);
rewrite(fOut);

while not eof(fIn) do
read(fIn, s);



count:=1;
 i:=0;
 while (i<=length(s)) do 
begin


if s[i]=' ' then
   begin
     inc(count);
     inc(i)
   end
   
else
   
   begin
     a[count]:=a[count]+s[i];
     inc(i);
   end;

if diga(a[count]) then a[count]:='('+a[count]+')';
end;

writeln(s);
close(fOut)
end.
moto125 вне форума Ответить с цитированием
Старый 25.02.2012, 13:23   #7
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Набросал тут, вроде бы работает верно. Перепиши под себя:
Код:
procedure insertskobki(var S:string);
var
  i,start,stop:integer;
begin
  i:=length(s);
  while i>1 do
    begin
      if s[i] in ['0'..'9'] then
        begin
          start:=i+1;
          while s[i] in ['0'..'9'] do
            dec(i);
          stop:=i+1;
          if ((s[i]<>' ')and(i<>0)) or ((s[start]<>' ')and(start<>length(s)+1)) then
            begin
              insert(')',s,start);
              insert('(',s,stop);
            end;
        end;
      dec(i);
    end;

end;

var
  S:string;
begin
  readln(s);
  writeln;
  insertskobki(s);
  writeln(s);
  readln;
end.
Все тривиальное просто

Последний раз редактировалось whatever; 25.02.2012 в 13:31. Причина: начальный вариант заключал в скобки число вне слова, если он стояло вначале или в конце строки.
whatever вне форума Ответить с цитированием
Старый 25.02.2012, 13:52   #8
moto125
 
Регистрация: 22.02.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от whatever Посмотреть сообщение
Набросал тут, вроде бы работает верно. Перепиши под себя:
Код:
procedure insertskobki(var S:string);
.....
только почему-то берет в скобки саму цифру, а должна само слово, хотя вроде должна правильно работать


Не увлекайтесь излишним цитированием! Лишнее удаляйте.
Иначе получите штраф за оверквотинг!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.02.2012 в 22:50.
moto125 вне форума Ответить с цитированием
Старый 25.02.2012, 14:05   #9
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Цитата:
Сообщение от moto125 Посмотреть сообщение
только почему-то берет в скобки саму цифру, а должна само слово, хотя вроде должна правильно работать
Хм... Я так и писал, что нужно числа заклчать в скобки. Фигня на самом деле, просто замени ['0'..'9'] на ['a'..'z','A'..'Z']

Update: еще раз перечитал задание... Стоило из-за этого голову ломать? Я то думал тут нужно цисла внутри слов в скобки заключать, а оказывается...
Все тривиальное просто

Последний раз редактировалось whatever; 25.02.2012 в 14:10.
whatever вне форума Ответить с цитированием
Старый 25.02.2012, 14:24   #10
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
procedure insertskobki(var S:string);
var
  i,k,count:integer;
  m:array of string;
begin
  count:=1;
  while s[1]=' ' do
    delete(s,1,1);
  while s[length(s)]=' ' do
    delete(S,length(s),1);
  while pos('  ',S)<>0 do
    delete(S,pos('  ',S),1);
  for i:=1 to length(s) do
    if s[i]=' ' then
      inc(count);
  setlength(m,count);
  k:=1;
  for i:=0 to high(m) do
    begin
      m[i]:='';
      while (s[k]<>' ')and(k<=length(s)) do
        begin
          m[i]:=m[i]+s[k];
          inc(k)
        end;
      inc(k);
    end;
  s:='';
  for i:=0 to high(m) do
    if (pos('0',m[i])<>0)or
       (pos('1',m[i])<>0)or
       (pos('2',m[i])<>0)or
       (pos('3',m[i])<>0)or
       (pos('4',m[i])<>0)or
       (pos('5',m[i])<>0)or
       (pos('6',m[i])<>0)or
       (pos('7',m[i])<>0)or
       (pos('8',m[i])<>0)or
       (pos('9',m[i])<>0) then
          s:=s+'('+m[i]+') '
    else
      s:=s+m[i]+' ';
end;
Кстати, в следующий раз постарайся нормально называть темы, исходя из названия мой первый вариант правильный.
Все тривиальное просто

Последний раз редактировалось whatever; 25.02.2012 в 14:30.
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Если ячейка Сх содержит в начале значение Вх Vceznayka Microsoft Office Excel 4 28.10.2011 12:35
если число содержит цифру, тогда... Mitde Общие вопросы C/C++ 9 02.04.2011 23:34
Слово/цифру разделить на части 0mega Microsoft Office Excel 5 31.01.2010 22:46
Помогите открыть файл который содержит определенное слово в названии. repo Microsoft Office Excel 2 03.08.2008 19:00
Как изменить цвет текста на всей строке в RichEdit, если строка содержит определенное слово?? IIpopoK Общие вопросы Delphi 0 22.06.2008 07:57