Страница 1 из 11
Модератор форума: Екатерина_Пашкова 
Форум учителей об образовании в России и мире » Форум педагогов по предметам, разделам » Форум учителей информатики » Паскаль, строки (помогите на Паскале решить)
Паскаль, строки
АрсикДата: Понедельник, 05.12.2011, 19:17 | Сообщение # 1

Арслан Батыршин
Ранг: Дошколенок (?)
Группа: Пользователи
Российская Федерация
Уфа

Сообщений:
19
Награды: 0
Статус: Offline
написать и протестировать функцию , которая "переворачивает" все пары символов строки, передаваемой ей в качестве параметра.(привет друг->рпвитед ург)
Спасибо
alex_eduДата: Вторник, 06.12.2011, 17:26 | Сообщение # 2

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
- цикл соответствующий длине фразы с шагом 2
- выыводим или добаляем к результату фунции (i+1)ый символ строки потом i-ый.
- обработать ситуацию когда нечетное кол-во
Спасибо
pavel7Дата: Четверг, 22.12.2011, 18:59 | Сообщение # 3

Павел Сапунов
Ранг: Школьник (?)
Группа: Пользователи
Российская Федерация
Москва

Сообщений:
72
Награды: 1
Статус: Offline
Добрый день, Арслан!

Я решил тебе помочь, но не знаю - не поздно ли? Я только вчера первый раз зашёл на этот сайт.
Вот программка:

USES crt;
var
i,j,n :integer;
r:real;
s:string;
c,a,b:char;

begin clrscr;

s:='I want to write good programs';
writeln(s);
j:=length(s);
writeln(j);
r:=j;
{ если количество символов в строке нечетно,
то последний символ не трогаем
}
if (j div 2)<>(r/2) then j:=j-1;
writeln(j);

n:=j div 2;

{ меняем местами пары символов:
}
for i:=1 to n do
begin
a:=s[i*2-1];
b:=s[i*2];
c:=a;
a:=b;
b:=c;
s[i*2-1]:=a;
s[i*2]:=b;
end;
writeln(s);
{
проверка:
}
for i:=1 to n do
begin
a:=s[i*2-1];
b:=s[i*2];
c:=a;
a:=b;
b:=c;
s[i*2-1]:=a;
s[i*2]:=b;
end;
writeln(s);

c:=readkey;end.

Удачи!
Спасибо
alex_eduДата: Четверг, 22.12.2011, 23:34 | Сообщение # 4

Александр Обычный
Ранг: Магистр (?)
Группа: Пользователи
Российская Федерация
Иваново

Сообщений:
606
Награды: 7
Статус: Offline
if (j div 2)<>(r/2) then j:=j-1;
n:=j div 2;

Эти две строки стоит поменять местами. Чтоб два раза не выполнять вычисления.
Переворачиание в функцию. Чтобы для проверки не повторять код.
Много лишних вычисления при переворотах.
Думаю так будет симпатичнее.
Code

USES crt;
var
         str : string;
   
         function Change(iStr : string) : string;
         var
                 i : integer;
                 strLen : integer;
                 tmp : char;
         begin
                 strLen := length(iStr);
                 i:=2;
                 while i < strLen do begin
                         tmp := iStr[i-1];
                         iStr[i-1] := iStr[i];
                         iStr[i] := tmp;
                         i :=  i+2;
                 end;
                 Change := iStr;
         end;
          
begin  
         clrscr;
         str:='I want to write good programs';
         writeln(str);
         str := Change(str);
         writeln(str);
         str := Change(str);
         writeln(str);
         readkey;
end.

Длинна строки вычисляется в данном коде два раза - это для чистоты, чтоб функция была "полноценной"
Под рукой компилятора нет - воспользловался онлайн http://ideone.com
Вот результат работы предыдущего автора http://ideone.com/5Gb92
вот результат моего кода: http://ideone.com/cceMU

То, что начинаем с индекса 2 плюс ограничение цикла длинной дает нам условие, что обрабатываются только пары.
Замена for на while дает возможность применять шаг 2
Спасибо
pavel7Дата: Пятница, 23.12.2011, 21:01 | Сообщение # 5

Павел Сапунов
Ранг: Школьник (?)
Группа: Пользователи
Российская Федерация
Москва

Сообщений:
72
Награды: 1
Статус: Offline
Согласен, Ваша программа красивее.
Повезло Арслану - теперь у него две программы!
Спасибо
АрсикДата: Воскресенье, 25.12.2011, 23:14 | Сообщение # 6

Арслан Батыршин
Ранг: Дошколенок (?)
Группа: Пользователи
Российская Федерация
Уфа

Сообщений:
19
Награды: 0
Статус: Offline
Спасибо всем)))сам не ожидал, что даж несколько вариантов получилось
Спасибо
Форум учителей об образовании в России и мире » Форум педагогов по предметам, разделам » Форум учителей информатики » Паскаль, строки (помогите на Паскале решить)
Страница 1 из 11
Поиск:



Спорная ситуация с родителями или администрацией? Ищете выход из проблемы на уроке или с учеником?
Не знаете, как что-то сделать на компьютере?


Вы можете задать анонимный вопрос
х
Подробно изложите суть вашего вопроса.
Обратите внимание, что вопросы публикуются в открытом доступе не сайте, поэтому не указывайте персональные данные ваши или иных лиц. Однако стоит указать свой РЕГИОН, т.к. законодательство в разных регионах разное.
Отправить