Страница 1 из 2

Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 12 дек 2007, 16:39
GordonF
Очень наужна помощь)пожалуйста,помогите в написании двух задач:
1) Написать процедуру (функцию) определения количества дней, прошедших от даты T1 до T2 (год не меняется).
Record year: 1000..3000; month: 1..12; day: 1..31;end;

2) Дано натуральное число N (типа longint). Составить программу вывода цифр, входящих в десятичную запись числа (в порядке возрастаня). Использовать множество.

Заранее огромное спасибо!надеюсь на вашу помощь)

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 13 дек 2007, 11:13
Хыиуду
1. Уже было, поищи по форуму.
2. Перевести число в строку, каждый символ строки перевести в число и внести во множество, потом пройтись в цикле от 0 до 9: если соответствующее число есть во множестве, вывести

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 13 дек 2007, 18:32
GordonF
Ну первую я сделал,а вот со второй..как-то я туплю..не могли бы вы код написать..хотя бы основные моменты)

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 14 дек 2007, 11:38
Хыиуду
s:=str(N);
for i:=1 to length(N) do
if not (s in my_set) then include(s,my_set);
for c:='0' to '9' do
if c in my_set then write(c);

.

Добавлено: 14 дек 2007, 12:51
BBB
Хыиуду писал(а):s:=str(N);
for i:=1 to length(N) do
if not (s in my_set) then include(s,my_set);
for c:='0' to '9' do
if c in my_set then write(c);

Ну, на Паскале это выглядит как-то вот так :)

Код: Выделить всё

var s : string;
      i, N : longint;
      my_set : set of char;
      c : char;
begin
 str(N, s);
 for i:=1 to length(S) do
    my_set := my_set + [ s[i]];  { проверять на то, что s[i] уже содержится }
                                              { в my_set необязательно }
 for c:='0' to '9' do
    if c in my_set then
       writeln(c);
end.

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 15 дек 2007, 00:43
Serge_Bliznykov
for i:=1 to length(N) do
может всё же Length(s) ???? :-)))))

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 17 дек 2007, 09:43
BBB
Serge_Bliznykov, Да, конечно :)

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 17 дек 2007, 11:00
Хыиуду
BBB, Serge Bliznykov, спасибо за исправления, но мой код - как раз на Паскале ;)

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 17 дек 2007, 12:45
BBB
Хыиуду писал(а):BBB, Serge Bliznykov, спасибо за исправления, но мой код - как раз на Паскале ;)
Хе, век живи, век учись :) /это я о себе/ Не знал (или напрочь забыл), что есть для работы с множествами процедуры Include / Exclude:

Declaration:
procedure Include(var S: set of T; I:T);


Хотя мой код так же верен. Можно писать и так, и эдак.
Правда, тот же Help Паскаля в описании Include примечает ( ;) ) :

The construct Include (S,I) corresponds to S := S + (I) but the Include
procedure generates more efficient code.

Re: Две задачи на про цедуры и финкции по Turbo Pascal (помогите,пожалуйста)

Добавлено: 18 дек 2007, 11:30
Хыиуду
Хотя вру, сам уже забыл, что подпрограмма str в Паскале - процедура, а не функция. Эх, ПХП зохавывает мозг ;)