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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2007, 13:07   #1
anarchist
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию Массивы символов (строки) символьные файлы.

Здравствуйте! Люди добрые! Подскажите как решить такую задачку:

Массивы символов (строки) символьные файлы.
Составить программу, выполняющую в диалоге преобразование над текстовыми файлами согласно заданному варианту. исходный текстовый файл создается с помощью текстового редактора и должен содержать произвольную последовательность различных символов.
В формулировках заданий имеются следующие понятия:

•цепочка - последовательных символов, каждый из которых отображается на экране; длина цепочки не превосходит 30 символов.
•слово - цепочка, ограниченная пробелами или не отображаемыми символами
•регулярное слово - слово состоящее только из больших английских букв
•палиндром - слово, в котором символы при просмотре слева направо и справа налево совпадают
•число - слово состоящее только из цифр

Использование массивов допускается только для хранения отдельных элементов файла,
для размещения всего файла, массивы использовать нельзя


может у кого чтото подобное есть???
anarchist вне форума Ответить с цитированием
Старый 21.12.2007, 13:16   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Так в чём проблема, элементарное ведь задание. Покажи что уже сделано.

P.S.:Какой язык?
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 24.12.2007, 09:16   #3
anarchist
 
Регистрация: 30.11.2006
Сообщений: 5
По умолчанию

вот, вроде все работает, но решение, на мой взгляд не совсем рациональное...
нельзя ли что нибудь упростить или урезать?
Код:
program zn2;
uses crt;
type
chisOf=set of '0'..'9';{создаем новый тип, диапазон чисел от 0 до 9}
rsOf=set of 'A'..'Z';{создаем новый тип, диапазон заглавных английских букв}
var
f: text;{текстовая переменная}
sf:string;{имя файла}
rs:rsOf;{присваиваем новый тип для рег. слова}
rslovo:string;{регулярное слово}
chis:chisOf;{присваиваем новый тип для чисел}
chisl: string;{число}
slovo:string;{слово}
s: string; {предложение}
sl, sl1: string; {слово необходимое для нахождения слов минимальной и максимальной длины}
predl: string;{палиндром}
i,j,k: integer; {счётчик}
l: integer; {длина предложения}
lw: integer; {длина слова}
cep:string[30];{ограничение символов}
ex:string;{выход}
t:integer;
begin
 clrscr;
 write('Vvedite file - ');
 readln(sf);{вводим имя файла}
 assign(f,sf);
 {$i-}
 reset(f);
 {$i+}
 if IOresult=0 then
     begin
      write('Ok');
     end
    else
     begin
      write('File ','"', sf,'"', ' NO');
      readln;
      exit;
     end;
 readln (f,s);
 l:=length(s); {Нахождение длины строки}
 sl:='';
 lw:=0; {длина текущего слова}
 chis:=['0'..'9'];{множество чисел}
 rs:=['A'..'Z'];{множество букв}
while ex<>'exit' do
 begin
  clrscr;
  writeln('1. Cepochka');
  writeln('2. Slovo');
  writeln('3. Regulyarnoe slivo');
  writeln('4. Palindrom');
  writeln('5. Chislo');
  writeln;
  writeln('0. Exit');
  writeln;
  write('Vvedite nomer pinkta - ');
  readln(t);
   case t of {выбор варианта}

    1: begin
        cep:=s;
        writeln;
        writeln('Cepochka = ', cep);
        readln;
       end;

    2: begin
       slovo:='';
       for i:=1 to l do
        begin
         if (s[i]<>' ') and (s[i]<>'.') then {Проверяем условие: не равен ли
          данный символ пробелу и точке}
          begin
             lw:=lw+1; {если да то увеличиваем длину текущего слова на единицу}
             sl:=sl+s[i]; {и текущему слову прибавляем один символ}
            end
         else
          begin   {а если находим пробел}
           if (lw>1) then
            begin
             slovo:=sl;
	    end;
           lw:=0; {затем обнуляем длину текущего слова}
           sl:=''; {и текущее слово}
	   break;
          end;
        end;
          writeln;
          writeln ('Slovo = ', slovo); {Печать слова}
          readln;
       end;

    3: begin
      rslovo:='';
       for i:=1 to l do
        begin
         if (s[i]<>' ') and (s[i]<>'.') then {Проверяем условие: не равен ли
          данный символ пробелу и точке}
          begin
	   if s[i] in rs then
	    begin
             lw:=lw+1; {если да то увеличиваем длину текущего слова на единицу}
             sl:=sl+s[i]; {и текущему слову прибавляем один символ}
            end;
            end
         else
          begin   {а если находим пробел}
           if (lw>1) then
            begin
             rslovo:=sl;
            end;
           lw:=0; {затем обнуляем длину текущего слова}
           sl:=''; {и текущее слово}
          end;
        end;
          writeln;
          writeln ('RSlovo = ', rslovo); {Печать рег.слова}
          readln;
       end;


    4: begin
      predl:='';
       for i:=1 to l do
        begin
         if (s[i]<>' ') and (s[i]<>'.') then {Проверяем условие: не равен ли
          данный символ пробелу и точке}
          begin
           lw:=lw+1; {если да то увеличиваем длину текущего слова на единицу}
           sl:=sl+s[i]; {и текущему слову прибавляем один символ}
          end
         else
          begin   {а если находим пробел}
           if (lw>1) then
            begin
            sl1:='';
             for j:=lw downto 1 do
              begin
               sl1:=sl1+sl[j];
              end;
             if sl=sl1 then
              begin
               predl:=predl+sl+' ';
              end;
             end;
         lw:=0; {затем обнуляем длину текущего слова}
         sl:=''; {и текущее слово}
          end;
        end;
          writeln;
          writeln ('Palindrom = ', predl); {Печать палиндромов}
          readln;
        end;

    5: begin
      chisl:='';
       for i:=1 to l do
        begin
         if (s[i]<>' ') and (s[i]<>'.') then {}
          begin
	   if s[i] in chis then
	    begin
             lw:=lw+1; {}
             sl:=sl+s[i]; {}
            end;
            end
         else
          begin   {}
           if (lw>1) then
            begin
             chisl:=sl;
            end;
           lw:=0; {}
           sl:=''; {}
          end;
        end;
          writeln;
          writeln ('Chislo = ', chisl); {Печать числа}
          readln;
       end;

    0: begin
        ex:='exit';
       end;
   end;
 end;

end.

Последний раз редактировалось anarchist; 24.12.2007 в 09:56.
anarchist вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьные строки в "Си" Starmid Помощь студентам 1 30.05.2008 09:13
Помогите с прогой. Тема: символьные массивы Алексей Д. Помощь студентам 6 02.04.2008 22:10
Массивы символов с++ chagin_yav Помощь студентам 2 04.01.2008 19:14
Паскаль. задача на символьные массивы и строки zaraza21 Помощь студентам 1 03.11.2007 19:33