Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.12.2011, 00:03
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
Вопрос Вопрос по TEdit

Почему может вываливаться код Count:= strtoint(edit1.Text);
в edit1.text находится '300'. Проверял через ватчер.
Ответить с цитированием
  #2  
Старый 22.12.2011, 00:08
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Код:
unit Unit1; 

interface 

uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls; 

Const MaxSize=MaxInt; 

type 
 TForm1 = class(TForm) 
 Button1: TButton; 
 Label1: TLabel; 
 Label2: TLabel; 
 Edit1: TEdit; 
 Label3: TLabel; 
 Edit2: TEdit; 
 Label4: TLabel; 
 Edit3: TEdit; 
 Label5: TLabel; 
 Label6: TLabel; 
 Edit4: TEdit; 
 Label7: TLabel; 
 Edit5: TEdit; 
 Label8: TLabel; 
 Label9: TLabel; 
 Edit6: TEdit; 
 Label10: TLabel; 
 Edit7: TEdit; 
 Label11: TLabel; 
 Label12: TLabel; 
 Edit8: TEdit; 
 Label13: TLabel; 
 Edit9: TEdit; 
 Label14: TLabel; 
 Label15: TLabel; 
 Edit10: TEdit; 
 Label17: TLabel; 
 Label16: TLabel; 
 Edit11: TEdit; 
 Label18: TLabel; 
 procedure Button1Click(Sender: TObject); 
 private 
 { Private declarations } 
 public 
 { Public declarations } 
 end; 

 terminal = record // Тип для терминала 
 time:byte; // время 
 inwork: boolean; // работает ли терминал 
 end; 

 computer = record // Тип для компьютера 
 time:byte; // время 
 inwork: boolean; // работает ли компьютер 
 end; 

var 
 Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure compare(var t1,t2,t3:terminal); 
var a:array[1..3]of integer; 
 k:integer; 
