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

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


Информационный Канал Subscribe.Ru

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

Выпуск № 349
от 01.12.2004, 14:40

Администратор:
Имя: Sensey
URL: Информационный ресурс
ICQ: 105679124
Украина, Харьков
О рассылке:
Задано вопросов: 557
Отправлено ответов: 2117
Активность: 380.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

Boriss
Статус: Профессиональный
Общий рейтинг: 155.71
URL: Программирование на Паскале
[Подробней >>]
Tancho
Статус: Профессиональный
Общий рейтинг: 143.24
Телефон: сл. 0359 0391 65 631; 0359 0391 53 105
[Подробней >>]
Strory
Статус: Опытный
Общий рейтинг: 159.83
URL: МУАТ
Телефон: +7 (845-3) 54-16-74
[Подробней >>]
 
sir henry
Статус: Профессиональный
Общий рейтинг: 163.97
[Подробней >>]
zer0access
Статус: Опытный
Общий рейтинг: 105.56
URL: Сайт обо мне, моей жизни и увлечениях.
[Подробней >>]
Tigran K. Kalaidjian
Статус: Профессиональный
Общий рейтинг: 177.65
URL: Персональная страничка
[Подробней >>]
 
ALex_zaw
Статус: Начальный
Общий рейтинг: 141.66
[Подробней >>]
Student
Статус: Опытный
Общий рейтинг: 122.85
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 553. Доброе время суток, Эксперты! Как на паскале сделать "эффект матрицы" - ну типа быстро бегущие крякозябры сверху вниз?... (ответов: 4)
Вопрос № 554. Помогите, пожалуйста, разобраться...Нужно найти максимальный элемент одномерного массива. На сколько я понимаю, это делается так: (Приложение_1) Проблема в следующем: Если задавать элементы массива как: "4,7,8,5,1",то максимальным числом ве... (ответов: 6)

Вопросов: 2, ответов: 10


 Вопрос № 553

Доброе время суток, Эксперты!
Как на паскале сделать "эффект матрицы" - ну типа быстро бегущие крякозябры сверху вниз?



Вопрос отправлен: 27.11.2004, 20:42
Отправитель: ne0

[Следующий вопрос >>] [Список вопросов]

Отвечает Boriss

Здравствуйте, ne0!
Нужно бы сообщить еще информацию о том, на каком экране хотите сделать сие: на текстовом, на стандратном графическом 16-цветном, на 256-цветном или с большим разрешением и глубиной цвета.
От этого зависит реализация, в которой нет ничего кроме вычисления, где писать ...

Ответ отправлен: 29.11.2004, 15:16
Отправитель: Boriss


Отвечает Tancho

Здравствуйте, ne0!
Если я правильно понял слово "крякозябры", то тебе надо нечто подобного как в Приложении?

Приложение:

Ответ отправлен: 29.11.2004, 16:48
Отправитель: Tancho


Отвечает Strory

Привет, Нео! :)
Пишем такую прогу:
begin
  for i := 1 to 100 do begin
    GetBeer;
    Drink;
    if Status = 'Всё поплыло и побежали кракозябы' then
      Break
  end
end
.
Ну как? ;)
С ув. Морфеус :)))

Ответ отправлен: 29.11.2004, 19:49
Отправитель: Strory


Отвечает sir henry

Добрый день, ne0!
Простейший вариант, это писать букву в определенное место экрана, потом стирать ее и писать в новое место. Это осуществляется в связке GoToXY()+Write(). В принципе ничего дополнительного для "эффекта матрицы" не нужно.

Ответ отправлен: 29.11.2004, 06:52
Отправитель: sir henry


 Вопрос № 554

