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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 13:55   #1
Helen236
Пользователь
 
Регистрация: 05.04.2012
Сообщений: 23
По умолчанию Задачи в Pascal

Уважаемые программисты!!!!
Помогите, пожалуйста, решить кто-что может. Заранее благодарна.
Вложения
Тип файла: doc Прямоугольник.doc (99.0 Кб, 21 просмотров)
Helen236 вне форума Ответить с цитированием
Старый 19.04.2012, 14:21   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Helen236 Посмотреть сообщение
Уважаемые программисты!!!!
Помогите, пожалуйста, решить кто-что может. Заранее благодарна.
Типовое решение на "Самое длинное слово" можно значительно упростить

Код:
const
WordDelimiters : set of char=[' '];

type
Tpoint=record
  x,y:integer;
end;

TwordPosition=record
   Word:string;
   PosX:integer;
   WordLength:integer;
end;


Tdocument=record
   WordList:array [0..255] of TwordPosition;
   WordListCount:Integer;
end;
var d:Tdocument;
Procedure CreateDocument(var Value:Tdocument; BodyText:string;Len:integer);
var x:Integer;
    s2:string;
    rs:Tpoint;
    s:string;
begin
   s:=bodytext;
   Value.WordListCount:=0;
   rs.X:=1;
   rs.y:=0;
   for X:=1 to length(s) do begin
      if (ord(s[x])<33) or (s[x] in WordDelimiters) or (x=length(s)) then
                       begin
                       if not ((s[x] in WordDelimiters) or (ord(s[x])<33)) then s2:=s2+s[x];
                       if (s2<>'') and ((len=0) or (length(s2)>=len))  then begin
                             rs.y:=x-rs.X;

                               Value.WordListCount:=Value.WordListCount+1;
                               value.WordList[Value.WordListCount-1].Word:=s2;
                               value.WordList[Value.WordListCount-1].PosX:=rs.x;
                               value.WordList[Value.WordListCount-1].WordLength:=length(s2);
                             end;
                             s2:='';
                          end
                          else begin
                          if s2='' then rs.X:=x;
                          s2:=s2+s[x];
                          end;

  end;
end;


Function GetMaxLengthWords(Value:Tdocument):string;
var X:Integer;
     Maxv:Integer;
begin
Maxv:=value.WordList[0].WordLength;
result:=value.WordList[0].Word;

  for x:=0 to value.WordListCount-1 do begin
     if value.WordList[x].WordLength>Maxv then begin
     Maxv:=value.WordList[x].WordLength;
     result:=value.WordList[x].Word;
     end;
end;
end;
var s:string;
    f:Text;
begin
   assign(f,'input.txt');
   reset(f);
   readln(f,s);
   close(F);
   assign(f,'Output.txt');
   Rewrite(f);
   d.WordListCount:=0;
   CreateDocument(d,s,0); // создаем массив слов
   Writeln(f,Length(GetMaxLengthWords(d))); // выводим длину максимальнной длины  слова
   close(F);
end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 19.04.2012, 14:27   #3
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Код:
{
Удвоить символ
Имя входного файла:	input.txt
Имя выходного файла:	output.txt
Максимальное время работы на одном тесте:	2 секунды
Дана строка S и символ C. Удвоить каждое вхождение символа C в строку S.
Формат входных данных
В первой строке входного файла записана строка S длиной не более 255 символов, затем символ C.
Формат выходных данных
В выходной файл выведите преобразованную в соответствии с условием строку.
Примеры
input.txt	output.txt
abac
a	aabaac
abac
b	abbac

}
var s:string;
    f:Text;
    c:string;
    s2:string;
    x:integer;
begin
   assign(f,'input.txt');
   reset(f);
   readln(f,s);
   readln(f,c);
   close(F);
   s2:='';
   for X:=1 to length(s) do
    if s[x]=c[1] then s2:=s2+c[1]+c[1]
    else s2:=s2+s[x];
   
   assign(f,'Output.txt');
   Rewrite(f);
   Writeln(f,s2);
   close(F);
   Writeln(s2);
   
end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 19.04.2012, 15:29   #4
SlavaSSU
Пользователь
 
Регистрация: 15.04.2012
Сообщений: 46
По умолчанию

ты уверен, что результирующая строка будет меньше 255 символов
НИУ СГУ им. Чернышевского
SlavaSSU вне форума Ответить с цитированием
Старый 23.04.2012, 06:31   #5
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от denisbrain Посмотреть сообщение
Типовое решение на "Самое длинное слово" можно значительно упростить
Думаю, в этом ты прав, Денис. Как-то примерно так можно:
Код:
var
  f: text;
  s: string;
  i,j,l: integer;
begin
  Assign(f,'input.txt');
  Reset(f);
  Readln(f,s);
  Close(f);
  j:= 0;
  l:= 0;
  for i:=1 to Length(s)+1 do
    if (i>Length(s)) or (s[i]=' ') then begin
      if i-j>l then l:= i-j;
      j:= i
    end;
  Assign(f,'output.txt');
  Rewrite(f);
  writeln(f,l-1);
  Close(f)
end.
Я думал, что получится еще проще, если читать из файла посимвольно (и при этом отпадает надобность в строке s), но я понял, что ошибался, когда написал - сложности были в правильной обработке конца строки. Все же выкладываю и этот вариант..
Код:
var
  f: text;
  c: char;
  i,j,l: integer;
begin
  Assign(f,'input.txt');
  Reset(f);
  j:= 0;
  l:= 0;
  i:= 0;
  while not EoLn(f) do begin
    inc(i);
    Read(f,c);
    if EoLn(f) or (c=' ') then begin
      if EoLn(f) and (c<>' ') then inc(i);
      if i-j>l then l:= i-j;
      j:= i
    end
  end;
  Close(f);
  Assign(f,'output.txt');
  Rewrite(f);
  writeln(f,l-1);
  Close(f)
end.
Из остальных задач меня заинтересовало только нахождение двух минимальных. Логично было бы проситать в массив, отсортировать его и взять два крайних числа. Но можно обойтись и без сортировки, и даже вообще без массива.
Код:
var
  f: text;
  i,m,n,b: integer;
begin
  Assign(f,'input.txt');
  Reset(f);
  Read(f,m);
  Read(f,n);
  if n<m then begin
    b:= m;
    m:= n;
    n:= b
  end;
  while not EoLn(f) do begin
    Read(f,i);
    if i<=m then begin
      n:= m;
      m:= i
    end
    else if i<n then n:=i
  end;
  Close(f);
  Assign(f,'output.txt');
  Rewrite(f);
  write(f,n,' ',m);
  Close(f)
end.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 24.04.2012, 13:12   #6
Bozman
Новичок
Джуниор
 
Регистрация: 03.10.2011
Сообщений: 1
По умолчанию

Добрый день, господа программисты. Очень нужна ваша помощь:
Написать алгоритм и программу на языке Паскаль, выполняющие следующие операции:
1) Сцепление двух списков;
2) Инвертирование списка, при котором первый элемент становится последним и т.д.;
3) Удаление n-го элемента из списка;
4) Создание списка, представляющего собой объединение (по операции ИЛИ) элементов двух списков;
5) Вставка элементов после n-го элемента списка;
6) Размещение элементов списка в возрастающем порядке;
7) Вычисление числа элементов в списке;
8) Создание копии списка.
Bozman вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи в Pascal Ванек64 Помощь студентам 5 09.12.2010 23:04
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
Pascal.3 задачи ромка) Паскаль, Turbo Pascal, PascalABC.NET 6 30.05.2008 01:44