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

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

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

 
 Ответить  Открыть новую тему 
> Про вывод в цикле
сообщение
Сообщение #1


Новичок
*

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

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


В цикле выводится сообщение. Оно выводится столько раз, скока неправильно. А как сделать, чтобы только один раз оно выводилось?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Четыре квадратика
****

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

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


Код

while bla_bla do
begin
   ...
   if condition then
   begin
       writeLn('ERROR!!!');
       break; {завершение цикла, довольно грубо}
   end;
   ...
end;


Или вместо break устанавливать какой-нибудь флаг в true, а в условии цикла проверять, чему равен флаг.

ИМХО break не есть очень хорошо, ибо GOTO подобно... (привет SKVOZNIAKsmile.gif)


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Цитата(>hamka< @ 8.03.05 18:13)
В цикле выводится сообщение. Оно выводится столько раз, скока неправильно. А как сделать, чтобы только один раз оно выводилось?


Ну, а если при этом нельзя прерывать выполнение цикла, то что-то типа:
Код
print_me := true;
for i := 1 to n do
 begin
   ...
   if condition and print_me then
     begin
       print_me := false;
       writeln('Error !!!')
     end;
 end;


В таком случае цикл продолжится, но последующие сообщения печататься уже не будут...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Новичок
*

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

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


И еще вопрос huh.gif
Ситуация такая -> строка (переводимое в число) проверяется на max допустимое значение. В max может быть 10 символов. Изначально я хотела – все, что больше 10 чисел -> неправильно. Но пользователь может перед этими 10 цифрами и входящими в диапазон ввести нулики. Т.е. при переводе в число строка из 40 символов может преобразоваться в нормальное число. Как лучше сделать? Сейчас у меня так :
Код

procedure BOLSHOE_CHISLO ( n:string; var f: boolean);
var j,k,n:integer; l:longint; c:array [1..100] of longint;
begin
f:=true;
for j:=1 to length (n) do
begin
l:=ord(n[j])-48;
c[j]:=l;k:=k+1;
end;
if k=10 then begin
if (c[1]=3) or (c[1]>3) then f:=false;
и так до 10
end;
if k > 10 then begin
for n:=j downto 1 do
?????????
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата(>hamka< @ 8.03.05 20:54)
Но пользователь может перед этими 10 цифрами и входящими в диапазон ввести нулики. Т.е. при переводе в число строка из 40 символов может преобразоваться в нормальное число. Как лучше сделать?

Лучше всего удалить незначащие нули:
Код
Function LeadZeroes(s: string): string;
 begin
   while s[1] = '0' Do delete(s, 1, 1)
   LeadZeroes := s
 end;


P.S. Не отвлекайтесь от темы... Сколько можно уже? Вам же уже приводили пример полностью работоспособной программы... Зачем это опять переделывать?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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


Цитата(volvo @ 8.03.05 22:05)
P.S. Не отвлекайтесь от темы... Сколько можно уже? Вам же уже приводили пример полностью работоспособной программы... Зачем это опять переделывать?

Если я бы программу эту сдала blink.gif , я бы тогда не спрашивала. Мне нужно учесть все нюансы.
И та программа была не про это. Там стоял совершенно другой вопрос!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

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

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


как проделать вот это.
когда пользователь вводит 0, то ошибка, когда все нули тож ошибка, и когда первые нули, а потом число, то тоже у меня в программе это как ошибка. а я хочу, чтобы число впереди в нуликами воспринималось.
Код

readln(n);
for j:=1 to length (n) do
begin
k:=k+1;
end;
for j:=1 to length (n) do
begin
if (k > 1) and (n[j]='0') then begin
writeln('Некорректное значение. Нажмите <Enter> для продолжения');
readkey; goto main; end;
if k > 1 then begin
while n[1]='0' do delete (n,1,1); end;
end;
BOLSHOE_CHISLO (n,f);

я понимаю что что-то в цикле не прав. Где моя ошибка? blink.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ну и сколько раз я должен писАть одно и то же? Если Вам решение не нравится, Вы бы хоть сказали, чем именно. Двумя постами выше написано:
Код
{ Чуть-чуть изменено (для учета одного '0')}
Function LeadZeroes(s: string): string;
begin
  if s <> '0' then
    while s[1] = '0' Do delete(s, 1, 1);
  LeadZeroes := s
end;


Ну так примените это:
Код

readln(n);
n := LeadZeroes(n);

{ продолжаем работать с N}
if n = '' then { введено только несколько нулей - ошибка }
else { начальные нули успешно удалены или был один '0'}

Кстати, что за метка main? куда она ведет? И почему опять метки, Вам что процедурами пользоваться нельзя.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

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

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


все решения мне нравятся =)) тока, если они работают не так, как мне нужно, то я их меняю.
сейчас у меня прога почти полностью работает. тока если вводится один нуль, то пишется, что неправильно, а если несколько нулей, то происходит переход на след. строчку и программа зависает. И мне нужно , чтобы выводилась ошибка. О она даже при проверке на пустую строчку не выводится, а виснет. И с else я не знаю, что делать. там запуться можно, т.к. куда-то надо end ставить. sad.gif
вот что у меня сейчас


Прикрепленные файлы
Прикрепленный файл  LABA_1.PAS.doc ( 27.5 килобайт ) Кол-во скачиваний: 531
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата(>hamka< @ 9.03.05 16:20)
все решения мне нравятся =)) тока, если они работают не так, как мне нужно, то я их меняю.

Так вот чтобы они работали так, как Вам нужно, определитесь сначала, что Вы вообще от программы хотите. Вы же даже тесты для нее не придумали. Как Вы ее вообще проверяете?

Сколько вариантов было предложено - и ни один не подошел? В таком случае, может Вам стоит поучиться задавать вопросы?

Цитата
И с else я не знаю, что делать. там запуться можно
А почему? Потому что Goto используете... Вот и разбирайтесь в этих переходах... А процедуры Вы просто игнорируете, хотя с их помощью программа сократится до 20 строк... Ну как хотите, изобретайте велосипед дальше...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

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

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


Всем спасибо. Велосипед изобретен =)). Я нашла способ работы с нулями.
Программа бы никогда не сократилась до 20 строк, т.к. сдававшие ее укладывались в 200 строк. А у меня всего 141 smile.gif
Тока один вопрос остался. При запросе кол-ва цифр. Enter у меня идет как ошибка. А при заполнении вектора при нажатии Enter заносится 0. Почему. ведь алгоритм везде один и тот же?
и еще один
Код

trunc(Exp((length(n)-i)*Ln(10)))

как именно работает эта формула? Ln - это логарифм. А в справочнике exp я не нашла sad.gif

Сообщение отредактировано: >hamka< -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






А что будет, если я сделаю из нее 30 строк? На будущее - "прежде, чем сказать _невозможно_, подумай, прав ли ты".

Если ваши сокурсники укладываются в 200 строк, это совсем не значит, что нельзя уложиться в 30... :yes:
 К началу страницы 
+ Ответить 

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

 





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