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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2008, 12:46   #1
mihandroz
Новичок
Джуниор
 
Регистрация: 18.09.2008
Сообщений: 2
Сообщение помогите решить задачу

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

ЗА РАНЕЕ ОГРОМНОЕ СПАСИБО!
mihandroz вне форума Ответить с цитированием
Старый 23.10.2008, 15:31   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Первый раз вижу нормальное задание при работе со строками. Обычно "Дан текст, сделать то-то" и думай, а что за текст? может Конфуций в подлиннике. На конкретное задание и решение конкретное.
Код:
uses crt;
var s,s1:string;
    k1,k2,k3,i:integer;
function Revers(a:string):string;  {функция "переворота" слова}
var j:integer;
    c:char;
begin
for j:=1 to length(a) div 2  do
   begin
    c:=a[j];
    a[j]:=a[length(a)-j+1]; {симметрично меняем местами символы}
    a[length(a)-j+1]:=c;
  end;
Revers:=a;
end;
begin
clrscr;
repeat
writeln('Введите предложение:'); {т.к. в условии задачи три условия, их надо проверить после ввода}
readln(s);
k1:=0;
for i:=1 to length(s)do
if s[i] in ['.',',',';',':','?','!','-'] then  {проверяем на знаки препинания}
     begin
      writeln('Предложение содержит знаки препинания. Повторите ввод!');
      k1:=1;
      break;
     end;
k2:=0;
for i:=1 to length(s)do
if (s[i]=' ')and(s[i+1]=' ')or(s[1]=' ')or(s[length(s)]=' ') then {проверяем на лишние пробелы}
     begin
      writeln('Предложение содержит лишние пробелы. Повторите ввод!');
      k2:=1;
      break;
     end;
k3:=0;
if length(s)>128 then  {проверяем на длину предложения}
     begin
      writeln('Слишком длинное предложение. Повторите ввод!');
      k2:=1;
      break;
     end;
until (k1=0)and(k2=0)and(k3=0);
s:=s+' '; {добавляем для удобства пробел в конец строки}
s1:='';
while pos(' ',s)>0 do {пока есть пробелы}
    begin
      s1:=s1+Revers(copy(s,1,pos(' ',s)-1))+' '; {копируем перевернутые слова и записываем их в новую строку}
      delete(s,1,pos(' ',s)); {удаляем прочитанное слово с пробелом}
    end;
write(s1);
readln
end.
puporev вне форума Ответить с цитированием
Старый 23.10.2008, 17:59   #3
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

Код:
program invprog;

{$APPTYPE CONSOLE}

uses
  SysUtils;
const Separator= #32;


procedure Invert (Str:string);
    var lstr,i,n,j:byte;
        Word: array [0..255] of char;

begin
  lstr:=length (str);
  i:=1;
  n:=0;
    for i:=lstr downto 1 do
      begin
        word [n]:= str [i];
        inc (n);
      end;
    for j:=0 to n do
      write (Word[j]);
      write (' ');
end;
////////End of Function//////////////////
var str,operatingStr : string;
    lengthOfStr,i,j,StartWord,WhatCopy,let: byte;
    Words: array [0..255] of string;
begin
///////////user interface////////////
Writeln ('Enter your word please...');
readln(str);
/////////////end of interface//////////

///////////body//////////////////
lengthOfStr:=length (str);
StartWord:=1;
let:=0;
for i:=1 to lengthOfStr+1 do
  begin
    if (str[i]= Separator) or (i = lengthOfStr+1) then
      begin
        WhatCopy:=i-StartWord;
        Words[let]:= copy (str,StartWord,WhatCopy);
        StartWord := i+1;
        inc(let);
      end;
end;
////////////invert////////////////////                                    
for j:=0 to let do
    invert(Words[j]);  
readln;
end.
Elm0 вне форума Ответить с цитированием
Старый 23.10.2008, 23:29   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
lengthOfStr:=length (str);
Просто поражает какая-то непонятная вычурность. Что вы выиграли введя эту переменную? В написании она длиннее функции. Я еще понимаю n:=length(s), когда часто используется эта функция, лень писать, а добавить писанины, не понимаю.
puporev вне форума Ответить с цитированием
Старый 24.10.2008, 19:45   #5
Elm0
ObjectPascal,CISCO
Форумчанин
 
Регистрация: 22.05.2007
Сообщений: 294
По умолчанию

В чем-то Вы правы, но у каждого свои причуды может быть.... Но, мне так удобнее (лично МНЕ), на глаз легче воспринимается что ли...
Раньше пользовался переменными типа - a1,a2, k, m, n. и в конце концов понял, что напутал тааак, что все уничтожал и начинал заново.
Elm0 вне форума Ответить с цитированием
Старый 24.10.2008, 19:52   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Просто не надо в таком случае вводить переменную а писать непосредственно саму фнкцию. Или Вы напишите if length(s)>1 then ..,
или if lengthOfStr(s)>1 then, то непонятно, зачем вообще нужна лишняя переменная?
Я еще понимаю, если Вы не знаете что такое length, и чтобы не вспоминать сделаете переменную DlinaStroki.

Последний раз редактировалось puporev; 24.10.2008 в 19:54.
puporev вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу pantera_88.07 Общие вопросы C/C++ 2 21.02.2008 15:09
Помогите решить задачу. Shady Общие вопросы Delphi 7 10.11.2007 23:09