Автор Тема: Помогите пожалуйста найти ошибки в программе  (Прочитано 2988 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Asira

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Дана строка S, слова в которой разделены пробелами и знаками препинания.
В каждом слове поменять местами левую и правую половины. Например, из слова “задача” получится “ачазад”. Если количество букв нечетное, то среднюю букву оставить на месте
{$APPTYPE CONSOLE}

uses
  SysUtils;
const znaki=',.";: -?!';
 var s,s2,s1,s3:string;
     ns,ks,i,j,k,p,m:integer;

begin
writeln('Enter string ');
 readln(s);
 k:=1;
while k<=length(s) do
  begin
  k:=1;
   while (pos(s[k],znaki)<>0) and (k<=length(s)) do
    k:=k+1;
    ns:=k;
   while (pos(s[k],znaki)=0) and (i<=length(s)) do
    i:=i+1;
    ks:=i;
if i mod 2 =0 then
p:= i div 2;

s1:= copy(s,ns,p);

s2:=copy(s,p+1,p);

s3:=s2+s1;

writeln(s3);
if i mod 2<>0 then
s1:= copy(s,ns,p);
s2:=copy(s,p,p);
s3:=s2+s1;
writeln(s3);
end;
writeln(s3);
readln;
end.

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Вобще то задача очень простая:изменить порядок следования символов на обратный)
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
что именно у вас не работает? дебагом пользоваться умеете? попробуйте как можно точнее локализовать ошибку
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Asira

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Помогите пожалуйста найти ошибки в программе
« Ответ #3 : 14 Декабря 2009, 23:45:04 »
Ничем пользоваться не умею.........:(:(:( первокурсница я только...... так что мозгов маловато ........  не работает это значит она слова не в ту сторону разворачивает..........
InfStudent  если задача лёгкая дак помоги........!!!!!!!!

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Сейчас я как раз тебе код пишу
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
ну вы бы хоть написали,что именно не так работает...а там уж будем разбираться
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн InfStudent

  • Модератор
  • *****
  • Сообщений: 1356
  • Куба любовь моя))
    • Просмотр профиля
Ну вот код который переваричивает строку:

{$APPTYPE CONSOLE}

uses
  SysUtils;
 procedure GetWordAndReverse(s:string;sw:string);
 var
 i:integer;
 j:integer;
 c:char;
 begin
  sw:=copy(s,1,4);
  j:=length(sw);
  for I := 1 to j-1 do
   begin
   c:=sw;
   sw:=sw[j];
   sw[j]:=c;
   dec(j);
   writeln(sw);
   end;
     writeln(sw);
   end;

 var
 s,sw:string;
begin
write('Enter word:');
readln(s);
GetWordAndReverse(s,sw);
readln;
end.
Прежде чем задавать вопрос в раздел по программированию повтори теорию и посмотри FAQ! Просьба не кидайте задания в ЛС и не надо мне писать: "посмотри мою задачу!!!" Я смотрю все задачи в разделе когда на форуме
Учтите что подобные ЛС будут оставлены без внимания!
УКАЗЫВАЙТЕ ЯЗЫК ПРОГРАММИРОВАНИЯ НА КОТОРОМ ДОЛЖНА БЫТЬ РЕШЕНА ЗАДАЧА
Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Asira

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
[size=10pt][size=10pt]{$APPTYPE CONSOLE}

uses
  SysUtils;

const znaki=',.";: -?!' ;
function Perestanovka(s: string): string;
var
  l,p:integer;
begin
  l:= length(s);p:= l div 2;
  if l mod 2 = 0  then
  begin
s := s + copy(s, 1, p);
Delete(s, 1, p);
  end
  else
  begin
    s := s + copy(s, p + 1, 1) + copy(s, 1, p);
    Delete(s, 1, p + 1);
  end;
   Perestanovka:= s;
end;


 var k,i: Integer;
  S, s1: String;
begin
writeln('Enter string ');
 readln(s);
 i:=1;

while i<=length(s) do
  begin
//i:=1;
while (pos(s[i],znaki)=0) and (i<=length(s))do

//s1:=' ';
s1:= s1 + s[i];
Inc(i);
write(Perestanovka(s1));
//end;
 while (pos(s[i],znaki)<>0) and (i<=length(s))do
 write(s[i]);
Inc(i);
end;
Readln;
  Readln;
end.[/size][/size]
Проблема в том как правильно сделать чтоб моя функция переворачивала каждое слово в строке

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
разбейте строку на слова,запихните все слова в массив,а уж там будете переворачивать
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Asira

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
а зачем в массив то засовывать??? без него никак???

Оффлайн samar

  • Пользователь
  • **
  • Сообщений: 41
    • Просмотр профиля
Re: Помогите пожалуйста найти ошибки в программе
« Ответ #10 : 23 Декабря 2009, 13:05:24 »
а зачем в массив то засовывать??? без него никак???

Можно и нужно. Если вы начнете хранить слова массиве, вам также прийдется как-то запоминать символы, которыми эти слова разделяются

Оффлайн samar

  • Пользователь
  • **
  • Сообщений: 41
    • Просмотр профиля
Re: Помогите пожалуйста найти ошибки в программе
« Ответ #11 : 23 Декабря 2009, 13:24:40 »
const
  separator='., ';
 
var
  s : string;
  i, beginWord, j : integer;
  ch : char;
 
begin
  s:='word,word2.res wer';
  beginWord:=1;
 
  for i:=1 to length(s) do begin
    if pos(s[i],separator)<>0 then begin
      if (i-beginWord>1) then begin
        for j:=1 to (i-beginWord) div 2 do begin
          ch:=s[beginWord+j-1];
          s[beginWord+j-1]:=s[i-j];
          s[i-j]:=ch;         
        end;       
      end;
      beginWord:=i+1;
    end;
  end;
 
  writeln(s);
 
end.

у меня такое решение получилось. могут быть неточности, т.к. я давно уже на Паскале не программировал.

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: Помогите пожалуйста найти ошибки в программе
« Ответ #12 : 23 Декабря 2009, 16:52:09 »
без массива можно,но так проще

можно так:
получили 1ое слово,развернули его,вывели,идете далее,так же со 2ым и последующими словами...но вот дважды к одному слову вы не сможете обратиться
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