IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> 4 задачи и куча вопросов...., практика.....
Анка
сообщение 8.07.2005 12:13
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


Цитата
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 задаче...... просто даже толком не понятно, что нужно...
ну пока вроде всё... huh.gif


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 12:22
Сообщение #2


Гость






Анка, (она же Незнакомка? или я ошибаюсь? rolleyes.gif )
Поиском пользуемся...
1 задание - Вот тут (это как раз случай для 2-х последовательностей)
2 задание - Как задать матрицу чтобы ... + поиск (задача уже решалась)

и т.д.
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 12:46
Сообщение #3


Гость






Цитата
4. Дана строка, содержащая произвольный текст. Выяснить чего в нем больше: русских букв или цифр.
Это, по-моему, тоже решалось, но ...
const
russ = ['А'..'П', 'Р'..'Я', 'а'..'п', 'р'..'я'];
digits = ['0'..'9'];
var
count_rus, count_digit: integer;
...
begin
{ Здесь - читаешь строку s }
count_rus := 0; count_digit := 0;
for i := 1 to length(s) do
if s[i] in russ then inc(count_rus)
else if s[i] in digits then inc(count_digit);

{ если count_rus > count_digit значит букв больше, иначе - больше цифр }
end.
 К началу страницы 
+ Ответить 
Анка
сообщение 8.07.2005 12:50
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


volvo, klem4, спасибо, но 4 задачу я как раз решила....... rolleyes.gif причем видимо 3 способом..... :D

Сообщение отредактировано: Анка - 8.07.2005 12:51


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 13:01
Сообщение #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.
 К началу страницы 
+ Ответить 
Анка
сообщение 8.07.2005 15:11
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


volvo, а можете мне объяснить вот эту строчку? Я просто не могу что-то понять, что это именно за элементы? (ar[Pred(j)] например)
If VLength(ar[Pred(j)]) > VLength(ar[j]) Then Begin { < }
T := ar[Pred(j)]; ar[Pred(j)] := ar[j]; ar[j] := T


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 15:37
Сообщение #7


Гость






Ну, это же стандартный метод "пузырька"...
ar[Pred(i)] - это то же самое что и ar[i - 1]. То есть, все что там делается - проверяется, если длина (VLength) предыдущего вектора больше длины последующего, то поменять эти 2 элемента местами (этим занимается вторая строка)... А закомментированный значок "<" - если понадобится сортировать по убыванию, меняем в этой строке "больше" на "меньше"...
 К началу страницы 
+ Ответить 
Анка
сообщение 8.07.2005 21:11
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


volvo, спасибо, просто я не поняла только как раз записи ar[Pred(i)], так как я раньше так ни разу не писала.....то что это стандартно я знаю, сама часто писала через такой метод, а почему метод именно "пузырька" (первый раз такое слышу smile.gif )?


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 21:51
Сообщение #9


Гость






Цитата(Анка @ 8.07.05 21:11)
а почему метод именно "пузырька" (первый раз такое слышу  smile.gif )?

А потому, что в процессе сортировки более "легкие" (меньшие по значению) элементы как бы "всплывают" до тех пор, пока не будет встречен элемент еще более "легкий"...
 К началу страницы 
+ Ответить 
Анка
сообщение 8.07.2005 22:38
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


что-то у меня Паксаль не хочет признавать процедуры и функции для программы с векторами... с действиями над ними...... sad.gif кстати, а можно объявить переменные к конкретной задаче как бы в середине программы или в самом начале только? Просто у меня все 4 задачи объединены общим меню......


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 8.07.2005 22:50
Сообщение #11


Гость






Прикрепи свою программу в аттаче или вышли мне в личку, я посмотрю, что ты делаешь.. Эти процедуры (с небольшими изменениями) взяты из нормально работающей программы...
 К началу страницы 
+ Ответить 
Анка
сообщение 10.07.2005 15:20
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


я сейчас попробую пока сама разобраться.... надеюсь все будет нормально......
у меня сейчас возникла др. проблема...... с выводом массива в 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


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.07.2005 15:23
Сообщение #13


Гость






Ну, так приведи код, КАК заполняются массивы. Телепатов тут нет ...
 К началу страницы 
+ Ответить 
Анка
сообщение 10.07.2005 17:22
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


volvo, не знаю, правильно ли, но решила разбить вывод массива на 2 пункта - для случайной генерации этих массивов и для чтения из файла, также с клавы. Немного устранились глюки, только теперь последний элемент во втором варианте (для файла и с клавы) конечного массива заменяется почему-то нулем. Массив формируется точно также почти, как вы предложили через поиск.... у меня только переменные другие. Вот.


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.07.2005 17:37
Сообщение #15


Гость






Цитата(Анка @ 10.07.05 17:22)
Массив формируется точно также почти, как вы предложили через поиск.... у меня  только переменные другие.
Ну, значит, и результат будет почти правильный... Я без кода ничего сказать не могу...
 К началу страницы 
+ Ответить 
Анка
сообщение 10.07.2005 19:26
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


Там только заменены переменные, типа arr[i] на a[i], вот и все... как сюда скинуть текст не знаю..... как вообще скопировать из Паскаля текст? или это нельзя сделать.... rolleyes.gif


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 10.07.2005 20:18
Сообщение #17


Гость






Так присоедини весь PAS-файл...

Жмешь кнопку "Ответить" (не Быстрый ответ, а именно "Ответить"), и выбираешь имя файла для присоединения (.PAS, или заархивируй, если исходник большой)...
 К началу страницы 
+ Ответить 
Archon
сообщение 10.07.2005 23:07
Сообщение #18


Профи
****

Группа: Пользователи
Сообщений: 618
Пол: Мужской

Репутация: -  24  +


Цитата
как сюда скинуть текст не знаю..... как вообще скопировать из Паскаля текст? или это нельзя сделать.... 
Это можно сделать. Сперва перейти в оконный режим (Alt+Enter). Затем правой кнопкой по заголовку окна. Далее: Изменить->Пометить (выделяем мышкой текст), Изменить->Копировать. Всё!

PS В Win9x для этого есть аналогичные кнопки на тулбаре.

PPS Иногда проще открыть файл с программой в "блокноте" и скопировать оттуда.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Анка
сообщение 11.07.2005 15:24
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Женский

Репутация: -  0  +


а можно случайно сгенерировать текст (или строку)? rolleyes.gif


--------------------
девушка - программистка..... правда я еще только учусь.... :-))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.07.2005 16:02
Сообщение #20


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата(Анка @ 11.07.05 16:24)
а можно случайно сгенерировать текст (или строку)? rolleyes.gif


конечно можно, если возможны все символы, то например так :


var
ch:char;
s:string;

...
Begin
...
readln(n);
s:='';
randomize;
count:=0;
repeat
ch:=chr(random(256));
s:=s+ch;
inc(count);
until count=n;
...
End.


Добавлено

Для латинских букв

ch:=chr(random(26)+97)


Сообщение отредактировано: klem4 - 11.07.2005 16:06


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

3 страниц V  1 2 3 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 17:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"