begin 
 a[1]:=t1.time; // запоминаем время работы для 3 терминалов 
 a[2]:=t2.time; 
 a[3]:=t3.time; 
 if a[3] if a[2] case k of // выбираем нужный терминал 
 1: if not t1.inwork then t1.inwork:=true else // если он не занят то загружаем его 
 if (t3.time begin 
 if not t3.inwork then t3.inwork:=true 
 else t2.inwork:=true; 
 end 
 else 
 begin 
 if not t2.inwork then t2.inwork:=true 
 else t3.inwork:=true; 
 end; 
 2: if not t2.inwork then t2.inwork:=true else // если он не занят то загружаем его 
 if (t3.time begin 
 if not t3.inwork then t3.inwork:=true 
 else t1.inwork:=true; 
 end 
 else 
 begin 
 if not t1.inwork then t1.inwork:=true 
 else t3.inwork:=true; 
 end; 
 3: if not t3.inwork then t3.inwork:=true else // если он не занят то загружаем его 
 if (t2.time begin 
 if not t2.inwork then t2.inwork:=true 
 else t1.inwork:=true; 
 end 
 else 
 begin 
 if not t1.inwork then t1.inwork:=true 
 else t2.inwork:=true; 
 end; 
 end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var users:array[1..MaxSize] of byte; // время прихода пользователей 
 terminal1:array[1..MaxSize] of terminal; // время обработки задания на терминале 1 
 terminal2:array[1..MaxSize] of terminal; // время обработки задания на терминале 2 
 terminal3:array[1..MaxSize] of terminal; // время обработки задания на терминале 3 
 computer1, computer2: computer; // время обработки программы на ЭВМ 1 и ЭВМ 2 
 i,j,k,l,otkaz:integer; 
 Count,TimeOfWorkOfComputer1,TimeOfWorkOfComputer2,TimeUser, 
 DeltaTimeUser,TimeTerminal1,DeltaTimeTerminal1,TimeTerminal2, 
 DeltaTimeTerminal2,TimeTerminal3,DeltaTimeTerminal3: integer; 

begin 
Count:= strtoint(edit1.Text); // количество пользователей 
TimeOfWorkOfComputer1:= strtoint(edit10.Text); // время работы ЭВМ1 
TimeOfWorkOfComputer2:= strtoint(edit11.Text); // время работы ЭВМ2 
TimeUser:= strtoint(edit8.Text); // среднее время ожидания пользователя 
DeltaTimeUser:= strtoint(edit9.Text); // разброс времени ожидания пользователя 
TimeTerminal1:= strtoint(edit2.Text); // среднее время работы терминала 1 
DeltaTimeTerminal1:= strtoint(edit3.Text); // разброс времени работы терминала 1 
TimeTerminal2:= strtoint(edit4.Text); // среднее время работы терминала 2 
DeltaTimeTerminal2:= strtoint(edit5.Text); // разброс времени работы терминала 2 
TimeTerminal3:= strtoint(edit6.Text); // среднее время работы терминала 3 
DeltaTimeTerminal3:= strtoint(edit7.Text); // разброс времени работы терминала 3 

randomize; 
for i:=1 to Count do 
 begin 
 users[i]:=TimeUser+random(DeltaTimeUser*2)-DeltaTimeUser; // время прихода пользователей: 10+/-2 
 terminal1[i].time:=TimeTerminal1+random(2*DeltaTimeTerminal1)-DeltaTimeTerminal1; // время обработки задания на терминале 1: 20+/-2 
 terminal1[i].inwork:=false; // терминал 1 не в работе 
 terminal2[i].time:=TimeTerminal2+random(2*DeltaTimeTerminal2)-DeltaTimeTerminal2; // время обработки задания на терминале 2: 40+/-10 
 terminal2[i].inwork:=false; // терминал 2 не в работе 
 terminal3[i].time:=TimeTerminal3+random(2*DeltaTimeTerminal3)-DeltaTimeTerminal3; // время обработки задания на терминале 3: 40+/-20 
 terminal3[i].inwork:=false; // терминал 3 не в работе 
 end; 
computer1.time:=TimeOfWorkOfComputer1; // время обработки программы на ЭВМ 1: 15 
computer1.inwork:=false; // ЭВМ 1 не в работе 
computer2.time:=TimeOfWorkOfComputer2; // время обработки программы на ЭВМ 2: 30 
computer2.inwork:=false; // ЭВМ 2 не в работе 
i:=1; 
j:=1; 
k:=1; 
l:=1; 
otkaz:=0; 
while (i<=Count) do 
 begin 
 dec(users[i]); // уменьшаем время ожидания прихода пользователя 
 if (users[i]=0) then // если пользователь пришел 
 begin 
 if (terminal1[j].inwork and terminal2[k].inwork and terminal3[l].inwork) then inc(otkaz) // если все терминалы заняты то отказ 
 else compare(terminal1[j],terminal2[k],terminal3[l]); // выбираем неработающий терминал с наименьшим временем 
 inc(i); // переходим к следующему пользователю 
 end; 
 if terminal1[j].inwork then dec(terminal1[j].time); // уменьшаем время обработки задания если оно есть 
 if terminal2[k].inwork then dec(terminal2[k].time); // уменьшаем время обработки задания если оно есть 
 if terminal3[l].inwork then dec(terminal3[l].time); // уменьшаем время обработки задания если оно есть 

 if computer1.inwork then dec(computer1.time); // уменьшаем время обработки программы если оно есть 
 if computer2.inwork then dec(computer2.time); // уменьшаем время обработки программы если оно есть 

 if (terminal1[j].time=0) then // если на терминале уже обработано 
 if not computer1.inwork then // если ЭВМ1 не занят 
 begin 
 inc(j); // переходим к следующему времени обработки задания 
 computer1.inwork:=true; // ЭВМ1 занят 
 end 
 else inc(terminal1[j].time); // продлеваем занятость терминала на 1 минуту 
 if (terminal2[k].time=0) then // если на терминале уже обработано 
 if not computer1.inwork then // если ЭВМ1 не занят 
 begin 
 inc(k); // переходим к следующему времени обработки задания 
 computer1.inwork:=true; // ЭВМ1 занят 
 end 
 else inc(terminal2[k].time); // продлеваем занятость терминала на 1 минуту 
 if (terminal3[l].time=0) then // если на терминале уже обработано 
 if not computer2.inwork then // если ЭВМ2 не занят 
 begin 
 inc(l); // переходим к следующему времени обработки задания 
 computer2.inwork:=true; // ЭВМ2 занят 
 end 
 else inc(terminal3[l].time); // продлеваем занятость терминала на 1 минуту 
 if (computer1.time=0) then // если программа обработана на ЭВМ1 переходим к следующему времени обработки программы 
 begin 
 computer1.time:=TimeOfWorkOfComputer1; 
 computer1.inwork:=false; 
 end; 
 if (computer2.time=0) then // если программа обработана на ЭВМ2 переходим к следующему времени обработки программы 
 begin 
 computer2.time:=TimeOfWorkOfComputer2; 
 computer2.inwork:=false; 
 end; 

 end; 
 label1.Caption:='Вероятность отказа = '+inttostr(otkaz)+' из '+inttostr(Count)+' ('+floattostr(round(100*otkaz/count))+'%)'; 
end; 


end.
Ответить с цитированием
  #3  
Старый 22.12.2011, 00:17
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если TEdit пуст или там не число, используй StrToIntDef.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Ivan3635 (22.12.2011)
  #4  
Старый 22.12.2011, 00:24
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Если TEdit пуст или там не число, используй StrToIntDef.
он не пуст, но при таком использовании тоже вывалилась

вываливается даже при s:=edit1.text; s:string;
Ответить с цитированием
  #5  
Старый 22.12.2011, 00:32
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

С какой ошибкой вываливается?
Ответить с цитированием
  #6  
Старый 22.12.2011, 00:34
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
С какой ошибкой вываливается?
Access violation
Ответить с цитированием
  #7  
Старый 22.12.2011, 00:35
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Код:
Count:= strtoint(edit1.Text); // количество пользователей 
Поставь курсор на эту строку и запусти программу по F4, когда нажмешь на кнопку Button1 попадёшь на указанную строку. Посмотри, что там такого криминального в этом Edit-е.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #8  
Старый 22.12.2011, 00:40
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Код:
Count:= strtoint(edit1.Text); // количество пользователей 
Поставь курсор на эту строку и запусти программу по F4, когда нажмешь на кнопку Button1 попадёшь на указанную строку. Посмотри, что там такого криминального в этом Edit-е.
в том то и дело что ничего: edit1.text='300' - вот что отображатся при подсказке.
Ответить с цитированием
  #9  
Старый 22.12.2011, 00:45
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
Восклицание

Сюда кинул исходники всего проекта, он небольшой, весь выложен во втором посте, просто чтоб не заморачиваться если кто хочет посмотреть.
Ответить с цитированием
  #10  
Старый 22.12.2011, 00:47
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Чудес ведь не бывает, сейчас гляну исходники.
Как и говорил чудес не бывает, вот твоя ошибка:
Код:
Const MaxSize=MaxInt;
слишком большой размер. Дельфи 7 не смогла на стадии компиляции найти ошибку, а Дельфи 2009, чётко сообщило о размере большем 2Gb!!!
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 22.12.2011 в 00:55.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Ivan3635 (22.12.2011)
  #11  
Старый 22.12.2011, 00:59
Ivan3635 Ivan3635 вне форума
Прохожий
 
Регистрация: 22.12.2011
Сообщения: 7
Репутация: 10
Хорошо

Цитата:
Сообщение от angvelem
Чудес ведь не бывает, сейчас гляну исходники.
Как и говорил чудес не бывает, вот твоя ошибка:
Код:
Const MaxSize=MaxInt;
слишком большой размер. Дельфи 7 не смогла на стадии компиляции найти ошибку, а Дельфи 2009, чётко сообщило о размере большем 2Gb!!!
Блин, а ведь первое о чем подумал это было это, так нет привязался к этому Edit'у. Спасибо Вам огромное спасли курсовой проект. А то завтра уже сдавать.
Ответить с цитированием
  #12  
Старый 22.12.2011, 01:02
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

На всякий "дурной" случай, всё же используй StrToIntDef вместо StrToInt.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:35.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter