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

GordonF
Сообщения: 3
Зарегистрирован: 12 дек 2007, 16:22

12 дек 2007, 16:39

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

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

Заранее огромное спасибо!надеюсь на вашу помощь)
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

13 дек 2007, 11:13

1. Уже было, поищи по форуму.
2. Перевести число в строку, каждый символ строки перевести в число и внести во множество, потом пройтись в цикле от 0 до 9: если соответствующее число есть во множестве, вывести
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
GordonF
Сообщения: 3
Зарегистрирован: 12 дек 2007, 16:22

13 дек 2007, 18:32

Ну первую я сделал,а вот со второй..как-то я туплю..не могли бы вы код написать..хотя бы основные моменты)
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

14 дек 2007, 12:51

Хыиуду писал(а):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.
Serge_Bliznykov
Сообщения: 366
Зарегистрирован: 31 авг 2007, 03:06

15 дек 2007, 00:43

for i:=1 to length(N) do
может всё же Length(s) ???? :-)))))
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

17 дек 2007, 09:43

Serge_Bliznykov, Да, конечно :)
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

17 дек 2007, 11:00

BBB, Serge Bliznykov, спасибо за исправления, но мой код - как раз на Паскале ;)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

17 дек 2007, 12:45

Хыиуду писал(а):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.
Хыиуду
Сообщения: 2388
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

18 дек 2007, 11:30

Хотя вру, сам уже забыл, что подпрограмма str в Паскале - процедура, а не функция. Эх, ПХП зохавывает мозг ;)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить