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

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


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

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

Выпуск № 423
от 16.07.2007, 18:05

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


Вопрос № 94685: Пожалуйста,помогите решить задачи : 1. Даны два одномерных целочисленных массива А и В. Составить алгоритм, определяющий, можно ли путем перестановки элементов массива А получить массив В (алгоритмы сортировки использовать нельзя). 2. Дан о...
Вопрос № 94752: Пожалуйста,помогите решить три задачи: 1. Дан одномерный массив целых чисел. Найти количество чисел среди элементов массива, встречавшихся ровно 1 раз. 2. Дан одномерный массив. Поменять в нем порядок четных элементов на обратный. Приме...
Вопрос № 94754: Help me, please!!! Вот задачки: 1. Известны данные о вместимости (в мегабайтах) и стоимости (в рублях) каждого из 22 типов жестких магнитных дисков (винчестеров). Напечатать наибольшую вместимость винчестеров, стоимость которых не превышает s руб...
Вопрос № 94781: Уважаемые эксперты!! Проверьте, пожалуйста моё решение 2х задач(в приложении)… Что в них не так? Не могу понять, где ошибки допустила. А условия задач вот: 1. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся ф...

Вопрос № 94.685
Пожалуйста,помогите решить задачи :
1. Даны два одномерных целочисленных массива А и В. Составить алгоритм, определяющий, можно ли путем перестановки элементов массива А получить массив В (алгоритмы сортировки использовать нельзя).
2. Дан одномерный массив целых чисел в диапазоне от –100 до 100, в котором есть повторяющиеся элементы. Составить алгоритм, определяющий, какой элемент встречается в массиве наиболее часто (алгоритмы сортировки использовать не рекомендуется, вводить дополнительные массивы не разрешается).

Заранее спасибо! Swallow.
Отправлен: 10.07.2007, 23:58
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

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

Вот привожу решение на вторую часть вопроса.

const n=10; {количество элементов в массиве}
var x:array [1..n] of integer;
mx,mk,k,i,j:integer;
begin
randomize;
for i:=1 to n do
begin
x[i]:=random(100)-random(100); {генерируем чисела из диапазона от –100 до 100}
write(x[i]:5);
end;
mx:=x[1]; k:=0; mk:=1;
for i:=1 to n-1 do
begin
for j:=2 to n do
if x[i]=x[j] then
begin
inc(k);
if k > mk then begin mx:=x[i];mk:=k;end;
end;
k:=0;
end;
writeln;
writeln('?=',mx, 'count=',mk); {выводим элемент и сколько раз он встречается}
end.


Единственное, что хотелось бы уточнить, так это, то что программа будет выводить "первое" число по порядку, которое встречается максимальное число раз. (ведь таких чисел может быть и несколько)
Для того, чтобы вывести "последние" число по порядку достаточно изменить условие:
if k > mk then begin mx:=x[i];mk:=k;end;
на
if k >= mk then begin mx:=x[i];mk:=k;end;

Good Luck!!!

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

Отвечает: _killhunter_
Здравствуйте, Ласточка!

Привожу решение 1-ой части вопроса.
Алгоритм простой. Создаем дополнительный масссив F той-же длинны с флагами.
Идем последовательно по массиву А и для каждого элемента ищем такой-же в массиве В, причем если находим на i-том месте, то делаем флаг F[i] := false и элемент B[i] больше в поиске не участвует.

Приложение:

Ответ отправил: _killhunter_ (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 11:15
Оценка за ответ: 5
Комментарий оценки:
Спасибо огромное за помощь!Безмерно благодарна.

Отвечает: mvp
Здравствуйте, Ласточка!
Ну, раз за дополнительные массивы по первому заданию ставят 5 :), и мини-форум не читают, то первое задание решается гораздо проще: найдите сумму разности эл-ов массивов. Если она равна 0, то можно:

var A, B : Array[1..n] of ...;

//инициализируем как-то массивы;

sum := 0;
for _:=1 to n do sum := sum + A[_] - B[_] ;
if sum = 0 then {
можно :)
}
---------
Моя совесть чиста - не бывшая в употреблении
Ответ отправил: mvp (статус: Студент)
Ответ отправлен: 11.07.2007, 23:16
Оценка за ответ: 5
Комментарий оценки:
Спасибо, mvp! Да у меня просто рука не поднимется поставить оценку ниже пятёрки, человеку, который не пожалел своего драгоценного времени и хоть как-то, в силу своих возможностей, ответил на мой вопрос. Такой уж я человечек.


Вопрос № 94.752
Пожалуйста,помогите решить три задачи:
1. Дан одномерный массив целых чисел. Найти количество чисел среди элементов массива, встречавшихся ровно 1 раз.
2. Дан одномерный массив. Поменять в нем порядок четных элементов на обратный.
Пример:
исходный массив – 2 5 3 7 4 6 4 5 9
преобразованный массив – 4 5 3 7 6 4 2 5 9
3. Дан одномерный массив целых чисел. Определить, есть ли в массиве последовательность идущих подряд элементов, сумма которых равна заданному числу.

Если это возможно, то в наиболее упрощённом варианте и с пояснениями. Заранее большое спасибо. Swallow.
Отправлен: 11.07.2007, 12:28
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

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

1) Думаю что данная задача в особых комментариях не нуждается:
const n=10; {количество элементов в массиве}
var x:array [1..n] of integer;
kol,k,i,j:integer;
begin
randomize;
for i:=1 to n do
begin
x[i]:=random(100)-random(100); {генерируем чисела из диапазона от –100 до 100}
write(x[i]:5);
end;
k:=0; kol:=0;
for i:=1 to n do
begin
for j:=1 to n do
if x[i]=x[j] then inc(k);
if k=1 then inc(kol);
k:=0;
end;
writeln;
writeln('count=',kol); {выводим количество "одиноких" элементов}
end.


2) Идея в том, что мы двигаемся в массиве с двух сторон навстречу и ищем четные элементы, как только их встречаем сразу же переставляем местами. Заканчиваем поиск и перестановку как только i > j.
const n=9; {количество элементов в массиве}
var x:array [1..n] of integer;
k,i,j:integer;
begin
for i:=1 to n do
begin
write('x[',i,']='); readln(x[i]); {вводим элементы массива с клавиатуры}
end;
for i:=1 to n do write(x[i]:5);
writeln;
i:=1; j:=n;
while i < j do
begin
while odd(x[i]) do inc(i); {находим индекс четного элемента начиная слева}
while odd(x[j]) do dec(j); {находим индекс четного элемента начиная справа}
k:=x[i];
x[i]:=x[j]; {переставляем их местами}
x[j]:=k;
inc(i); dec(j);
end;

for i:=1 to n do write(x[i]:5); {выводим полученный результат}
readln;
end.


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

Отвечает: Louken
Здравствуйте, Ласточка!

Решение первой и третьей задачи в приложении:

Приложение:

Ответ отправил: Louken (статус: 10-ый класс)
Ответ отправлен: 11.07.2007, 13:54
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо за помощь! В особенности, за развёрнутые комметрарии к решению. Это как раз то, что я хотела.

Отвечает: Дмитрий С.
Здравствуйте, Ласточка!
1.
var MS: array [1..k] of integer; // k <= 64;
count, i: integer;
mn: set of byte;

begin
// заполняем массив MS

count := 0; mn := [];
for i:=1 to k do
if not (MS[i] in mn) then
begin
mn := mn + [MS[i]];
inc(count);
end;
end.

Всего count элементов.
---------
Наши программисты самые программистые программисты!..
Ответ отправил: Дмитрий С. (статус: 2-ой класс)
Ответ отправлен: 14.07.2007, 15:41


Вопрос № 94.754
Help me, please!!! Вот задачки:
1. Известны данные о вместимости (в мегабайтах) и стоимости (в рублях) каждого из 22 типов жестких магнитных дисков (винчестеров). Напечатать наибольшую вместимость винчестеров, стоимость которых не превышает s рублей. Вывести номера типов таких винчестеров.
2. Даны 20 точек (x1,y1), (x2,y2), … (x20,y20). Рассмотрим всевозможные прямоугольники со сторонами, параллельными координатным осям с левой нижней и правой верхней или с левой верхней и правой нижней вершинами в этих точках. Найти и вывести координаты всех вершин прямоугольника, имеющего наименьшую площадь.
3. В области 10 районов. Заданы площади, засеваемые пшеницей (в гектарах), и средняя урожайность (в центнерах с гектара) в каждом районе. Определить количество пшеницы, собранное в области, и среднюю урожайность по области.

Хотелось бы получить ответ в наиболее упрощённом варианте и с пояснениями. Всем, кто сможет хоть как-то помочь заранее очень благодарна. Swallow.
Отправлен: 11.07.2007, 12:36
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

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

Смотрите приложение.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 11.07.2007, 16:12
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо,Константин Николаевич! Попробую разобраться сейчас в ваших вариантах решения к задачам. Вы мне очень помогли! Спасибо)


Вопрос № 94.781
Уважаемые эксперты!! Проверьте, пожалуйста моё решение 2х задач(в приложении)… Что в них не так? Не могу понять, где ошибки допустила. А условия задач вот:
1. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся факториалом некоторого натурального числа. Определить в этой последовательности порядковый номер числа, имеющего максимальную сумму цифр.
2. Дан одномерный массив целых двоичных чисел (число в двоичной записи представлено строкой). Не делая перевода в десятичную систему счисления, определить количество и номера элементов массива, кратных четырем.
Надеюсь, поможете. Заранее большое спасибо! Swallow.

Приложение:

Отправлен: 11.07.2007, 15:24
Вопрос задала: Ласточка (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Flynn
Здравствуйте, Ласточка!
Ошибка второй задачи в том, что процедуры POS выбырает у тебя не последние два нуля, а первые. И тогда если число будет 100100, оно не определяет его как делимое. Используй copy.

Cо первой задачей подольше разбираться надо.

Приложение:

Ответ отправил: Flynn (статус: 1-ый класс)
Ответ отправлен: 11.07.2007, 16:13
Оценка за ответ: 4
Комментарий оценки:
Большое спасибо за участие в разрешении моей проблемы. Попробую востользоваться вашими советами относительно второй задачи.

Отвечает: Louken
Здравствуйте, Ласточка!

Исправленное решение обоих задача в приложении:

Приложение:

Ответ отправил: Louken (статус: 10-ый класс)
Ответ отправлен: 11.07.2007, 16:50

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

Правильное решение 1-ой задачи.
Т.к. Дана непустая последовательность натуральных чисел, оканчивающаяся числом, являющимся факториалом т.е. последнее число(факториал) является элементом последовательности. Но его сумма цифр не учитывается. К примеру:210(3),340(7),510(6),720(9)

ps:
Function Sum_tsifr(x:integer):integer;
зачем объявлять переменную и потом забыть о ней.
Удачи!

Приложение:

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

Ответ отправил: Зенченко Константин Николаевич (статус: Практикант)
Ответ отправлен: 12.07.2007, 10:51
Оценка за ответ: 5
Комментарий оценки:
Да.. я что-то проглядела. Глупая ошибка, но самостоятельно я её найти почему-то не смогла. Огромное спасибо за ответы на мои вопросы!


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное