Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» проблемы Turbo Pascal

Автор: STEEL
Дата сообщения: 16.10.2002 17:11
Дана непустая последовательность ненулевых целых чисел, за которой следует
0. Определить, сколько раз в этой последовательности меняется знак.

==========
И вот еще прога, надо чтобы матрица 6*6 выводилась не в одну строчку а в 6
строк и в 6 столбцов.

var
a:array [1..6,1..6] of integer;
b,c,p:byte;
begin
for b:=1 to 6 do
for c:=1 to 6 do
read (a[b,c]);
p:=0;
for b:=1 to 6 do
for c:=1 to 6 do
if a[b,c] =a[c,b]
then
p:=p+1
else p:=0;
for b:=1 to 6 do
begin
for c:=1 to 6 do
write(a[b,c],' ');
end;
writeln(' ');
if p=36 then
writeln ('s')
else
writeln('n');
readln(b);
end.

--
----------------------------------
С уважением, Юра.
<<>>Copa<<>>[ChP]
СИЭИТ ВМ111
Copa[=Dog=]mail.sochi.ru
Автор: woffer
Дата сообщения: 16.10.2002 22:25
Алгоритм :
num - последовательность чисел

i = 0;
how_many_times = 0;

пока num[i] не равно 0
начало
если( ( num[i] < 0 и num[i+1] > 0 ) или ( num[i] > 0 и num[i+1] < 0 ) ), то
how_many_times = how_many_times +1 ;

конец

Цитата:
for b:=1 to 6 do
begin
for c:=1 to 6 do
write(a[b,c],' ');
end;


замени на
for b:=1 to 6 do
begin
for c:=1 to 6 do
write(a[b,c],' ');
writeln;
end;


Автор: qwd
Дата сообщения: 16.10.2002 23:01
STEEL
1) думаю, можно и проще, но...

Код: b:array [1..30{пока так проще}] of real;
a:integer;
p,c:word;
begin
for c:=1 to 30 do read (b[c]); {ввод эл-тов ез проверки на 0}
a:=1;
for c:=1 to 30 do begin
if (b[c]>0) and (a<>1) then begin p:=p+1; a:=1; end;
if (b[c]<0) and (a=1) then begin p:=p+1; a:=-1; end;
end;
end.
Автор: woffer
Дата сообщения: 17.10.2002 01:24
1. Это проще ? Читать такой листинг гораздо сложнее
2. Твой, исправленный как ты просил
Автор: qwd
Дата сообщения: 17.10.2002 06:03
woffer
так это уже должно работать хотя не проверял
2) не понял
Автор: MaxValue
Дата сообщения: 19.10.2002 15:16
Слушай, а зачем тебе считывать переменную b в конце кода:

Цитата:
readln(b);


Ведь ты ее нигде потом не используешь, судя по предоставленному исходнику.
Можно просто пустой readln; вставить.
Это я просто, вроде замечания-подсказки, вдруг спросят.
Автор: qwd
Дата сообщения: 19.10.2002 16:11
MaxValue
crt тогда нужен. Хотя, конечно, readln использовать удобнее.
Автор: IntenT
Дата сообщения: 19.10.2002 16:42
qwd

Цитата:
crt тогда нужен

vot eshe! Ko tebe takoe skazal?
readln - eto ne funkciya, a operator yazyka.
Автор: qwd
Дата сообщения: 19.10.2002 16:50
IntenT
По крайней мере, без crt оно не работает, сколько раз пробовал
Автор: Romero
Дата сообщения: 20.10.2002 10:35
=)
Автор: qwd
Дата сообщения: 20.10.2002 10:40
что-то меня переклинило

Код: readkey
Автор: MaxValue
Дата сообщения: 20.10.2002 11:29
qwd
Вообще-то ReadKey круче - свобода выбора в нажимаемой кнопки.
Ну и что что с Crt.
Все равно, рано или поздно эту библиотеку придется юзать!
Да, кстати по поводу Crt.
STEEL
Ты еще добавь в начале своей проги строку:
ClrScr;
Эта фишка экран очищает от всякого мусора - так проще разбираться в информации которую выдала программа именно при этом запуске.
Ну а раз ты:

Цитата:
Нифига не понимаю
То, чтобы прикрепить библиотеку Crt к своей проге - в самой верхней строке исходника (т.е. после PROGRAMM или до VAR) напиши:
Uses crt;
Все готово! Теперь ты можешь юзать Readkey и ClrScr.
Удачи!
Автор: qwd
Дата сообщения: 20.10.2002 11:36
MaxValue
Может хоть ты мне рсскажешь, каким боком в этйо теме второй листинг?
Автор: woffer
Дата сообщения: 20.10.2002 12:06
Второй листинг это к вопросу как вывести матрицу по строкам
Автор: IntenT
Дата сообщения: 20.10.2002 12:38
qwd

Цитата:
По крайней мере, без crt оно не работает, сколько раз пробовал

Vybrosi svoy Pascal i postav novyi. )))
Автор: MaxValue
Дата сообщения: 20.10.2002 13:50
STEEL
Я тут наваял кое-что по первому твоему вопросу, посмотри может пригодиться как один из вариантов.
Ты слишком мало информации по заданию сказал...:-\

Цитата:
Дана непустая последовательность ненулевых целых чисел, за которой следует
0. Определить, сколько раз в этой последовательности меняется знак.

Например программа это или подпрограмма и проч.

Ну, короче, я сделал следующее:
1.Массив (последовательность) заполняется псевдослучайными числами.
Немного корявый метод заполнения как положительными так и отрицательными элементами, ну уж какой есть
2.Далее перебираются все эти элементы
3.Проверяются условия:
либо текущий эл-т положительный а след. отрицательный
либо текущий отрицательный а след положит.
4.Если одно из них верно, переменная счетчика смены знаков увеличивается вот....в принципе и все!
5. результат на экран!

Сам исходник:
---------------------------------------------------------------------------
Uses crt;
Const
n=10;
rnd=100;
Var
a:array[1..n] of Integer;
i,cnt: Integer;
Begin
ClrScr;
Randomize;
for i:=1 to n do begin
a[i]:=Random(rnd);
a[i]:=Trunc(a[i]-rnd/2);
Write(a[i]:5);
end;
for i:=1 to n-1 do begin
if ((a[i]>0) and (a[i+1]<0)) or
((a[i]<0) and (a[i+1]>0)) then
Inc(cnt);
end;
Writeln;
Writeln('Sign changed ',cnt, ' times...');
ReadKey;
End.
---------------------------------------------------------------------------
P.S. Люди, вы слишком уж не критикуйте - реализовал первый вариант пришедший в голову. Хотя пожелания по оптимизации принимаются. Изменимся к лучшему вместе!

Добавлено
IntenT
А у тебя какой паскаль стоит?
Автор: Jean
Дата сообщения: 28.11.2002 16:25
СЛЕДУЮЩАЯ ПРОБЛЕМА
Проблема с подключением созданого модуля.
Создал модуль, откомпилировал в режиме "билд". При компилировании основной программы выдается ошибка "Файл .ТРU не соотв. стандарту турбопаскаля". У меня 7 паскаль. Какие могут быть часто встречающиеся ошибки при подключении модуля. Если у кого есть созданный для 7-го паскаля модуль, намыльте (jeanx@pisem.net).


Добавлено
Заодно, если есть програмки использующие модуль DOS будьте добры, поделитесь.
Автор: Jean
Дата сообщения: 01.12.2002 15:40
Еще раз прозрачно намекаю о своей просьбе.
Несколько програмок с использованием стандартного модуля Дос и модуля созданого самостоятельно, не только не ухудшат наших отношений, но и посеят в моей душе надежду, на то, что не все так плохо как кажется.
Мыло тоже: jeanx@pisem.net
Автор: Sufferer
Дата сообщения: 02.12.2002 00:40
Jean
Насколько я помню модуль в паскале должен иметь такую структуру:

Unit UnitName;
Uses
{Здесь подключаются нужные модули}
interface
{Здесь раздел доступных для всех типов, переменных и т.д.}
implementation
{собственно реализация процедур и функция}
end.

Простейший пример:

Unit Demo;
interface
Type
TDemo = record
S: String;
end;

procedure ShowDemo(Demo: TDemo);

implementation
procedure ShowDemo(Demo: TDemo);
begin
Write(Demo.S);
end;

end.
Автор: Horex
Дата сообщения: 03.12.2002 07:17

Цитата:
if ((a[i]>0) and (a[i+1]<0)) or
((a[i]<0) and (a[i+1]>0)) then

Проще (a[i]*a[i+1])<0. Ибо ненулевые.

Добавлено
qwd
Я бы сделал а как boolean. Было бы проще: if b[c]>0 and a then...
Автор: Jean
Дата сообщения: 03.12.2002 12:31
Sufferer
Взял твой пример, сделал из него модуль и при компиляции основной программы в строке с Uses demo; получил ту же ошибку: "Файл .ТРU не соотв. стандарту турбопаскаля". Видимо я неправильно его компилирую. Делаю это так: сохраняю написаный модуль как *.TPU, компилирую билдом. Если не сохранить как *.TPU, то автоматом в таком расширении он не сохраняется.
Что я неправильно делаю?

И еще пару вопросов (через месяц надо сдать 12 лаб., так что извиняйте за назойливость).
Модуль Graph.
Как нарисовать линию оканчивающуюся стрелкой, конечно, если это возможно.
Можно ли перевернуть изображение, вырезаное с помощь команды GetImage, на N-oe количество градусов?
Не получается залить замкнутый обьект с помощь команды floodfill. Закрашивается весь экран, хотя заливаю окружность или прямоугольник. Почему? Если кто знает, подскажите.
Автор: Jean
Дата сообщения: 04.12.2002 20:52
Ну вроде бы со всем разобрался, пока. Но программ с модулем Дос так и не нашел еще. Так что если есть...
Автор: Jean
Дата сообщения: 08.12.2002 16:10
При попытке вывести что-либо на печать принтер получает задание (видно по его индикатору), но печатать не спешит. И только когда зайдешь в папку принтеры (через Пуск –> Настройка –> Принтеры) и откроешь сам принтер, то только тогда он начинает печатать. Винда 2000, принтер HP LaserJet 6L. В чем может быть дело?
Автор: UncoNNecteD
Дата сообщения: 08.12.2002 18:44
Jean
Если у тебя вверху написано
unit xxx
то компилится он должен как xxx.tpu
Автор: Jean
Дата сообщения: 09.12.2002 02:52
UncoNNecteD
Извини, но я тебя не очень понял. При чем здесь unit? Модуль Printer вроде как стандартный? Зачем его компилить?
Автор: Pinocchio
Дата сообщения: 09.12.2002 11:05

Цитата:
Делаю это так: сохраняю написаный модуль как *.TPU, компилирую билдом. Если не сохранить как *.TPU, то автоматом в таком расширении он не сохраняется.
Что я неправильно делаю?

Извиняюсь, если ты PAS-текст сохраняешь как TPU, то от этого он TPU не становится. Чтобы получить EXE или TPU нужно компилировать одноимённый PAS файл.
Автор: Jean
Дата сообщения: 09.12.2002 16:24
Pinocchio
Спасибо, но этот вопрос уже отпал. Сейчас меня след. вопрос интересует:

Цитата:
При попытке вывести что-либо на печать принтер получает задание (видно по его индикатору), но печатать не спешит. И только когда зайдешь в папку принтеры (через Пуск –> Настройка –> Принтеры) и откроешь сам принтер, то только тогда он начинает печатать. Винда 2000, принтер HP LaserJet 6L. В чем может быть дело?

И

Цитата:
Но программ с модулем Дос так и не нашел еще.

Автор: vserd
Дата сообщения: 09.12.2002 17:36
Jean
Попробуй отправить ему символ конца страницы. Такое впечатление что данные накапливаются в буффере, а печататься не спешат :))
Для матричных это было CHR(12), как для лазерных незнаю.
Автор: Jean
Дата сообщения: 09.12.2002 19:59
vserd
Попробую. Наверно надо и символ конца строки указывать, а то он все в одну строчку лепит.
Автор: UncoNNecteD
Дата сообщения: 09.12.2002 22:04
Jean
Ты писал бы какие вопросы отпадают, мы бы не отвечали.

Страницы: 1234

Предыдущая тема: Оптимизация парсинга строк в C#


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.