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

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


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 308
от 12.02.2007, 21:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 236, Экспертов: 57
В номере:Вопросов: 4, Ответов: 9


Вопрос № 74490: Сдраствуйте!!! Мне очень нужна ваша помощь, напишите поалуйста программу. Я на втором курсе а задача третьего!!! Плоское дно фонтана описывается замкнутой ломанной линией, без самопересечений причем никакие три вершины не лежат на одной прямой. Д...
Вопрос № 74547: Привет всем! хочу ввести поочередно слова а цикл ввода выполняет сразу две итерации и у меня получается Слово № 1 Слово № 2 что не так не пойму? uses crt; Var wds:array[0..30] of string[5]; i,num:byte; wd:s...
Вопрос № 74571: Допустим у меня есть Var wds:array[0..30] of string[5]; потом я заполняю этот массив словами Слова могут повторяться. как мне вывести слова по одному разу каждое слово? т.е если в моем массиве 5 одинаковых слов(в разных места...
Вопрос № 74593: А еще такой вопросик у меня в цикле выводит writeln(w_o_r_d,' ', sum[s]); где w_o_r_d слово от 1 до 5 букв Можно ли как то форматить w_o_r_d дополняя пробелами до 5ти знакомест а то некрасиво? ..

Вопрос № 74.490
Сдраствуйте!!! Мне очень нужна ваша помощь, напишите поалуйста программу. Я на втором курсе а задача третьего!!!
Плоское дно фонтана описывается замкнутой ломанной линией, без самопересечений причем никакие три вершины не лежат на одной прямой. Для организации фонтана между двумя заданными углами(вершинами) проложен гибкий кабель. Требуется НАПИСАТЬ ПРОГРАММУ ВЫЧЕСЛЯЮЩЮЮ ДЛИНУ КАБЕЛЯ!!!

ВЫХОДНЫЕ ДАННЫЕ
- в первой строке - число вершин
- в каждой из последующих N строк пара чисел через пробел являющаяся кординатами вершин: X1,Y2 ; X2,Y2......и далее.
В порядке обходаломанной против часовой стрелки, где 1,2....И - ломанных вершин.
- в последней строке номера соединяемых вершин(между ними найти длину кабеля)
- координаты вещественные.

ВЫХОДНЫЕ ДАННЫЕ
результат в виде лисла на экран.
ПРИМЕР
ВХОДНЫЕ ДАННЫЕ ВЫХОДНАЕ ДАННЫЕ
7 (количество вершин) 7,5
2, 0
5,0
6, 3.5
5, 6 КООРДИНАТЫ ВЕРШИН
4,2
3,7
0,5
3:7(номера соединяемых вершин)
ДОЛЖНА РИСОВАТЬ ОБЬЕКТ И РИСОВАТЬ И КАБЕЛЬ

ПОЖАЛУЙСТА ОЧЕНЬ НУЖНО, СРОЧНО!!!!!!!
рисунки к вопросу находятся по адресу:http://foto.mail.ru/mail/slide90/
Отправлен: 06.02.2007, 22:28
Вопрос задал: Slide (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Яна
Здравствуйте, Slide!
Такие задачи учатся решать не на третьем курсе, а в десятом классе.
Попробую немного подсказать. Отрезки можно нарисовать с помощью
line (x1, y1) -(x2, y2), где x1, y1 - координаты нач. точки, а x2, y2 - координаты кон. точки. Длину можно посчитать по формуле (x2 - x1)^2 + (y2 - y1)^2 .
Ответ отправила: Яна (статус: 4-ый класс)
Ответ отправлен: 07.02.2007, 08:58


Вопрос № 74.547
Привет всем!
хочу ввести поочередно слова а цикл ввода выполняет сразу
две итерации и у меня получается
Слово № 1
Слово № 2
что не так не пойму?

uses crt;
Var wds:array[0..30] of string[5];
i,num:byte;
wd:string[5];
begin

clrscr;
writeln(' 1 до 5');
writeln('Введите количество слов ');

read(num);

for i:=1 to num do

begin
writeln('Слово № ',i,' ');
readln(wd);
wds[i]:=wd;
end;

writeln;
readkey
end.
Отправлен: 07.02.2007, 11:03
Вопрос задал: Snik (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Яна
Здравствуйте, Snik!
Попробуйте вместо string[5] везде написать string. Без указания длины.
И еще для тестирования: после readln(wd); написать Writeln(wd).
Ответ отправила: Яна (статус: 4-ый класс)
Ответ отправлен: 07.02.2007, 11:27

Отвечает: Tek
Здравствуйте, Snik!
При считывании количества слов вы используете функцию read(num) - то есть считываете только один параметр - до любого разделителя, которым может быть и возврат каретки и пробел и перенос строки.
И соответственно при использовании readln(wd) - в буфере клавиатуры остается этот символ-разделитель (скорее всего ВК). И входной поток считает, что вы уже ввели слово №1 - проверьте в отладчике - у вас wds[1] - пустое.
Выход - используйте readln() - везде, ну или после каждого read - очищайте буфер - см. help
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 9-ый класс)
Ответ отправлен: 07.02.2007, 11:30

Отвечает: Gh0stik
Здравствуйте, Snik!

В коде я сделал пометки в операторах, который видоизменил:

uses crt;
Var wds:array[0..30] of string[5];
i,num:byte;
wd:string[5];
begin

clrscr;
writeln(' 1 до 5');
writeln('Введите количество слов ');
readln(num);

for i:=1 to num do
begin
write('Слово №',i,': ');
readln(wd);
wds[i]:=wd;
end;

writeln;
readkey
end.


После этих изменений Ваш код - работает... :) (просто Вы забыли перевести каретку после ввода числа слов...)

Good Luck!!!


---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 07.02.2007, 11:58


Вопрос № 74.571
Допустим у меня есть
Var wds:array[0..30] of string[5];

потом я заполняю этот массив словами
Слова могут повторяться.
как мне вывести слова по одному разу каждое слово?
т.е если в моем массиве 5 одинаковых слов(в разных местах а не подряд)
то вывести только 1 раз это слово (первое по очереди)
Отправлен: 07.02.2007, 13:36
Вопрос задал: Snik (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Gh0stik
Здравствуйте, Snik!

Вам достаточно просто отсортироват массив слов по убыванию или по возрастанию (любым известным Вам способом), а затем при выводе слов просто добавить условие.

Условие такого плана: проходим элементы массива и сравниваем текущий элемент с предыдущим, если эти элементы различны (не равны), то выводим текущий элемент на экран.
И единственное для последнего элемента мы должны сравнивать его спредыдущим.


Пример реализации:
for i:=0 to n-1 do
if wds[i]<>wds[i+1] then writeln(wds[i]);

if wds[n]<>wds[n-1] then writeln(wds[n]);


Good Luck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессионал)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 07.02.2007, 14:09

Отвечает: Яна
Здравствуйте, Snik!
Например, прочитав слово, проверить, есть ли оно в массиве, если есть - больше не записывать. Или (если нужно ввести в массив все слова) завести еще один массив типа булево и заносить в него новое слово с таким же индексом в исходном массиве или старое.
Ответ отправила: Яна (статус: 4-ый класс)
Ответ отправлен: 07.02.2007, 14:24

Отвечает: Ерёмин Андрей
Здравствуйте, Snik!
Это легко делается и без сортировки. Алгоритм простой: перед тем, как вывести слово на экран, просматриваем все элементы массива, стоящие ранее этого и, если такое слово там есть, значит его мы уже вывели. А вот и код:

for i:=0 to 30 do

begin

word:=wds[i];

wp:=false;

for j:=0 to i-1 do

  if wds[j] = word then

  begin

    wp:=true;

    break;

  end;

if wp =
false then writeln(word);

end;


Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 07.02.2007, 14:31


Вопрос № 74.593
А еще такой вопросик у
меня в цикле выводит writeln(w_o_r_d,' ', sum[s]);
где w_o_r_d слово от 1 до 5 букв
Можно ли как то форматить w_o_r_d дополняя пробелами до 5ти знакомест
а то некрасиво?
Отправлен: 07.02.2007, 15:25
Вопрос задал: Snik (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Ерёмин Андрей
Здравствуйте, Snik!
Можно конечно. Это очень легко - добавляем пробелы до тех пор, пока длина всей строки не станет равной 5. Вот пример:

if length(word) < 5 then
while length(word) < 5 do
word:=' '+word;


Здесь пробелы добавляются в начало слова, т.е. получается выравнивание по правому краю. А вот пробелы в конце:

if length(word) < 5 then
while length(word) < 5 do
word:=word+' ';


Желаю удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на Delphi. Всё для программиста. Файловый архив, статьи, помощь, советы, обмен опытом.
ICQ: 286867644
----
Ответ отправлен: 07.02.2007, 15:34

Отвечает: Яна
Здравствуйте, Snik!
можно просто напечатать только буквы, а потом 1 пробел (если он вообще нужен)
т.е. что -то типа for i:=Length(word) to 5 do write(" ");
Ответ отправила: Яна (статус: 4-ый класс)
Ответ отправлен: 07.02.2007, 16:16


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

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

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное