0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
1

Переставить первое слово с последним, второе с предпоследним

23.12.2009, 22:25. Показов 2624. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ввести текст. Переставить местами слова в каждом предложении (первое с последним, второе с предпоследним и т.д.).
я Сделал так...но преподу непонравилась функция, уж очень говорит мудренно делай проще.
Посмотрите пожалуйста, исправьте "попроще"!
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
program Project2;
 
function Perestanovka(Pred:string):string;
var
MassWord:array[1..50] of string;
r,k:integer;
t,w1,w:string;
 
begin
{ for r:=1 to 50 do 
MassWord[r]:='';}
w:='';
w1:='';
k:=1;
t:='';
Pred:=Pred+' ';
for r:=1 to Length(Pred) do
if Pred[r]=' ' then
begin
{ if t<>'' then
begin
MassWord[k]:=t;
t:=''; 
k:=k+1;
end;
end}
else
t:=t+Pred[r];
{k:=k-1;
for r:=1 to (k div 2) do
begin
w1:=MassWord[r];
MassWord[r]:=MassWord[k-r+1];
MassWord[k-r+1]:=w1;
end; 
w:=MassWord[1];
for r:=2 to k do
w:=w+' '+MassWord[r];
w:=w+'.';
Perestanovka:=w;}
end;
Все что такими скобками {} , это преподу не понравилось он заствил мне исключить эти части 
 
var s,vrem,Predl:string;
i:integer;
 
begin
Write('Vvedi predlogenya=');
ReadLn(s);
s:=s+'.';
vrem:='';
Predl:='';
for i:=1 to Length(s) do
if (s[i]='.') then
begin
Predl:=Predl+Perestanovka(vrem);
vrem:='';
end
else
vrem:=vrem+s[i];
Write(Predl);
ReadLn;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.12.2009, 22:25
Ответы с готовыми решениями:

Переставить все слова в исходном тексте так, чтобы первое слово стало последним, второе-предпоследним и т.д.
переставить все слова в исходном тексте так, чтобы первое слово стало последним,...

В строке поменять слова первое с последним,второе с предпоследним и т.д.
Как в строке поменять слова первое с последним,второе с предпоследним и тд.?

Переставить слова, поменяв местами первое слово с последним, второе с предпоследним
Прошу помощи с задачей. Эмулятор i8086 Задана строка из буквенных символов, разделенных на слова...

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

19
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
26.12.2009, 18:32  [ТС] 2
Дорогие форумчане! Помогите!
0
4341 / 1473 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
26.12.2009, 18:35 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Не знаю, на сколько мой вариант проще, но он рабочий:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uses crt;
var count,i:integer;
    st,buf:string;
    slova:array[1..100]of string;
begin
 clrscr;
 readln(st);
 count:=1;
 repeat
  if (st[1]=' ') or (length(st)=0) then while st[1]=' ' do delete(st,1,1)
  else
  begin
   while (st[1]<>' ') and (length(st)>0) do
   begin
    buf:=buf+st[1];
    delete(st,1,1);
   end;
  slova[count]:=buf;
  buf:='';
  inc(count);
  end;
 until (length(st)=0) and (length(buf)=0);
 
 for i:=1 to (count-1) div 2 do
 begin
  buf:=slova[i];
  slova[i]:=slova[count-i];
  slova[count-1]:=buf;
 end;
 
 for i:=1 to count-1 do write(slova[i],' ');
 readln;
end.
1
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
26.12.2009, 19:20  [ТС] 4
а можно пожалуйста с обьяснением возможным?
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
26.12.2009, 20:28 5
to k1ry4
что-то не так.
Миниатюры
Переставить первое слово с последним, второе с предпоследним  
0
4341 / 1473 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
26.12.2009, 20:32 6
Строку 28 следует читать так:
Pascal
1
 slova[count-i]:=buf;
1
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
26.12.2009, 20:39 7
всё равно.
попробую сам
Миниатюры
Переставить первое слово с последним, второе с предпоследним  
0
4341 / 1473 / 680
Регистрация: 12.03.2009
Сообщений: 5,310
26.12.2009, 20:42 8
alexevt, вот с исправлением теперь всё отлично работает.
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
26.12.2009, 21:00 9
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
a,t:string;
b:array[1..100]of string;
k,i:integer;
begin
readln(a);
a:=' '+a;
repeat
k:=0;
for i:=1 to pos('.',a)-1 do
if a[i]=' 'then inc(k) else b[k]:=b[k]+a[i];
for i:=1 to k div 2 do
  begin
