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

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

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

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

Выпуск № 488
от 14.11.2007, 19:35

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


Вопрос № 108645: Уважаемые эксперты! Помогите пожалуйста с решением нескольких задачек... В принципе, они несложные, просто мне очень не хватает времени их решить... Я приехал в город из сельской местности, поступил в институт, но Паскаля у нас в школе не было! Я смо...
Вопрос № 108695: Здрасти, снова я. Задачка звучит так: Для заданной квадратной матрицы С вычислить сумму и число элементов матрицы, находящихся под главной диагональю. Исходную матрицу вывести в общепринятом виде. Результаты вывести в произвольной форме. Р.S. Элемент...
Вопрос № 108696: Помогите, пожалуйста, с решением. Тут две задачи, ко второй даю ссылку на график: http://i005.radikal.ru/0711/d6/0f9c300b90da.jpg Очень большое спасибо заранее. ...
Вопрос № 108698: Здравствуйте, уважаемые эксперты. Я студент, начал изучение языка Паскаль. На одной из первых лекций преподаватель сказал, что в программах "не рекомендуется" использовать оператор безусловного перехода GoTo. Однако ни он, никто из...

Вопрос № 108.645
Уважаемые эксперты! Помогите пожалуйста с решением нескольких задачек... В принципе, они несложные, просто мне очень не хватает времени их решить... Я приехал в город из сельской местности, поступил в институт, но Паскаля у нас в школе не было! Я смог решать задачи более низкого уровня(ветвление, циклы и др.) но эти - не могу додуматься... Может вы сможете?

1. Дан одномерный целочисленный массив B(n) и натуральное число n. Для каждого из элементов массива B выяснить, сколько раз оно входит в эту последовательность. Результат представить в виде:
**a1 встречается k1 раз** При печати не должно быть повторяющихся строк.

2. Дана последовательность из n вещественных чисел. Упорядочить последовательность по убыванию методом пузырька: последовательно сравниваются пары соседних элементов xk и xk+1 (k=1,2,...,n-1) и, если xk< xk+1, то они переставляются; тем самым наименьший элемент окажется на своем месте в конце массива; затем этот метод применяется ко всем элементам, кроме последнего, и т. д.

3. Дано натуральное число n. Вычислить:
Z=ln(1+ln(2+...+ln((n-1)!+ln(n)!))).

4. Дана матрица D(n,m).
Найти максим. элемент заштрихованной области (см. приложение):

Приложение:

Отправлен: 09.11.2007, 06:42
Вопрос задал: Mamontenok (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Mamontenok!
1.
VAR a: array of integer;
isit: boolean;
count: integer;
i: integer;
j : integer;
begin
// Помещаем в массив а разные элементы
for i := 0 to n - 1 do
begin
isit := false;
for j := 0 to Length(a)-1 do
begin
if b[i] = a[j] then isit := true;
end
if not isit then
begin
SetLength(a, Length(a) + 1);
a[Length(a) - 1] := b[j];
end;
end
// Если хотите, сортируйте, QuickS(a, 0, Length(a) - 1)
//Выводим элементы
for j := 0 to Length(a) - 1 do
begin
count := 0;
for i := 0 to n - 1 do
if b[i] = a[j] then inc(count);
Writeln(a[j], ' встречается ', count, ' раз'); //Вывод не помню, кажется так :)
end;
ReadLn;
end;

2. Возьмите какой-нибудь учебник по Паскалю, во всех учебниках описан данный метода, иногда даже с кодом, или
http://www.excode.ru/art4490p1.html (за качество не ручаюсь, но на правду похоже)

3.
function fact(i: integer): integer;
var j: integer;
begin
result := 1;
for j := 2 to i do Result := Result * j;
end;
z:= 0;
for i := n downto 1 do
begin
z := ln(fact(i) + z);
end;
И рекомендация, не проверяйте на больших n, факториал очень быстро растет

4.
var i, j, max: integer;
begin
max := a[0,0];
for i := 0 to n - 1 do
for j := 0 to m - 1 do
if i < j then
if max < a[i, j] then max := a[i;,j]

Все
Если у вас из другой области максимум находится, то мы по разному выводим массивы, и уловие i < j замените на условие i > j
Удачи.
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 3-ий класс)
Ответ отправлен: 09.11.2007, 10:01
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое, надеюсь, это поможет... Хотя function и fact мы пока не изучали... Может можно сделать попроще на основе массивов, циклов и ветвлений?


Вопрос № 108.695
Здрасти, снова я. Задачка звучит так: Для заданной квадратной матрицы С вычислить сумму и число элементов матрицы, находящихся под главной диагональю. Исходную матрицу вывести в общепринятом виде. Результаты вывести в произвольной форме. Р.S. Элементы и размерность матрицы я должен вводить сам.
Отправлен: 09.11.2007, 13:42
Вопрос задал: Артем Глушков (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 9)

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Артем Глушков!
Program Matrix;
uses CRT;
VAR m,n: Integer;
i, j: integer;
SUM: Integer;
Count: integer;
MATR: array of array of integer;
begin
WriteLn('Введите размерность матрицы');
Readln(m,n);
SetLength(MATR, m, n);
//Заполняем матрицу
FOR i := 0 to m - 1 DO
FOR j := 0 TO n - 1 DO
MATR[m,n] := random (10) - 5; //Ну или как Вам надо
//Выводим матрицу
FOR j := 0 TO n - 1 DO
begin
FOR i := 0 to m - 1 DO
Write(a[i, j], ' ');
Writeln;
END;
//Производим подсчеты
For i := 0 to m - 1 do
for j := 0 to n - 1 do
if j<i then begin inc(count); sum := sum + a[i,j]; end;
WriteLN('Кол-во элементов: ', count, ', а их сумма = ', sum);
Readln;
end.
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 3-ий класс)
Ответ отправлен: 09.11.2007, 14:39
Оценка за ответ: 5

Отвечает: Coupler
Здравствуйте, Артем Глушков!
Дополнение к ответу предыдущего эксперта: я бы не стал перебирать все элементы массива, чтобы выбрать находящиеся под главной диагональю. Можно проще:
for i := 1 to n - 1 do
for j := 0 to i-1 do
begin
inc(count);
sum := sum + a[i, j];
end;

Приложение:

Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 09.11.2007, 16:52
Оценка за ответ: 5
Комментарий оценки:
Спасибо за разъяснения и желание помочь


Вопрос № 108.696
Помогите, пожалуйста, с решением.
Тут две задачи, ко второй даю ссылку на график:

http://i005.radikal.ru/0711/d6/0f9c300b90da.jpg

Очень большое спасибо заранее.

Приложение:

Отправлен: 09.11.2007, 13:48
Вопрос задал: Аксенов Антон (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, Аксенов Антон!
1)
CONST A = ARRAY OF (0,1,2,3,4,5,6,7,8,9);
CONST B = ARRAY OF ('лет','год','года','года','года','лет','лет','лет','лет', 'лет')
Var InData:Integer;
o: integer;
begin
Writeln('Введите возраст:');
Readln(InData);
o := InData mod 10;
case o OF
0,6,7,8,9: Writelnln(InData, ' лет');
1: Writelnln(InData, ' год');
2,3,4: Writelnln(InData, ' года');
END;
READLN;
end.

Как вариант используйте массивы-константы, сам код без их использования, тут дело вкуса

2)
function GetY(x: real): real;
begin
if x <= 0 then ResultGetY := -x;
if x > 0 then ResultGetY := -x * x;
end;
var InData: real;
begin
Writeln('Введите аргумент функции');
Readln(InData);
WriteLn('Значение функции равно: ', GetY(InData):4:4:4);
Readln;
end;.

P.S. Пусть это у вас в жизни будут самые сложные задачи.


-----
∙ Отредактировал: Зенченко Константин Николаевич (Специалист)
∙ Дата редактирования: 09.11.2007, 17:27
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 3-ий класс)
Ответ отправлен: 09.11.2007, 14:48
Оценка за ответ: 4
Комментарий оценки:
Спасибо, что исправили. А то я уже подумал, что глуплю %)


Вопрос № 108.698
Здравствуйте, уважаемые эксперты.

