Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 260
от 27.11.2006, 16:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 223, Экспертов: 53
В номере:Вопросов: 3, Ответов: 4


Вопрос № 63610: Здравствуйте, как мне считать в масив числа, если они разделяются пробелами, дефизами и двоеточами? Мне нужно считать только числа в массив. ..
Вопрос № 63673: Здравствуйте, уважаемые эксперты!!! Не поможите ли Вы мне вот стакой задачкой? В двузначном числе на каждом шаге разрешается заменить любую цифру этого числа на остаток от деления на 10 сумму его цифр. По 2 заданным числам можно ли получить о...
Вопрос № 63702: Помогите решить задачу. При решениии выдается сообщение 'type mismatch'. Текст задачи: Составьте программу, проверяющую является ли последовательность из 10 чисел вводимых с клавиатуры : 1)арифметической; 2)геометрической. Когда я реш...

Вопрос № 63.610
Здравствуйте, как мне считать в масив числа, если они разделяются пробелами, дефизами и двоеточами? Мне нужно считать только числа в массив.
Отправлен: 21.11.2006, 21:55
Вопрос задал: ataman (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Verena
Здравствуйте, ataman!
Для этого обычно используют множества:
Const razd: set of char = [' ','-',':']
Можно задавать множество не как константу, а как тип, и присваивать значение переменной программно.
Считываете строку из файла или с экрана в string и выделяете числа:
s1=''; k:=0;
for i:=1 to length(str) do
begin
if str[i] in razd then {проверяем, есть ли i-й символ в множестве разделителей}
begin
inc (k);
val (s1, a[k], cod); {переводим строку в число и записываем в массив}
s1='';
continue;
end;
s1:=s1+str[i];
end;
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 3-ий класс)
Ответ отправлен: 22.11.2006, 00:42


Вопрос № 63.673
Здравствуйте, уважаемые эксперты!!!
Не поможите ли Вы мне вот стакой задачкой?
В двузначном числе на каждом шаге разрешается заменить любую цифру этого числа на остаток от деления на 10 сумму его цифр. По 2 заданным числам можно ли получить одно число из другого и за какое наименьшее количество шагов.
Например, из числа 47 на 1 шаге можно получить 17 либо 41 и т. д.
Заранее спасибо. Денис
Отправлен: 22.11.2006, 08:58
Вопрос задал: Гусев Денис (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сухомлин Кирилл Владимирович
Здравствуйте, Гусев Денис!
Вам поможет динамическое программирование/рекурсия.
Надо перебирать числа, до которых мы можем добраться таким образом. По-хорошему, это надо делать через стек/очередь, сохраняя в них числа, до которых мы уже добрались. Но я вам приведу пример с рекурсией.
Назовем расстоянием между числами - кол-во ходов, за кторое можно добраться указанными в условии преобразованиями от одного до другого. В массив мы будем сохранять расстояния от числа n1.
Код с комментариями в приложении.

PS: При преобразовании чисел у вас может получиться остаток от деления = 0. И если записать нуль в старший разряд, то получится уже не двухзначное число. Как решить эту проблему, я оставляю подумать вам.

Приложение:

---------
Не узнаешь - не попробуешь.

Ответ отправил: Сухомлин Кирилл Владимирович (статус: Практикант)
Ответ отправлен: 22.11.2006, 13:15


Вопрос № 63.702
Помогите решить задачу. При решениии выдается сообщение 'type mismatch'. Текст задачи:
Составьте программу, проверяющую является ли последовательность из 10 чисел вводимых с клавиатуры :
1)арифметической;
2)геометрической.
Когда я решал то разбил на 2 части. В первой проверял арифметическую прогрессию.Листинг:
program labrab4B;
const n=10;
var
A:array[1..10] of real;
s1,s2,i:byte;
begin
for i:=1 to 10 do
begin
writeln('BBegute 10 chisel');
readln(A[i]);
s1:=0;
for i:=1 to 10 do s1:=s1+a[i];
for i:=1 to n do s2:=(a[1]+a[n])*n/2;
writeln(s2);
if s1=s2 then
writeln('arifmeticheskay progressia')
else
writeln('ne arifmeticheskay progresia');
end.
Пожайлуста помогите.Прислать на kutcherkain@yandex.ru
Отправлен: 22.11.2006, 12:37
Вопрос задал: Das_Kain (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Verena
Здравствуйте, Das_Kain!
Эта ошибка говорит о несочетаемости типов real и byte, причём по вашей задаче, даже если задать массив byte, то переменная s2 должна быть real, т.к. в неё присваиваеися значение, полученное делением. И ещё в первом цикле пропущен end, но это уже другая ошибка.
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 3-ий класс)
Ответ отправлен: 22.11.2006, 14:32
Оценка за ответ: 3

Отвечает: Юрий Викторович
Здравствуйте, Das_Kain!
for i:=1 to 10 do s1:=s1+a[i]; S1 - byte ему нельзя присваивать значение типа REAl
перед s1:=0 нужен end для предыдущего цикла.
Зачем введена константа n?
Ответ отправил: Юрий Викторович (статус: 1-ый класс)
Ответ отправлен: 22.11.2006, 18:04


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное