Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 14:44   #1
Танкист
Пользователь
 
Регистрация: 01.02.2010
Сообщений: 18
По умолчанию Зависание при выполнении программы

Пытаюсь сделать программу, которая будет генерировать случайные числа от 1 до 100, компелируется нормально, без ошибок, но когда указываю в эдит1 число, то программа зависает... Подскажите что не так!
з.ы. В эдит я хочу прописать кол-во генераций чисел
Код:
var
f: string;
b: string;
c: string;
begin
edit1.Text:=c;
memo1.Lines.Text:=f;
while f<=c do
b:=inttostr(1+random(100));
memo1.Lines.Add(b);
Танкист вне форума Ответить с цитированием
Старый 18.03.2012, 15:05   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
edit1.Text:=c;
memo1.Lines.Text:=f;
не инициализируете переменные f и c но зачем то пытаетесь их значение присвоить свойствам компонентов
Код:
while f<=c do
b:=inttostr(1+random(100));
memo1.Lines.Add(b);
тут при условии f<=c выполняется в цикле только 1 строка
Код:
b:=inttostr(1+random(100));
эта строка
Код:
 memo1.Lines.Add(b);
выполняется только 1 раз тогда когда цикл закончен.

В основном, вы не знаете что содержится в переменных c и f
естественно если условие цикла выполняется то он будет бесконечным while f<=c do
Вы точно написали то что хотели ?
пишите свои комментарии к действиям,
и понятно будет
где вы сделали не то что хотели.

На вскидку:= Вы хотели написать
Код:
var
f: string;
b: string;
c: string;
begin
c:=edit1.Text;
f:=memo1.Lines.Text;
while f<=c do
begin
b:=inttostr(1+random(100));
memo1.Lines.Add(b);
end;
но опять же я не уверен что вы хотели сделать.
И если условие f<=c будет ложь, то цикл просто не будет выполнятся, а если истина то цикл будет бесконечен, в цикле надо менять значение переменной с или f чтобы он когда нибудь завершился

Последний раз редактировалось vovk; 18.03.2012 в 15:37.
vovk вне форума Ответить с цитированием
Старый 18.03.2012, 15:16   #3
Танкист
Пользователь
 
Регистрация: 01.02.2010
Сообщений: 18
По умолчанию

Код:
var
f: string;
b: string;
c: string;
begin
edit1.Text:=c; //кол-во повторений цикла
memo1.Lines.Text:=f; //кол-во строк в мемо
while f<=c do //пока кол-во строк в мемо меньше значения в едит, делать
b:=inttostr(1+random(100));
memo1.Lines.Add(b);
и почему при истине, цикл будет бесконечным?
Танкист вне форума Ответить с цитированием
Старый 18.03.2012, 15:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Смотрим f<=c. В f и в c ничего не присвоено, скорее всего там пусто, значит условие будет выполняться всегда, вот и бесконечный цикл
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.03.2012, 15:50   #5
Танкист
Пользователь
 
Регистрация: 01.02.2010
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Смотрим f<=c. В f и в c ничего не присвоено, скорее всего там пусто, значит условие будет выполняться всегда, вот и бесконечный цикл
так я же присваиваю с значения едита, ну с f я не знаю как поступить
Танкист вне форума Ответить с цитированием
Старый 18.03.2012, 15:54   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от Танкист Посмотреть сообщение
Код:
var
f: string;
b: string;
c: string;
begin
edit1.Text:=c; //кол-во повторений цикла
memo1.Lines.Text:=f; //кол-во строк в мемо
while f<=c do //пока кол-во строк в мемо меньше значения в едит, делать
b:=inttostr(1+random(100));
memo1.Lines.Add(b);
и почему при истине, цикл будет бесконечным?
а почему он должен закончится?
Он закончится только если условие f<=c не выполняется

сейчас объясню ещё раз что вы пишите
Код:
var
f: string;//объявляем переменную типа стринг  с имнем f 
b: string;//объявляем переменную типа стринг  с имнем b 
c: string;//объявляем переменную типа стринг  с имнем c 
begin
edit1.Text:=c; //кол-во повторений цикла//присваиваем  значению свойства text компонента edit1 значение переменной c (и зачем? и какое значение содержится в переменной c ?)  
memo1.Lines.Text:=f; //кол-во строк в мемо//присваиваем  значению свойства text компонента memo1 значение переменной f (и зачем? и какое значение содержится в переменной f ?)  
while f<=c do //пока кол-во строк в мемо меньше значения в едит, делать//пока  значение переменной f меньше или равно значению переменной c выполняем нижестоящую строку (какое значение по вашему меньше "15" или "3")

b:=inttostr(1+random(100));// это попытка строковой переменной присвоить целочисленное значение которая (попытка) выполняется в цикле
memo1.Lines.Add(b)// тут то что выполняется после цикла а выполняется тут добавление строки в мемо ;

Последний раз редактировалось vovk; 18.03.2012 в 15:58.
vovk вне форума Ответить с цитированием
Старый 18.03.2012, 16:08   #7
Танкист
Пользователь
 
Регистрация: 01.02.2010
Сообщений: 18
По умолчанию

ну хорошо, тогда как мне присвоить переменной с значения едит1 и как указать, что f это кол-во строк в мемо?
Танкист вне форума Ответить с цитированием
Старый 18.03.2012, 16:36   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Код:
var
f,c: integer;
begin
c:=strtoint(edit1.Text); 
f:=strtoint(memo1.Lines.Text);// вот тут заковыка не знаю как вы выставляете значение для максимального количества линий, предположу что вводите в memo
while f>=c do
begin
memo1.Lines.Add(inttostr(1+random(100)));
inc(c);
end;
vovk вне форума Ответить с цитированием
Старый 18.03.2012, 16:47   #9
Танкист
Пользователь
 
Регистрация: 01.02.2010
Сообщений: 18
По умолчанию

максимального значения линий в мемо вообще нет, это хначение задаётся в едите, т.е. кол-во строк в мемо=значению в едите, которое пользователь задал
и ещё - что такое inc(c)?
Танкист вне форума Ответить с цитированием
Старый 18.03.2012, 17:08   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

inc(с) это увеличение переменной с на 1 эквивалент с:=c+1
я не говорил про максимальное количество линий "вообще", я говорил про максимальное значение линий которое выбрал пользователь, если в эдите задаётся только ограничение, и записывать надо с шаго м 1 то так
Код:
var
f,c: integer;
begin
f:=strtoint(edit1.Text) -1; 
c:=0;
while f>=c do
begin
memo1.Lines.Add(inttostr(1+random(100)));
inc(c);
end;
или
Код:
var
f: integer;
begin

f:=strtoint(edit1.Text) ; 
memo1.lines.clear;
while f>memo1.lines.count do
begin
memo1.Lines.Add(inttostr(1+random(100)));
end;
vovk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание программы при выполнении цикла Кирилл Дегтярёв Помощь студентам 4 22.01.2011 17:28
Зависание программы при отсутствии подключения dolphin705 Работа с сетью в Delphi 0 17.01.2011 02:05
Зависание программы при выходе codermoder Работа с сетью в Delphi 6 18.12.2010 23:16
Ошибки при выполнении программы grustniy Общие вопросы Delphi 2 04.09.2010 07:19
Зависание программы при выполнении GET запроса iHikita Общие вопросы .NET 1 16.07.2010 00:20