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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Проверить программу, очень нужна помощь(Pascal ABC)
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


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

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

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


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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


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





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

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


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


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

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

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


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


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


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





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

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


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


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

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

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


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

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

smile.gif

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


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





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

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


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





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

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


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

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


Профи
****

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

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


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

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





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

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


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


Профи
****

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

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


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

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


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Профи
****

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

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


Тьфу ты из головы вылетело,что ABC ,sorry wub.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Гость






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


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

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

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


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


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

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

 





- Текстовая версия 29.04.2024 3:14
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name