Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите плииз с программой для Turbo Pascal

Ответить
Настройки темы
Разное - [решено] Помогите плииз с программой для Turbo Pascal

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Помогите пожалуйста с программкой для вычисления бесконечной нормы вектора х размерностью n

Отправлено: 17:57, 19-09-2010

 

Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата dasha131:
вычисления бесконечной нормы вектора х размерностью n »
а как это хоть делается? а то я не силен в геометрии

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 18:37, 19-09-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


если я правильно понял, то норма вектора - это скаляр его длинны.
Вектор в данном случае - одномерный массив чисел.
Надо накапливать норму вектора и пересчитывать ее при поступлении нового значения iой размерности.
Т.е. сначала одномерное пространство - линия.
Двухмерное - если без "заморочек", то декартова плоскость.
Трехмерное - сводится к 2х мерному. Т.е. сначала считаем a+b, затем переходим в плоскость (a+b,c)
Так и получается, что надо при каждом поступлении новой величины снижать размерность. Можно кстати в одно, двумерной плоскости находиться, не залезая в 3d.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 20:54, 19-09-2010 | #3


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


ВОт формула, [[x]]8=max(i) [x(i)]
8-так обозначила бесконечность
[[]]- норма
[]-модуль
тоесть бесконечный предел=максимальному значению x(i)

По теории все понятно, а вот с программой у меня напряг(

Отправлено: 05:00, 20-09-2010 | #4


Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Формула ИМХО не верна, но ладно.
По программе - делай цикл до некоторого условия.
В цикле делай сравнение по максимальному отклонению от 0. Т.е. максимальный модуль числа.
Нарисуй блок, а ее либо я, либо другой участник переведет тебе в программу.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 09:01, 20-09-2010 | #5


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


а как задать это сравнение?
по логике можно с начало сложить первое с первым число, потом первое со вторым, потом первое с третьим, первое с четвертым (при N=4) и выбрать наибольшую сумму (складывать естественно по модулю) Второе слагаемое как раз и будет этим макс числом
Но я не знаю как программу написать, да и выполняется ли условие задачи?
"для вычисления беск.нормы вектора" и "для нахождения модуля макс. элемента вектора" суть одна и та же, но все таки мне кажется нужно задействовать в программе формулу.

int main(void)
{
/* Initialized data */
static float b[4] = { 1.f,3.f,8.f,6.f };

/* Local variables */
extern float av01r_c(float *, int *);
static int n;
static float z__;

n = 4;
z__ = (float)av01r_c(b, &n);

printf("\n %12.4e \n", z__);
printf("\n %12.4e %12.4e %12.4e %12.4e \n",
b[0], b[1], b[2], b[3]);
return 0;
} /* main */
результат z=8

Вот какая то программа для нахождения бесконечной нормы, только мне этот язык незнаком

Цитата lxa85:
Формула ИМХО не верна, но ладно. »
Я поискала в инете, нашла два сайта на которых была написана эта же формула, так что думаю можно ей доверится)
Хотя сомнения тоже были...

Отправлено: 12:38, 20-09-2010 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


dasha131, приведенный пример конечно интересен, но не разу не понятен =(
Если брать воон ту формулу с модулем, которая вызывает подозрения, то задача сводится к нахождению максимального числа в потоке.
Т.е. первое приравниваем к текущему максимуму, затем в цикле сравниваем текущий текущий максимум с текущим числом. Тут простой if в цикле, без особых заморочек.
----
НО! Лично я бы предложил отказаться от этой формулы, либо заставил студента доказать ее правильность.
Я думаю скаляр длинны надо искать именно как скаляр длинны.
Пока для простоты и наглядности рассмотрим декартову систему координат.
Во что у нас разлагается вектор? Правильно, в более короткие вектора, коллинеарные (параллельные) осям координат. (взять тот же синус с косинусом в окружности единичного радиуса)
Синус и косинус, при неком угле 0<n<90 явно меньше единицы(1)

Вот теперь внимательно, попробую рассказать (нарисовать к сожалению сейчас не могу, чуть позже)

Как нам просчитать сферу? Сфера это 3х мерная фигура. 4х мерные фигуры брать не буду, их рисовать сложно
Значит вектор задан 3мя параметрами по осям координат.
Поступает первая величина x. Скаляр длинны очевидно равен модулю x т.е. |x|
Добавляем следующую координату - y. Уже плоскость и нам надо понизить кол-во степеней объекта. т.е. вернуться обратно к линиям. (мудренно по ходу сказал)
Проще Есть плоскость, нам надо ее свести к линии.
Поступила y. Что у нас получается? Получается прямоугольный треугольник, где по доказанному Пифагором l = sqrt (|x|^2 + |y|^2);
Отлично. Поступает координата z, что мы имеем?
Берем плоскость l(!) z на ней образуется прямоугольный треугольник, где катетами являются l, z.
Раскрывать подстановку я не вижу смысла, вроде бы как все и так понятно.
Т.е. сводить к одной, большой, большой формуле не надо. Надо считать скаляр длинны вектора по мере итерационно (по шагам) по мере поступления данных.
Далее можно наращивать кол-во изменений размерности 4, 5, 6d и т.д. Все вектора имеют прямой угол друг с другом, просто это в единой картине сложно рисуется

Решения задачи я вижу двумя способами:
Либо нахождение максимальной величины в потоке
Либо постепенное накопление нормы вектора (скаляра длинны)

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 01:44, 23-09-2010 | #7


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Нет, тут точно правильная формула, я проверила
А как это сравнение на языке пасхаль записать вы могли бы показать?

Отправлено: 13:27, 23-09-2010 | #8


Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


dasha131, Уточни пожалуйста, что вы понимаете под словом норма.
Просто сейчас спросил у к.ф.м.н, зав. каф. Талапов В. В.(замечательная вещь конференция, иногда сидишь рядом с такими людьми, с которыми в другом месте встретиться просто не реально, т.е. мне бы и в голову не пришло, с кем я сижу) и мне доходчиво объяснили, что под словом "норма вектора" может подразумеваться много всего интересного. Тем более, если мы начинаем говорить про норму бесконечного норму вектора.
В принципе, в принципе, формула приведенная тобой так же имеет право на существование, но это несколько иное определение нормы вектора.
Норм и определения нормы, как выяснилось, так же много.
Т.е. можно назвать максимальное значение координаты n мерного пространства нормой вектора.

Обрамление условия с тебя.
Т.е. блок var, способ получения значений, способ их выдачи и т.д.

Vector - одномерный массив данных. Также называемый вектором.
Vector[i] - i'тый элемент вектора. Перебор задается в цикле (скорее всего в цикле for).
Если задана бесконечность, т.е. массив не "переборный", то текущее вводимое значение. (цикл while)
Max - текущее максимальное значение. Изначально приравнивается первому элементу массива, затем сравнивается с остальными.
Код: Выделить весь код
if vector[i] > max then 
max = vector[i] ;
На всякий случай, формула к более "каноническому" определению вектора
Код: Выделить весь код
L = sqrt (X1^2 + X2^2 + ... + Xi^2+ ... + Xn^2)

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 14:20, 23-09-2010 | #9


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


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

program norma;
var
n:integer;
max:real;
i:integer;
a: Array [1..10] of real;
begin
read (n);
for i:=1 to n do
begin
read (a[i]);
end;
begin
for i:=1 to n do
begin
if (ABS(a[i])>max) then max:=a[i];
end;
write(max:4:2);
end;
end.

a: Array [1..10] of real;
незнала как обозначить в блоке описания переменных элемент "а", потом нашла в примерах такое её обозначение, звучит как
"Переменная а - массив действительных чисел из 10 элементов" а что это означает? что бы поменялось если я поставила там другие значения?

Отправлено: 15:16, 23-09-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите плииз с программой для Turbo Pascal

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
Прочие - Turbo Pascal 7 Sniper Программное обеспечение Windows 30 01-12-2008 16:04
Turbo Pascal, Помогите написать пару программ kirillsp Программирование и базы данных 11 20-11-2006 23:34
программка в среде turbo pascal gh6 Программирование и базы данных 3 14-11-2006 12:16
Borland Turbo Pascal 7.0 Guest Программирование и базы данных 4 21-09-2004 18:44




 
Переход