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

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

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

 
 Ответить  Открыть новую тему 
> Строки и множества, есть наработки чуть чуть подправить программу
сообщение
Сообщение #1


Новичок
*

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

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


 Program Lab9;
type
dnined= set of (pn,vt,sr,cht,pt,sb,vs);
var
days:dnined;
l,n:byte;
begin
writeln('Множество рабочих дней');
writeln('');
days:=[];
randomize;
l:=0;
for l:=1 to 6 do
begin
n:=random(6);
{case n of}
days:=days+[dnined(n)];
end;
if (pn in days) then writeln('pn');
if (vt in days) then writeln('vt');
if (sr in days) then writeln('sr');
if (cht in days) then writeln('cht');
if (pt in days) then writeln('pt');
if (sb in days) then writeln('sb');
if (vs in days) then writeln('vs');
readln;
end.
.

помогите плз)

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


Пионер
**

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

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


Цитата(chad1s @ 20.12.2010 20:30) *

помогите плз)

с чем же интересно помочь? какое задание? тут экстрасенсов нет


--------------------
From ZERO to HERO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Freedom @ 20.12.2010 21:00) *

с чем же интересно помочь? какое задание? тут экстрасенсов нет

пардон,
задание вот: случайным образом заполнить множество рабочих дней в цикле из 6 повторений, вывести элементы множества
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата(chad1s @ 20.12.2010 20:30) *

 Program Lab9;
type
dnined= set of (pn,vt,sr,cht,pt,sb,vs);
var
days:dnined;
l,n:byte;
begin
writeln('Множество рабочих дней');
writeln('');
days:=[];
randomize;
l:=0;
for l:=1 to 6 do
begin
n:=random(6);
{case n of}
days:=days+[dnined(n)];
end;
if (pn in days) then writeln('pn');
if (vt in days) then writeln('vt');
if (sr in days) then writeln('sr');
if (cht in days) then writeln('cht');
if (pt in days) then writeln('pt');
if (sb in days) then writeln('sb');
if (vs in days) then writeln('vs');
readln;
end.
.

помогите плз)


Ну вроде нормально всё, а что не так?
Ну можно убрать повторяющийся код:


const DayNames: array [dnined] of string = (
'понедельник',
'вторник',
'среда',
'четверг',
'пятница',
'суббота',
'воскресенье'
);
...
var
d: dnined;
...
for d := Low(dnined) to High(dnined) do if d in days then WriteLn(DayNames[d]);



 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


да я что то не разберусь там с
randomize;
l:=0;
for l:=1 to 6 do
begin
n:=random(6);
{case n of}
days:=days+[dnined(n)];
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Злостный любитель
*****

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

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


В каком смысле?
Надо, чтобы 6 элементов были разные, а у тебя могут быть одинаковые? Тебе это не нравится?
Ну тогда смотри.
У тебя из 7 дней надо 6 пометить выбранными, а 1 невыбранным.
Поэтому пишем

Sel := 6;
NoSel := 1;


Теперь проходим все дни и отмечаем каждый с некоторой вероятностью:

for d := Low(dnined) to High(dnined) do begin
if random(Sel+NoSel) < Sel then begin
include(days, d);
end else begin
end;
end;


Теперь после выбора корректируем вероятности - меняем число оставшихся отмеченных и неотмеченных дней:


for d := Low(dnined) to High(dnined) do begin
if random(Sel+NoSel) < Sel then begin
Include(days, d);
Dec(Sel);
// один выбрали, учитываем это
end else begin
Dec(NoSel);
end;
end;



Сообщение отредактировано: TarasBer -


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


Гость






Цитата
Надо, чтобы 6 элементов были разные
В таком случае циклы для генерации Days вообще не нужны:
type
enum = (pn,vt,sr,cht,pt,sb,vs);
dnined= set of enum;
const
DayNames: array[enum] of string =
(
'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'
);

var
Days: dnined;
E: Enum;
begin
Randomize;
Days := [Low(enum) .. High(enum)];
Exclude(Days, Enum(Random(Ord(High(Enum))))); { Просто убираем один - случайный }

for E := Low(enum) to High(enum) do
begin
if E in Days then writeln(DayNames[E]);
end;
readln;
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Злостный любитель
*****

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

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


> Просто убираем один - случайный

Ну для 6 дней так лучше.
А потом препод внезапно попросит сделать не 6 разных дней, а 4. И "просто убрать 3 случайных" окажется задачей, эквивалентной "выбрать 4 случайных".


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


Новичок
*

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

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


Цитата(chad1s @ 20.12.2010 23:49) *

да я что то не разберусь там с
randomize;
l:=0;
for l:=1 to 6 do
begin
n:=random(6);
{case n of}
days:=days+[dnined(n)];
end;


он там ошибку выдает "Lab9.pas(17) : Невозможно явно преобразовать тип byte к типу dnined"
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Злостный любитель
*****

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

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


Там вольво уже ответил, что сначала надо задать тип
WeekDay = (pn,vt,sr,cht,pt,sb,vs);
А потом уже
dnined = set of WeekDay;
А приводить, понятно, не к dnined уже, а к WeekDay


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


Новичок
*

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

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


Цитата(TarasBer @ 21.12.2010 16:59) *

Там вольво уже ответил, что сначала надо задать тип
WeekDay = (pn,vt,sr,cht,pt,sb,vs);
А потом уже
dnined = set of WeekDay;
А приводить, понятно, не к dnined уже, а к WeekDay


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

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

 





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