Я студент, начал изучение языка Паскаль. На одной из первых лекций преподаватель сказал, что в программах "не рекомендуется" использовать оператор безусловного перехода GoTo. Однако ни он, никто из других преподавателей внятно не объяснил - почему. То же самое встречалось в некоторых книгах, и по другим языкам программирования. Может быть Вы свожете объяснить, в каких случаях этот оператор можно использовать, в каких - нет, и почему.

Заранее благодарен,
m3sergey.
Отправлен: 09.11.2007, 14:17
Вопрос задал: M3sergey (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Зиновьев Дмитрий Владимирович
Здравствуйте, M3sergey!
Сегодня все говорят о ООП. Это раз. Там и не предусмотрено никаких GOTO;
Во-вторых, любой код можно написать таким образом, чтобы не использовать оператор перехода.
В-третьих, и главное, в будущем, при отладке, особенно больших проектов, вы не раз ругнетесь, если будете использовать его. То бишь, он затрудняет чтение и отладку кода, что очень и очень важно в профессиональной работе программиста.
Ответ отправил: Зиновьев Дмитрий Владимирович (статус: 3-ий класс)
Ответ отправлен: 09.11.2007, 14:50
Оценка за ответ: 4

Отвечает: Verena
Здравствуйте, M3sergey!
Нельзя сказать, что использование go to неприемлемо ни в каких случаях. Мне, честно говоря, он никогда необходим не был (в языках высокого уровня), но бывают ситуации, когда им можно воспользоваться, например, организовать экстренный выход из программы без функций типа halt. Но лучше всё-таки этого избегать:
1. Это сильно затрудняет понимание кода.
2. Безусловные переходы по программе могут привести к критическим ошибкам, исключениям (например, ошибки циклов, или недопустимые арифметические действия - не всегда просто предсказать, какие значения переменных или условий будут использоваться при таком переходе).
3. Это затрудняет отладку программ, поскольку следить за бесконечными метками и перемещениями к ним требует большего внимания и времени.
Главное, что можно сказать "внятно" - это то, что использованием go to программист сильно затруднит жизнь себе и коллегам, которые, возможно, будут использовать его код. Но если Вам всё же хочется его использовать в каком-то оправданном случае, то основное правило - никогда не производить переходов назад, это самое опасное действие.
Надеюсь, помогла.
Удачи!
---------
Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 09.11.2007, 15:42
Оценка за ответ: 4

Отвечает: Coupler
Здравствуйте, M3sergey!
Когда в программе слишком много операторов goto, то она станосится нечитабельной (переходы могду осуществляться как по ходу кода программы, так и наоборот, "вверх", и в этом тяжело разобраться), ее будет трудно отлаживать. Но иногда использование goto позволяет сделать программу более наглядной, и в ней гораздо труднее совершить ошибку.

Приложение:

Ответ отправил: Coupler (статус: Практикант)
Ответ отправлен: 09.11.2007, 16:29
Оценка за ответ: 5

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

Компиляторы структурных языков имеют встроенные механизмы оптимизации.
Использование оператора GoTo, отключает оптимизацию и машинный код генерируется как есть, программа получается ресурсоемкой (как по размеру исполняемого файла так и скорости выполнения).

Посмотрите Доводы за и против и упоминаемый в статье Эдсгер В. Дейкстра, его мнение.

Удачи!
---------
И только наступив на грабли мы приобретаем драгоценный опыт!
Ответ отправил: Зенченко Константин Николаевич (статус: Специалист)
Ответ отправлен: 09.11.2007, 16:38
Оценка за ответ: 5

Отвечает: Витек
Здравствуйте, M3sergey!
Использовать то можно, только осторожно и только в исключительных ситуациях. А так четко продуманный алгоритм позволяет обойтись без оператора безусловного перехода вообще.
---------
ohne fleis, keine preis
Ответ отправил: Витек (статус: 3-ий класс)
Ответ отправлен: 09.11.2007, 17:07
Оценка за ответ: 2
Комментарий оценки:
Главный вопрос - Почему? А то как я длкажу преподавателю, что использовал его "осторожно"?


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.0 от 08.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное