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

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

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

3 страниц V  1 2 3 >  
 Ответить  Открыть новую тему 
> 4 задачи и куча вопросов...., практика.....
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

и т.д.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


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

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


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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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


Новичок
*

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

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


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


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


Гость






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

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


Новичок
*

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

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


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


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


Гость






Прикрепи свою программу в аттаче или вышли мне в личку, я посмотрю, что ты делаешь.. Эти процедуры (с небольшими изменениями) взяты из нормально работающей программы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

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


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


Гость






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


Новичок
*

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

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


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


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


Гость






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


Новичок
*

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

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


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


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


Гость






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

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


Профи
****

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

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


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

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

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


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


Новичок
*

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

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


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


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


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

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

 





- Текстовая версия 28.03.2024 19:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name