IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Проверить программу, очень нужна помощь(Pascal ABC)
Татьяна12678
сообщение 23.05.2011 1:07
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


проверьте пожалуйста правильно ли сделана программа:вот условие Дана последовательность,содержащая от 1 до 30 слов,в каждом из которых от 1 до 5 строчных латинских букв,между соседними словами-запятая,за последними словами-точка.Напечатать все различные слова,встречающиеся в последовательности более двух раз.
var
a,b:string;
c:byte;
begin
readln(a);
repeat begin
c:=pos(',',a);
b:=copy(a,1,c-1);
delete(a,1,c);
if pos(b,a)<>0 then write(b,' ');end;
until c=0;
end.

Очень надеюсь на вашу помощь))заранее спасибо!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.05.2011 8:01
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Татьяна12678 @ 23.05.2011 2:07) *
проверьте пожалуйста правильно ли сделана программа:вот условие Дана последовательность,содержащая от 1 до 30 слов,в каждом из которых от 1 до 5 строчных латинских букв,между соседними словами-запятая,за последними словами-точка.Напечатать все различные слова,встречающиеся в последовательности более двух раз.
var
a,b:string;
c:byte;
begin
readln(a);
repeat begin
c:=pos(',',a);
b:=copy(a,1,c-1);
delete(a,1,c);
if pos(b,a)<>0 then write(b,' ');end;
until c=0;
end.

Очень надеюсь на вашу помощь))заранее спасибо!!!!

Не совсем. Надо выводить повторяющиеся слова только один раз, а у тебя они выводятся n-1 раз. Исправить можно как-то так:
var
a,b:string;
c:byte;
begin
readln(a);
repeat
c:=pos(',',a);
b:=copy(a,1,c-1);
delete(a,1,c);
if pos(b,a)<>0 then begin
write(b,' ');
while pos(b,a)>0 do delete(a,pos(b,a),Length(b)+1)
end
until c=0;
end.

И еще: "repeat .. until" работают как операторные скобки, то есть "begin .. end" к ним не нужны.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 23.05.2011 11:46
Сообщение #3


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Если и есть что хорошего в Pascal ABC - то это возможность использовать всю мощь .NET-а... Вот с использованием классов .NET задача решается так:

uses System.Collections.Generic;
var a : string;
begin
with new System.Collections.Generic.SortedList<string, integer> do
begin
readln(a);
foreach st:string in a.TrimEnd('.').Split(',') do
if ContainsKey(st) then
begin
Item[st] := Item[st] + 1;
if Item[st] = 3 then writeln(st);
end
else Add(st, 1);
end;
end.
smile.gif

P.S. Андрей, в задаче надо было
Цитата
Напечатать все различные слова,встречающиеся в последовательности более двух раз.
, твой код делает "более одного раза".
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.05.2011 22:55
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(IUnknown @ 23.05.2011 12:46) *
Если и есть что хорошего в Pascal ABC - то это возможность использовать всю мощь .NET-а...
Круто! Правда, скорее всего, автор темы, скорее всего, не имела в виду .net, но все равно круто.

Цитата
P.S. Андрей, в задаче надо было
, твой код делает "более одного раза".
Спасибо - да, проглядел.. Исправлю свой код чуть позже.
+1


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.05.2011 23:50
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Lapp @ 23.05.2011 23:55) *
Исправлю свой код чуть позже.

Вот:
var
a,b:string;
c:byte;
begin
readln(a);
repeat
c:=pos(',',a);
b:=copy(a,1,c-1);
delete(a,1,c);
if pos(b,a)<>0 then begin
delete(a,pos(b,a),Length(b)+1);
if pos(b,a)<>0 then begin
write(b,' ');
while pos(b,a)>0 do delete(a,pos(b,a),Length(b)+1)
end
end
until c=0;
end.



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 24.05.2011 0:06
Сообщение #6





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


Спасибо огромное,вы меня просто спасли!!!!!))))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 26.05.2011 0:34
Сообщение #7





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


А мне в курсовой надо написать вербальное описание этой программы,если вам не сложно можете помочь с описанием!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.05.2011 1:57
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Татьяна12678 @ 26.05.2011 1:34) *
А мне в курсовой надо написать вербальное описание этой программы,если вам не сложно можете помочь с описанием!!!!!
Таня!!!!! Мы все можем!!!!! Мы только не хотим спойлить твое образование!!!!! Можешь написать свой начальный вариант!!!!! А мы подправим!!!!!


а иначе ты ничему не научишься.. no1.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 26.05.2011 21:15
Сообщение #9





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


Окей я попробую и выложу тогда!!!!!!спасибо!!!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 26.05.2011 23:48
Сообщение #10


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Татьяна12678 @ 26.05.2011 22:15) *
Окей я попробую и выложу тогда!!!!!!спасибо!!!!!!

Хорошо давай!!!!!!пока не за что!!!!!

smile.gif

Ты только не затягивай, потому что может потребоваться не одна итерация. Успехов тебе )


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 31.05.2011 15:36
Сообщение #11





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


я пока не написала вербальное описание,но мне сказали что в программе нужен автоматический вывод на экран,когда жмешь на выполнение программы,чтобы не вводить вручную,у меня все никак не получается,вроде вывод на экран writeln,но автоматически не выводится(((
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 31.05.2011 16:17
Сообщение #12





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


а вот пока начало вербального описания:
Данная программа выводит с экрана все различные слова,встречающиеся в последовательности более двух раз.
Для этого в программе мы вводим переменные типа строковые,которые применяются при использовании текстовых данных в программе,состоит из набора последовательно расположенных символов char) и байтовые.....а дальше пока думаю как писать((((((((

Сообщение отредактировано: Татьяна12678 - 31.05.2011 19:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 1.06.2011 12:34
Сообщение #13


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Чтобы не вводить каждый раз самой можно, либо сделать в самом коде программы строку константой, либо сделать так,чтобы читалось из файла.Насчет вербального описания,дальше можно прям построчно идти и писать,что делалось в каждой строке.(До тех пор ,пока не дойдет до конча строки мы читаем слово,заведомо зная ,что между словами стоит разделитель ",",записываем слово в результирующую строку и тд)

Сообщение отредактировано: Krjuger - 1.06.2011 12:39
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Татьяна12678
сообщение 1.06.2011 18:03
Сообщение #14





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Татьяна

Репутация: -  0  +


а как здесь сделать строку константой?подскажите пожалуйста!!!!у меня что-то не выходит!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 2.06.2011 13:55
Сообщение #15


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


const Name: String[9]= 'IBM PC/AT';

Вот тебе строковая константа из 9 символов,если хочеш можеш после слова string убрать скобочки с цифрой и тогда у тебя под строку выделится 255 символов.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 2.06.2011 16:10
Сообщение #16


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
если хочеш можеш после слова string убрать скобочки с цифрой и тогда у тебя под строку выделится 255 символов.
Ага, щаззз. В PascalABC другие правила, это тебе не Турбо-Паскаль...

Кроме того, если описать строку так:
const a : string = 'тут сама строка';
, то ABC начнет возмущаться ниже по коду, при попытке удалить часть константной строки. Так что описывай, как описывала, просто инициализируй строку в начале программы:
var
a,b:string;
c:byte;
begin
a := 'one,two,two,three,four,two,five,one,one,two.';
repeat
...


Кстати, PascalABC имеет одну не очень хорошую черту, по крайней мере PascalABC.NET 1.7 сборка 452 (ну, вообще-то не одну, но эта - вообще какой-то кошмар) :
var a, b : string;
begin
a := ''; b := '';
writeln(pos(a, b));
end.
Напечатает не 0, а 1, поэтому программа, приведенная Lapp-ом в 5-ом посте может зависнуть, если будет запускаться на .NET-овской версии Pascal ABC. Как вариант исправления:
    if (c > 0) and (pos(b,a)<>0) then begin
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 2.06.2011 17:34
Сообщение #17


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Тьфу ты из головы вылетело,что ABC ,sorry wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 3.06.2011 5:19
Сообщение #18


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Татьяна12678 @ 31.05.2011 17:17) *
а вот пока начало вербального описания:
Данная программа выводит с экрана все различные слова,встречающиеся в последовательности более двух раз.
Для этого в программе мы вводим переменные типа строковые,которые применяются при использовании текстовых данных в программе,состоит из набора последовательно расположенных символов char...
, которые содержат инофрмацию обиспользуемом символе, который представляет собой начертательное изображение лингвистической единицы, состоящее из палочек, кружочков и крючочков, объединенных в единое целое (целый тип представляет недробные числа со знаком в диапазоне от -32768 до 32767, а дробные - это те, которые с точкой или с дробной чертой, блин, ну чо пристали, я вам инцэглупедия штоле???)

smile.gif smile.gif smile.gif
Не нужно так подробно.
Я буду описывать свой вариант (пост #5)
Данная программа выводит с экрана все различные слова,встречающиеся в последовательности более двух раз.
Для входных данных используется переменная a типа string (выражайся точнее, в Паскале НЕТ типа "строковой"). Для найденных слов используется переменная b, также типа string. Для нахождения очередного слова определяем положение разделителя "," (запятая). В переменную b копируем кусок строки a до разделителя, после чего удаляем этот кусок из a. Далее проверяем наличие слова b в оставшейся части строки a. Если слово найдено, удаляем его из a и производим повторную проверку. Если результат положительный - выводим слово на печать и удаляем все вхождения слова b в строку a. Далее повторяем все действия, начиная с нахождения очередного слова, до тех пор, пока переменная a не опустеет.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 4.06.2011 12:32
Сообщение #19


Гость






Спасибо большое за помощь,думаю теперь точно все сдам))))))))))
 К началу страницы 
+ Ответить 
Lapp
сообщение 5.06.2011 1:11
Сообщение #20


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Гость @ 4.06.2011 13:32) *
думаю теперь точно все сдам))))))))))
Вот это меня нисколько не волнует. Если скажешь, что теперь знаешь больше - мне действительно будет приятно..


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 13:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"