Помогите, пожалуйста, разобраться...Нужно найти максимальный элемент одномерного массива. На сколько я понимаю, это делается так: (Приложение_1)
Проблема в следующем: Если задавать элементы массива как: "4,7,8,5,1",то максимальным числом вектора считается 8, а если задать как "1,2,3,4,5", то максимальным числом вектора будет считаться 4(!), то есть последнее число(5)не учитывается!Почему?
И еще один вопрос (в продолжение первого): Нужно построить одномерный массив B(M), хранящего истинное значение, если среди элементов столбцов двухмерного массива A( N, M ) есть такие, которые равны полусумме минимального и максимального элементов данного столбца, и ложь иначе. Здесь проблема в задании циклов. Подскажите как сделать правильно...
Я думаю, что делать нужно так: (Приложение_2)
Procedure Search_Max(var a:TVector;
max:Integer);
var i,j:Byte;
begin
j:=1;
а[i,j]:=max;
for i:=2 to n do
if a[i,j]>max then max:=a[i,j];
inc(j);
end;
По всей вероятности, результатом является максимальное число во ВСЕМ массиве(((а нужно в каждом слобце...Как это сделать?


Приложение:


Вопрос отправлен: 28.11.2004, 03:07
Отправитель: Denbrow

[Следующий вопрос >>] [Список вопросов]

Отвечает Strory

Приветствую Вас, Denbrow!
По "Приложение 1": ошибка в строке:
  a[i]:=max;
нужно:
  max:=a[1];
Во втором приложением проблема та же. Вы присваиваете не переменной max значение элемента массива, а наоборот. Также переменной j присвоено начальное значение, а переменной i не присвоено.

Ответ отправлен: 29.11.2004, 19:48
Отправитель: Strory


Отвечает zer0access

Доброе время суток, Denbrow!
По первому заданию. Глюк кроется в строке a[i] := max. У тебя после цикла i не определено, max тоже. Их нельзя присваивать. И вообще, по логике надо делать по-другому: max := a[1].
По второму заданию. Вот тебе моя реализация. Тестилась на Дельфи 7 и FreePascal. Извини, комментариев не очень много. Я думаю, разберёшься. Если возникнут вопросы, заходи на www.zer0access.h12.ru, там есть моя контактная инфа.
{***********************}
program thething;
{$APPTYPE CONSOLE}
const
n = 10;
m = 5;
type
TMatrix = array [1..n, 1..m] of Integer;
TVector = array [1..m] of Boolean;
var
A: TMatrix;
B: TVector;
i, j, polusumma: Integer;
function min(X: TMatrix; col: Integer): Integer;
var i, min: Integer;
begin
min := X[1, col];
for i := 1 to n do
if X[i, col] < min then
min := X[i, col];
Result := min;
end;
function max(X: TMatrix; col: Integer): Integer;
var i, max: Integer;
begin
max := X[1, col];
for i := 1 to n do
if X[i, col] > max then
max := X[i, col];
Result := max;
end;
function search(X: TMatrix; col, Item: Integer): Boolean;
var i: Integer;
found: Boolean;
begin
found := False;
i := 1;
while (i <= n) and (not found) do
begin
found := X[i, col] = Item;
i := i + 1;
end;
Result := found;
end;
begin
// заполняем матрицу случайными значениями
Randomize;
for i := 1 to n do
for j := 1 to m do
A[i,j] := Random(10);
for j := 1 to m do
begin
polusumma := (max(A, j) + min(A, j)) div 2;
B[j] := search(A, j, polusumma);
end;
for j := 1 to m do
Write('B[', j, '] = ', B[j], '; ');
ReadLn;
end.

Ответ отправлен: 30.11.2004, 22:58
Отправитель: zer0access


Отвечает Tigran K. Kalaidjian

Здравствуйте, Denbrow!
Замените строчку
a[i]:=max;
на строчку
max:=a[1];
Во второй программе у Вас та же ошибка.

Ответ отправлен: 29.11.2004, 19:18
Отправитель: Tigran K. Kalaidjian


Отвечает Tancho

Здравствуйте, Denbrow!
ПРИЛОЖЕНИЕ_1.
const n=5;
type TVector=Array[1..n] of Integer;
var
a:TVector;
i:Byte;
max:integer;
Begin
for i:=1 to n do begin
write('a[',i,']=');
readln(a[i]);
end;
a[i]:=max;
for i:=2 to n do
If a[i]>max then max:=a[i];
writeln(max);
end.
Это твое Приложение 1!a[i]:=max; - Какая стойност у i?А откуда взeлся здесь max?
НАДО ТАК - max := a[1];Тогда для одномерного массива maximum находиться правилно!
ПРИЛОЖЕНИЕ_2.
Procedure Search_Max(var a:TVector; max:Integer);
var i,j:Byte;
begin
j:=1;
а[i,j]:=max;
for i:=2 to n do
if a[i,j]>max then max:=a[i,j];
inc(j);
end;
А это твое Приложение 2!Здесь вообще не описан массив a[i,j]! j:=1; а[i,j]:=max; a i = ?, можеть быть 1?А где цикль
для возрастания j?По моему ты вовсе далеко от разобрания проблема!Здесь проблема не в задании циклов - здесь по моему проблема в понимании задачу и познание вообще языку алгоритмов!
Если я тебе понял правилно то смотри в Приложении!Разумееться это только один из вариантов!!

Приложение:

Ответ отправлен: 29.11.2004, 16:09
Отправитель: Tancho


Отвечает ALex_zaw

Добрый день, Denbrow!
У Вас есть небольшая ошибочка в первом приложении:
a[i]:=max; вот это строку нужно записать немного иначе: max:=a[1];
У Вас в этой строке последнему елементу массива присваивается значение 0, вот где была Ваша ошибка.
Во втором приложении нужно воспользоваться вложенными циклами, у Вас их нет, и поэтому Вы нахожите искомое только в первом столбце, смотрите приложение (я немного исправил Ваше):

Приложение:

Ответ отправлен: 29.11.2004, 10:17
Отправитель: ALex_zaw


Отвечает Student

Приветствую Вас, Denbrow!
После ввода массива, перебор элементов массива нужно начать опять с первого элемента, для этого i приравниваете опять единице и повторяете цикл. Изменения между пунктиртыми линиями:
const n=5;
type TVector=Array[1..n] of Integer;
var
a:TVector;
i:Byte;
max:integer;
begin
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
{--------------------------------------}
i:=1;{ Предположим, что первый - максимальный}
{--------------------------------------}
a[i]:=max;
{---------------------------------------}
for i:=1 to n do {перебираем массив сначала}
{---------------------------------------}
If a[i]>max then max:=a[i];
WriteLn(max);
ReadLn;
end.
Удачи!!!
С ув. Student.


Ответ отправлен: 28.11.2004, 21:12
Отправитель: Student



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


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


Получить ответов:


 Выбор рассылки

Программисту
Assembler (20)
C / C++ (18)
Perl (4)
Builder / Delphi (17)
Pascal (19)
Basic / VBA (10)
Java / JavaScript (5)
PHP (17)
Криптография (6)
WinAPI (18)
Радиоэлектроника (13)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (58)
"Железо" (39)
Поиск информации (20)
Администратору
Windows NT/2000/XP (33)
Linux / Unix (17)
Юристу
Гражданское право (10)
Семейное право (5)
Трудовое право (8)
КоАП (5)

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





http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.pasplus
Отписаться

В избранное