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

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


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

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

Выпуск № 364
от 08.05.2007, 18:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 253, Экспертов: 72
В номере:Вопросов: 6, Ответов: 13


Вопрос № 85123: Уважаемые эксперты помоготе мне.Мне надо объяснить что такое означет и как работает эти две строчки.как можно подробнее.Мне надо к завтрашнему дню к 11 часам. X:=X+a[i];--- объясните подробнее Y:=Y+a[length(S)+1-i];---- как это формула работа...
Вопрос № 85124: Добрый день уважаемые эксперты. Снова я - глупый студент. Есть 2 такие задачки 1) Есть массив (произвольный). Сколько в нём разных чисел?(если все одинаковые, то ответ 1).{составить программу} 2) Дан произвольный массив. Найти наименьшую(по м...
Вопрос № 85161: здраствуйте уважаемые эксперты помогите решить задачку на паскале!! дано число n, написать программу, которыя определяет все пары взаимопростых чисел, вывести эти числа на экран парами, и написать количество пар.взаимопростые числа , это такие чи...
Вопрос № 85232: Добрый день! Помогите написать программу на Паскале: 1. Распечатать фамилии детей данного детского сада, которые родились в определенном месяце, указать их возраст и группу. 2. Дан текст, за которым следует точка. В алфавитном порядке нап...
Вопрос № 85243: Здравствуйте! Помогите мне, пожалуйста, решить задачу на языке Pascal. Задача такая: Распечатать числа фибаначчи: 1,1,2,3,5,8,13... и далее. ----- С одной стороны - всё понятно - здесь нужно использовать оператор либо While, л...
Вопрос № 85251: Пожалуйста помогите решить задачу. Дан текст, найти множество латинских букв....

Вопрос № 85.123
Уважаемые эксперты помоготе мне.Мне надо объяснить что такое означет и как работает эти две строчки.как можно подробнее.Мне надо к завтрашнему дню к 11 часам.
X:=X+a[i];--- объясните подробнее
Y:=Y+a[length(S)+1-i];---- как это формула работает объясните пожалуста
задача вся ниже

uses crt;
var X,Y,code: integer;
S: string;
i:integer;
a:array [1..100] of integer; //ну не для любого.. а только короче 100 знаков...
begin
clrscr;
writeln ('S');
readln(S);
for i:=1 to length(S) do
val(copy (S,i,1),a[i],code);
for i:=1 to ( length(S) div 2) do
begin
X:=X+a[i];
Y:=Y+a[length(S)+1-i];
end;
if X=Y then writeln ('счастливое число') else writeln ('не счастливое)ж
readln;
end.
Отправлен: 02.05.2007, 18:39
Вопрос задал: А.Е.В (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зенченко Константин Николаевич
Здравствуйте, А.Е.В!

Функция length(S) возвращает длину введенной строки S, length(S)+1-i позволяет обращатся ко второй половине массива А.
Обе команды работают одинаково:
старое значение переменной X(Y) суммируется с i-тым елементом массива a и записывается как новое значение переменной X(Y), разница между ними втом, что в случае с X берутся элементы массива первой половины массива, в случае с Y берутся элементы массива второй половины.
к примеру: Вы ввели строку из 8 символов X будет суммироватся последовательно с
a[1],a[2],a[3] и a[4], Y будет суммироватся последовательно с a[8],a[7],a[6] и a[5].
Удачи!
---------
И только наступив на грабли мы преобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 02.05.2007, 19:18
Оценка за ответ: 3


Вопрос № 85.124
Добрый день уважаемые эксперты. Снова я - глупый студент. Есть 2 такие задачки
1) Есть массив (произвольный). Сколько в нём разных чисел?(если все одинаковые, то ответ 1).{составить программу}
2) Дан произвольный массив. Найти наименьшую(по модулю) разность между элементами массива(если все элементы массива равны, то ответ 0).{составить программу}
Отправлен: 02.05.2007, 18:49
Вопрос задал: Peeny (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ерёмин Андрей
Здравствуйте, Peeny!
Один из вариантов решения задачи №1 см. в приложении. Неудобство в том, что в Turbo Pascal нет динамических массивов, поэтому приходится резервировать массив с расчётом на задачу, что количества элементов хватило. Алгоритм здесь такой: после ввода каждого числа записываем его в массив. Затем просматриваем массив таким способом: каждый элемент сравниваем со всеми, которые идут до него. Если хотя бы одно совпадение найдено, то число повторяется. Желаю удачи!

Приложение:

---------
Нет правила без исключений. Правило без исключений - исключение из правил.

Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Помощь, советы, обмен опытом.
ICQ: 286837644
----
Ответ отправлен: 02.05.2007, 19:18
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо!!!

Отвечает: Denisss

Здравствуйте, Peeny!

Задачу №1 (Листинг 1 приложения) решил по такому алгоритму (я решил попроще, чем в предыдущем ответе):
1. Принимаем, что количество разных чисел = количеству элементов массива.
2. Выбираем один элемент массива
3. Ищем такой же один элемент массива, но стоящий после выбранного
4. Если элемент найден, то уменьшаем количество разных чисел на 1. Поиск прекращаем.
5. Выбираем следующий элемент массива
6. Если элемент массива не последний, переходим к п.3
7. Вывод результатов.

Задачу №2 (Листинг 2 приложения) решил по такому алгоритму:
1. Принимаем, что минимальная разность равна 1000 (т.е. больше, чем любое значение в массиве)
2. Выбираем первый элемент массива
3. Ищем модуль разности этого элемента массива с каждым последующим элементом, сравниваем с минимальным и, если меньше, то принимаем значение минимальной разности равным найденному.
4. Выбираем следующий элемент массива
5. Если массив не закончился, переходим к п.3.

Ввод массива можно взять и из примера, приведенного в предыдущем ответе.

Решение постарался максимально упростить. Использовал минимальное число дополнительных переменных.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 02.05.2007, 20:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо!!!

Отвечает: Е.В.Гений
Здравствуйте, Peeny!
у меня такой вариант, сначала сортируете массив, потом по циклу сравниваете данное i число с i-1 елси больше то счетчик увеличиваете
Ответ отправил: Е.В.Гений (статус: 3-ий класс)
Ответ отправлен: 03.05.2007, 14:46


Вопрос № 85.161
здраствуйте уважаемые эксперты помогите решить задачку на паскале!!
дано число n, написать программу, которыя определяет все пары взаимопростых чисел, вывести эти числа на экран парами, и написать количество пар.взаимопростые числа , это такие числа у которых наибольший общий делитель равен 1.
т.е. если n=4 то это 1:1 1:2 1:3 1:4 2:3 3:4 нужно действовать так:
1. пусть i равно от 1 до n находим наибольший общий делитель для i
и n. выводим те пары чисел, у которых наибольший общий делитель равен 1
2. увеличиваем i на1 т.е. i:=i+1
для нахождения наибольшиего общего делителяиспользуем алгоритм евклида например если даны числа a и b и найти их НОД в паскале
program reo;
var a, b, c : integer;
begin
read (a,b);
c:=b;
b:=a;
a:=c;
repeat
c:=a mod b;
a:=b;
b:=c;
until b=0;
writeln (a);
end.
причем нахождение НОД должно быть описанно в описательной части программы т. е. описанна как function
очччень прошу помогите!!!
заранее спасибо!!!!!!!!!!!
Отправлен: 02.05.2007, 22:58
Вопрос задал: Fenechkaa (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Gh0stik
Здравствуйте, Fenechkaa!

Вот исходный код:

program q85161;
function nod(x,y:integer):integer; {функция нахождения НОД}
var r:integer;
begin
repeat
r:=x mod y;
x:=y; y:=r;
until y=0;
nod:=x;
end;
{ОСНОВНАЯ ПРОГРАММА}
var n,i,j,kol:integer;
begin
read(n); kol:=0;
for i:=1 to n do
for j:=1 to n do
if (nod(i,j)=1) and (i<=j) then
begin writeln(i,':',j); inc(kol); end; {вывод на экран очередной пары}
writeln('count=',kol);{выводим общее количество пар}
readln;
end.


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 02.05.2007, 23:40
Оценка за ответ: 5


Вопрос № 85.232
Добрый день!
Помогите написать программу на Паскале:
1. Распечатать фамилии детей данного детского сада, которые родились в определенном месяце, указать их возраст и группу.
2. Дан текст, за которым следует точка. В алфавитном порядке напечатать все строчные русские буквы (а,е,и,о,у,ы,э,ю,я), входящие в этот текст.
Заранее спасибо.
yurginez@bk.ru
Отправлен: 03.05.2007, 11:32
Вопрос задал: Ершов Сергей Николаевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Е.В.Гений
Здравствуйте, Ершов Сергей Николаевич!
const c: array[1..9] of char = ('а','е','и','о','у','ы','э','ю','я'),
var m: set of char; - создаете переменную множество куда будете кидать все буквы
s: string - здесь храниться текст

for i:=1 to length(s) do m:=m+[s[i]]; - загнали буквы
for i:=1 to 9 do if c[i] in m then write(c[i]); - если есть буква то выводим
....

Ответ отправил: Е.В.Гений (статус: 3-ий класс)
Ответ отправлен: 03.05.2007, 15:11
Оценка за ответ: 4

Отвечает: Verena
Здравствуйте, Ершов Сергей Николаевич!

По первой задаче: неясно, как хранятся записи, откуда вводятся... Могу только предполагать, что код может выглядеть как-то так:

type deti = record {описываем тип запись}
fam: string; {фамилия}
age: integer; {возраст}
group: integer; {группа}
month: integer; {месяц}
end;
var a: array [1..7] of deti; {массив записей}
i, n, m: integer; {счётчик, количество записей в массиве, нужный месяц}
begin
{какой-то ввод - с клавиатуры или из файла}
read (m); {считываем месяц}
for i:=1 to n do
if a[i].month=m then {если месяц совпадает - выводим остальные данные}
writeln (a[i].fam, ' ', a[i].age, ' ', a[i].group);
end.

Хотя, как правило, подобные записи либо считывают прямо из типизированного файла по одной, либо хранятся в виде списка.
По второй задаче: не вижу необходимости создавать массив типа char и потом формировать множество. Можно обойтись и одним массивом. Потом, не ясно, какую роль играет точка, откуда берётся "текст" и какого он размера.

const m: array [1..9] of char = ['а','е','и','о','у','ы','э','ю','я'];
var s: string; {тут надо учитывать, что хранить в переменной типа string мы можем только текст (строку) до 255 символов}
i: integer;
begin
readln (s); {какой-то ввод, предположим, с клавиатуры}
for i:=1 to 9 do
for j:=1 to length (s) do
if s[j]=m[i] then write (s[j]); {если текущий элемент - нужная по алфавиту буква - выводим}
end.
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: 10-ый класс)
Ответ отправлен: 03.05.2007, 23:46
Оценка за ответ: 5


Вопрос № 85.243
Здравствуйте!
Помогите мне, пожалуйста, решить задачу на языке Pascal.
Задача такая:
Распечатать числа фибаначчи:
1,1,2,3,5,8,13... и далее.
-----
С одной стороны - всё понятно - здесь нужно использовать оператор либо While, либо Repeat - Until.
Но непонятно одно: тут не просто идёт прогрессия, т.е. 1,2 и т.д., а потом числа начинают прибавляться ещё большие, например, 1,1,2,3,5,8,13... - тут сначала идёт прибавление по 1, потом по 2, по 3, по 5 и т.д.
Помогите мне, пожалуйста, решить эту задачу!
Очень надеюсь на Вашу помощь!
Отправлен: 03.05.2007, 12:49
Вопрос задал: Красильников И.П. (статус: 10-ый класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 10)

Отвечает: fsl
Ответ удалён по следующей причине: не имеет смысла. Помещён в форум.
(Ерёмин А.)

---------
Ну, Вы спросили!
Ответ отправил: fsl (статус: Студент)
Ответ отправлен: 03.05.2007, 13:14
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь!
Как я понимаю, здесь уже всё написано, т.е. для того, чтобы дописать программу, осталось написать раздел описания и конец. Так ведь?

Отвечает: Устинов С.Е.
Здравствуйте, Красильников И.П.!

Ну, до бесконечности выводить, я считаю нет смысла, поэтому ограничим последовательность каким-то конечным числом (хотя, насколько я знаю, эта задача в основном ставится так "Выведите на экран первые N (N > 2) чисел Фибоначчи").

Код с ограничением максимального числа (максимальное - следующее за max):

const max=10000;
var t1,t2,t:integer;
begin
t1:=1;
t2:=1;
write(t1,' ',t2);
repeat
t:=t1+t2;
t1:=t2;
t2:=t;
write(' ',t);
until t>max;
readln;
end.


Выводим первые N (N > 2) чисел Фибоначчи:

const N=15;
var t1,t2,t,i:integer;
begin
t1:=1;
t2:=1;
write(t1,' ',t2);
for i:=3 to N do
begin
t:=t1+t2;
t1:=t2;
t2:=t;
write(' ',t);
end;
readln;
end.


Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Практикант)
Ответ отправлен: 03.05.2007, 13:25
Оценка за ответ: 5
Комментарий оценки:
Хехе, все программы, которые мне были предложены, работают по-разному, везде выдаются разные числа. Я новичок в этом деле пока, я не могу понять, какая из них правильная.... :(
Благодарю!

Отвечает: Зенченко Константин Николаевич
Здравствуйте, Красильников И.П.!
Числа Фибоначчи это прогресия где следующее число равно сумме двух предидущих.
A0=0
A1=1
Ai+2=Ai+1+Ai и i>0
в приложении выводится первые 45 чисел

(edited by Ерёмин А.)
(next edited by lupus campestris)

Приложение:

---------
И только наступив на грабли мы преобретаем драгоценный опыт!

Ответ отправил: Зенченко Константин Николаевич (статус: Студент)
Ответ отправлен: 03.05.2007, 13:29
Оценка за ответ: 5
Комментарий оценки:
Хехе, все программы, которые мне были предложены, работают по-разному, везде выдаются разные числа. Я новичок в этом деле пока, я не могу понять, какая из них правильная.... :(
Спасибо за помощь!

Отвечает: Denisss

Здравствуйте, Красильников И.П.!

См. пример с комментариями в приложении.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 03.05.2007, 13:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 85.251
Пожалуйста помогите решить задачу.
Дан текст, найти множество латинских букв.
Отправлен: 03.05.2007, 13:25
Вопрос задал: Zevs (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Сарумян
Здравствуйте, Zevs!
Начало пропущу...

T - переменная типа string, содержащая в себе строку.
d - переменная типа integer, содержит длину строку.
i - вспомогательная переменная типа integer.
s - счетчик кол-ва латинских букв.
...
d:= length(T);
s:=0;
for i:= 1 to d do
If ((copy(T, i, 1) >= 'A') and (copy(T, i, 1) <= 'Z')) or
((copy(T, i, 1) >= 'a') and (copy(T, i, 1) <= 'z')) then Inc(s);
.....
Далее можно или вывести на экран полученное число или работать с ним дальше.
---------
Пришел, увидел, развернулся и ушел...
Ответ отправил: Сарумян (статус: 5-ый класс)
Ответ отправлен: 03.05.2007, 13:44
Оценка за ответ: 3
Комментарий оценки:
эта оценка обосновывается тем что в вашем ответе были найденны неточности и ошибки.

Отвечает: Denisss
Здравствуйте, Zevs!

В Паскале множество называется Set. Множество букв - Set of Char.

В примере (Листинг 1), приведенном в приложении, производится заполнение множества абсолютно всеми буквами из текста, но вывод уже делается исходя из условия, что во множестве должны быть только латинские буквы.

В примере (Листинг 2) приведен пример заполнения множества только латинскими буквами. В консоль, в обоих вариантах выводиться будет одно и тоже.

Пока писал Листинг 2, появилась еще и третья идея реализации вопроса (см. Листинг 3).

Идея листинга 3 заключается в том, что при формировании множества сначала проверяется наличие буквы в этом множестве. Если она отсутствует, то добавляется в множество и выводится на экран.

PS
Надеюсь, я не надоел своими листингами?! ;-)
Не забудьте, что все программы в приложении начинаются не со слов Листинг, а со слов program, и заканчиваются строкой end c точкой.

Удачи!

Приложение:

Ответ отправил: Denisss (статус: Профессионал)
Россия, Москва
WWW: Хлама много, по сути ничего...
ICQ: 281599577
----
Ответ отправлен: 03.05.2007, 14:11
Оценка за ответ: 5
Комментарий оценки:
Спасибо за такой полный ответ, с 3 Листингами.


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 (beta) от 02.05.2007
Яндекс Rambler's Top100

В избранное