![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Анка |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
Цитата 1. Даны две последовательности a1 ≤ a2 ≤ ... ≤ аn и b1 ≤ b2 ≤ ... ≤ bn. Образовать из них новую последовательность чисел так, чтобы она тоже была неубывающей (дополнительный массив не использовать). 2. Расположить столбцы матрицы D[M, N] в порядке возрастания элементов k-ой строки (1 ≤ k ≤ М). 3. Реализовать набор подпрограмм для выполнения следующих операций над векторами: а) сложение; б) вычитание; в) скалярное умножение векторов; г) умножение вектора на число; д) нахождение длины вектора. 1) Дан массив A – массив векторов. Отсортировать его в порядке убывания длин векторов. 2) С помощью датчика случайных чисел сгенерировать 2N целых чисел. N пар этих чисел задают N точек координатной плоскости. Вывести номера тройки точек, которые являются координатами вершин треугольника с наибольшим углом. 4. Дана строка, содержащая произвольный текст. Выяснить чего в нем больше: русских букв или цифр. Мало того, что мне нужно решить все эти задачи, но мне еще нужно объединить их одним меню (хотя это я сделала). Причек все это надо реализовать с выбором способа ввода - с клавы, из файла или случайная генерация. Из-за практики появилось много вопросов. Может кто-нибудь поможет? 1. Не могу решить 1 задачу... что-то не получается... ввести ввожу, а вот дальше... тоже самое обстоит со второй... 2. не понимаю, как можно реализовать 2 пункт в 3 задаче...... просто даже толком не понятно, что нужно... ну пока вроде всё... ![]() -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Анка, (она же Незнакомка? или я ошибаюсь?
![]() Поиском пользуемся... 1 задание - Вот тут (это как раз случай для 2-х последовательностей) 2 задание - Как задать матрицу чтобы ... + поиск (задача уже решалась) и т.д. |
volvo |
![]()
Сообщение
#3
|
Гость ![]() |
Цитата 4. Дана строка, содержащая произвольный текст. Выяснить чего в нем больше: русских букв или цифр. Это, по-моему, тоже решалось, но ...const |
Анка |
![]()
Сообщение
#4
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo, klem4, спасибо, но 4 задачу я как раз решила.......
![]() Сообщение отредактировано: Анка - 8.07.2005 12:51 -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Насчет операций с векторами -
Код Type TVector = Record X, Y: Real; End; Procedure VAdd(Var a: TVector; b, c: TVector); Begin a.X := b.X + c.X; a.Y := b.Y + c.Y; End; Procedure VSub(Var a: TVector; b, c: TVector); Begin a.X := b.X - c.X; a.Y := b.Y - c.Y; End; Procedure VScale(Var a: TVector; b: TVector; k: Real); Begin a.X := b.X * k; a.Y := b.Y * k; End; { Это - скалярное произведение векторов } Function VDot(a, b: TVector): Real; Begin VDot := a.X * b.X + a.Y * b.Y; End; { Длина вектора } Function VLength(a: TVector): Real; Begin VLength := Sqrt(sqr(a.X) + sqr(a.Y)); End; Можно немного оптимизировать (для большего количества элементов вектора, чтобы не считать все вручную)... Если нужно - говори, я покажу как... Добавлено: Вот пример сортировки массива векторов... Код Type TVector = Record X, Y: Real; End; Function VLength(a: TVector): Real; Begin VLength := Sqrt(sqr(a.X) + sqr(a.Y)); End; const size = 10; type arrType = Array[1 .. size] Of TVector; Procedure Bubble(Var ar: arrType; n: integer); Var i, j: Integer; T: TVector; Begin For i := 1 To n Do For j := n DownTo i+1 Do If VLength(ar[Pred(j)]) > VLength(ar[j]) Then Begin { < } T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T End End; Procedure GetVector(Var v: TVector); Begin With v Do Begin Write('X='); ReadLn(X); Write('Y='); ReadLn(Y); End; End; Procedure PrintVector(v: TVector); Begin With v Do WriteLn('X:',X:10:5,' Y:',Y:10:5) End; Var A: arrType; i: Integer; begin For i := 1 To size Do GetVector(A[i]); { Вводим все вектора } { Сортируем } Bubble(A, size); For i := 1 To size Do PrintVector(A[i]); { Печатаем массив векторов } end. |
Анка |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo, а можете мне объяснить вот эту строчку? Я просто не могу что-то понять, что это именно за элементы? (ar[Pred(j)] например)
If VLength(ar[Pred(j)]) > VLength(ar[j]) Then Begin { < } -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Ну, это же стандартный метод "пузырька"...
ar[Pred(i)] - это то же самое что и ar[i - 1]. То есть, все что там делается - проверяется, если длина (VLength) предыдущего вектора больше длины последующего, то поменять эти 2 элемента местами (этим занимается вторая строка)... А закомментированный значок "<" - если понадобится сортировать по убыванию, меняем в этой строке "больше" на "меньше"... |
Анка |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo, спасибо, просто я не поняла только как раз записи ar[Pred(i)], так как я раньше так ни разу не писала.....то что это стандартно я знаю, сама часто писала через такой метод, а почему метод именно "пузырька" (первый раз такое слышу
![]() -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Цитата(Анка @ 8.07.05 21:11) а почему метод именно "пузырька" (первый раз такое слышу ![]() А потому, что в процессе сортировки более "легкие" (меньшие по значению) элементы как бы "всплывают" до тех пор, пока не будет встречен элемент еще более "легкий"... |
Анка |
![]()
Сообщение
#10
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
что-то у меня Паксаль не хочет признавать процедуры и функции для программы с векторами... с действиями над ними......
![]() -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Прикрепи свою программу в аттаче или вышли мне в личку, я посмотрю, что ты делаешь.. Эти процедуры (с небольшими изменениями) взяты из нормально работающей программы...
|
Анка |
![]()
Сообщение
#12
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
я сейчас попробую пока сама разобраться.... надеюсь все будет нормально......
у меня сейчас возникла др. проблема...... с выводом массива в 1 задаче.... печатаю for i:=1 to (size+size) do (или to 20) {максимальное количество в обоих массивах} write (result[i]); {end for}, а он выдает вообще весело... если массивы формируются случайно, то все нормально, а вот если самому...... то получается что-то вида 1 2 3 4 0 0 0 0 0 0 56 67 0 0 0 0 0 0 0 0 0 0 Сообщение отредактировано: Анка - 10.07.2005 15:22 -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Ну, так приведи код, КАК заполняются массивы. Телепатов тут нет ...
|
Анка |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
volvo, не знаю, правильно ли, но решила разбить вывод массива на 2 пункта - для случайной генерации этих массивов и для чтения из файла, также с клавы. Немного устранились глюки, только теперь последний элемент во втором варианте (для файла и с клавы) конечного массива заменяется почему-то нулем. Массив формируется точно также почти, как вы предложили через поиск.... у меня только переменные другие. Вот.
-------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата(Анка @ 10.07.05 17:22) Массив формируется точно также почти, как вы предложили через поиск.... у меня только переменные другие. Ну, значит, и результат будет почти правильный... Я без кода ничего сказать не могу... |
Анка |
![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
Там только заменены переменные, типа arr[i] на a[i], вот и все... как сюда скинуть текст не знаю..... как вообще скопировать из Паскаля текст? или это нельзя сделать....
![]() -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Так присоедини весь PAS-файл...
Жмешь кнопку "Ответить" (не Быстрый ответ, а именно "Ответить"), и выбираешь имя файла для присоединения (.PAS, или заархивируй, если исходник большой)... |
Archon |
![]()
Сообщение
#18
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата как сюда скинуть текст не знаю..... как вообще скопировать из Паскаля текст? или это нельзя сделать.... Это можно сделать. Сперва перейти в оконный режим (Alt+Enter). Затем правой кнопкой по заголовку окна. Далее: Изменить->Пометить (выделяем мышкой текст), Изменить->Копировать. Всё!PS В Win9x для этого есть аналогичные кнопки на тулбаре. PPS Иногда проще открыть файл с программой в "блокноте" и скопировать оттуда. -------------------- Close the World...txeN eht nepO
|
Анка |
![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 21 Пол: Женский Репутация: ![]() ![]() ![]() |
а можно случайно сгенерировать текст (или строку)?
![]() -------------------- девушка - программистка..... правда я еще только учусь.... :-))
|
klem4 |
![]()
Сообщение
#20
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата(Анка @ 11.07.05 16:24) а можно случайно сгенерировать текст (или строку)? ![]() конечно можно, если возможны все символы, то например так :
Добавлено Для латинских букв
Сообщение отредактировано: klem4 - 11.07.2005 16:06 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 17:38 |