t:=b[i];
b[i]:=b[k-i+1];
b[k-i+1]:=t;
end;
for i:=1 to k do
begin
write(b[i]);
if i<>k then write(' ')else write('. ');
end;
for i:=1 to k do
b[i]:='';
delete(a,1,pos('.',a));
until pos('.',a)=0;
readln;
end.
ничего, ещё версия не помешает. я свою проверил
0
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
28.12.2009, 11:02  [ТС] 10
alexevt, почемурезультат не выводится?
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
28.12.2009, 11:26 11
Цитата Сообщение от qliqli Посмотреть сообщение
alexevt, почемурезультат не выводится?
А точку в конце каждого предлжения ставить не пробовали? именно об этом речь в условии.
0
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
28.12.2009, 19:43  [ТС] 12
alexevt, можете прокомментировать елси не сложно? )
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
28.12.2009, 21:04 13
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
a,t:string;
b:array[1..100]of string;
k,i:integer;
begin
readln(a); {ввели строку}
a:=' '+a;   {добавили пробел в начало, теперь все слова начинаются с пробела, легче работать}
repeat    {этот цикл мы повторяем для каждого предложения с точкой в конце}
k:=0;      {обнуляем счётчик слов} 
for i:=1 to pos('.',a)-1 do    {ищем слова в очередном предложении, когда увидим пробел -начало слова}
if a[i]=' 'then inc(k) else b[k]:=b[k]+a[i];  {и счётчик слов увеличится на 1, а если символ - не пробел, то добавим его к очередному слову}
for i:=1 to k div 2 do {проходим по массиву слов данного предложения до середины}
  begin         {меняем местами слова 1 - с последним  и т.д}
t:=b[i];
b[i]:=b[k-i+1];
b[k-i+1]:=t;
end;
for i:=1 to k do   {строим предложение из слов: добавляем после слова пробел, а после последнего- точку}
begin
write(b[i]);
if i<>k then write(' ')else write('. ');
end;
for i:=1 to k do      {удаляем из строки первое предложение и заново будем искать точку.}
b[i]:='';
delete(a,1,pos('.',a));
until pos('.',a)=0;      {всё повторяем пока в строке не кончатся точки (т.е. предложения)}
readln;
end.
1
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
29.12.2009, 09:32  [ТС] 14
а если необходимо ввести множество других различный знаков типа запятой, восклицательного идр.
и что при сортировке они оставались на своем месте...как это сделать?
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
29.12.2009, 10:41 15
тогда всю задачу надо решать заново, учитывая разделители. Это решение учитывает только пробелы и точку в конце
0
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
29.12.2009, 11:59  [ТС] 16
а решать как?! я не знаю как и куда добавить это множество знаков препинания чтоб они со словами не перемещались, а перемещались слова и решение было оптимально простым как у вас

Добавлено через 1 час 13 минут
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
mnkp:=['.','!','?'];     символы конца предложения
mnsp:=['_',',':',';']; символы между словами  
kb:=0
For i:= 1 to length (........
If not(...[i] in mnsp) then inc(kb)
else begin
inc (ksl);
......
if ..[i] in mnkp then.......
 
 
kb:=0
end.
вот как то так надо сказал препод, но необходимо ввести новую переменую которая бы считала колличество букв, и как правильно прописать саму програму, логику не понимаю(( в инете ничего похожего даже не нашел! ><
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
29.12.2009, 12:01 17
попробуйте обратиться к специалистам в личку, могу посоветовать Puporev, Inadequate, Давид, и др. если я стану переделывать, то вся простота уйдёт и будет что-то нагроможденное
0
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
29.12.2009, 12:10  [ТС] 18
попробуйте пожалуйста вот эту структуру использовать что я дал, главное чтоб работала, ну а слова менять обычно также как вы делали в предидущих. я понимаю как делать но связать немогу, в результате выдает кучу ошибок
0
Платежеспособный зверь
8835 / 4269 / 1621
Регистрация: 28.10.2009
Сообщений: 11,407
29.12.2009, 12:27 19
Сомневаюсь, что мне это удастся правильно сделать, поэтому советую обратиться к более компетентным участникам форума
0
0 / 0 / 1
Регистрация: 16.11.2009
Сообщений: 39
29.12.2009, 13:19  [ТС] 20
а сможете прописать так, сделал процедуру, которая копирует первое и последнее слово, затем заносит их во внутренний массив (можно в два - чтобы легче было выводить потом) и удаляет из исходного текста, и так до тех пор, пока длина исходника не станет равной нулю. А потом просто из массива(ов) выводить слова в нужном порядке в ту же переменную.

Добавлено через 48 минут
Форумчане помогите, это зачетная лаба!
Зачет получить уже надо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.12.2009, 13:19
Помогаю со студенческими работами здесь

Сформировать строку, «склеив» первое слово с последним, второе с предпоследним и т.д.
Нужно ввести строки с помощью функций gets или fgets, разбить строку на слова и выбрать нужные...

Дана строка. Поменять Первое слово с последним, второе с предпоследним и т.д
Не понимаю как сделать вообше.

Обратить строку так, чтобы первое слово стало последним, второе – предпоследним и т.д.
Обратить стоку так, чтобы первое слово стало последним, второе – предпоследним и т.д. #include...

Поменять слова в сообщении по принципу: первое с последним, второе с предпоследним и т.д.
На уроке преподаватель не объясняет как решать. Задачи берутся из &quot;Основы программирования на языке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru