Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Grewer
0 / 0 / 0
Регистрация: 06.03.2010
Сообщений: 2
1

Ошибка в памяти при запуске программы

09.03.2010, 17:17. Просмотров 395. Ответов 3
Метки нет (Все метки)

Доброго времени суток!
в общем...контрольная по паскалю, задачка, вроде как написал, вроде как работает, но не могу победить ошибку памяти
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
{сервисный центр}
  Program Model1;
  uses Crt;
 
  type Element = record
       t1:   real; {состояние генератора поступления приборов в первую очередь}
       t2:   real; {состояние первой очереди }
       t3:   real; {состояние ремонта}
       t4:   real; {состояние второй очереди}
       t5:   real; {состояние регулировки}
       dl_och1: integer; {длина первой очереди}
       dl_och2: integer; {длина второй очереди}
       end;
 
  Function Time(lambda: real): real;
  var tt: real;
  begin
      repeat   tt:=random   until  tt>0.0;      {Генерируем положительное
                                                 случ.число по равномерному
                                                 закону}
      Time:=-(Ln(tt)*lambda);                 {Time - по показательному закону}
 
  end;
 
  procedure raschet(MaxNum:Integer; L1,L2,L3:Integer);
  var  Ocher: array [0 .. 100]  of Element;
       MaxNumber : integer;
       Lambda1   : real; {интенсивность поступления приборов в ремонт, минты}
       Lambda2   : real; {время ремонта приборов, минуты}
       Lambda3   : real; {время регулировки приборов, минуты}
       i,j:integer;
       t:real;
       SrOch1,SrOch2:real;
       Empty:Element;
    T_Obshee, T_M1, T_M2 :real;
 
  Begin
{Очистка массива очереди}
       Empty.t1 := 0;
       Empty.t2 := 0;
       Empty.t3 := 0;
       Empty.t4 := 0;
       Empty.t5 := 0;
       Empty.dl_och1 := 0;
       Empty.dl_och2 := 0;
 
       For i:=0 to 100 do Ocher[i] := Empty;
{конец очистки массива}
 
       MaxNumber := MaxNum;
       Lambda1   := L1;
       Lambda2   := L2;
       Lambda3   := L3;
{первая запись в очередь}
       Ocher[0].t1 := 0;
       Ocher[0].dl_och1 := 0;
       Ocher[0].dl_och2 := 0;
{заполняем первый столбец, к предыдущему значению прибавляем рандомное значение}
       For i:=1 to (MaxNumber-1) do
       begin
            Ocher[i].t1 := Ocher[i-1].t1 + time(Lambda1);
       end;
{считаем состояние t2, t3}
       Ocher[0].t2 := 0;
       Ocher[0].t3 := time(Lambda2);
       For i:=1 to (MaxNumber-1) do
       begin
            t := time(Lambda2);
            if Ocher[i-1].t3 > Ocher[i].t1 then
            begin
               Ocher[i].t2 := Ocher[i-1].t3;
            end
            else
            begin
               Ocher[i].t2 := Ocher[i].t1;
            end;
 
            Ocher[i].t3 := Ocher[i].t2 + t;
       end;
 
{считаем состояние t4, t5}
       Ocher[0].t4 := Ocher[0].t3;
       Ocher[0].t5 := Ocher[0].t4 + time(Lambda3);
       For i:=1 to (MaxNumber-1) do
       begin
            t := time(Lambda3);
 
            if Ocher[i-1].t5 > Ocher[i].t3 then
            begin
               Ocher[i].t4 := Ocher[i-1].t5;
            end
            else
            begin
               Ocher[i].t4 := Ocher[i].t3;
            end;
 
            Ocher[i].t5 := Ocher[i].t4 + t;
       end;
{весь массив заполнен, начинаем считать очередь 1,2}
       for i:=0 to (MaxNumber-2) do
         For j:=i+1 to (MaxNumber-1) do
         begin
           if Ocher[i].t3 < Ocher[j].t1 then break;
           Ocher[i].dl_och1 := Ocher[i].dl_och1 + 1;
         end;
 
       for i:=0 to (MaxNumber-2) do
         For j:=i+1 to (MaxNumber-1) do
         begin
           if Ocher[i].t5 < Ocher[j].t3 then break;
           Ocher[i].dl_och2 := Ocher[i].dl_och2 + 1;
         end;
{считаем среднюю длину очереди 1 и 2}
      SrOch1 := 0;
      SrOch2 := 0;
{суммируем все очереди}
      For i:=0 to (MaxNumber-1) do
      begin
         SrOch1 := SrOch1 + Ocher[i].dl_och1;
         SrOch2 := SrOch2 + Ocher[i].dl_och2;
      end;
{делим на количество элементов очереди}
      SrOch1 := SrOch1 / MaxNumber;
      SrOch2 := SrOch2 / MaxNumber;
 
{считаем общее время работы}
    T_Obshee:=Ocher[MaxNumber-1].t5 - Ocher[0].t1;
{считаем время работы мастера 1 и мастера 2}
    T_M1:=0;
    T_M2:=0;
    For i:=0 to (MaxNumber-1) do
    begin
        T_M1:=T_M1 + Ocher[i].t3 - Ocher[i].t2;
        T_M2:=T_M2 + Ocher[i].t5 - Ocher[i].t4;
    end;
 
 
{выводим на экран}
      Writeln(' интенсивность поступления:',L1,' время ремонта приборов:',L2,' время рег-ки приборов:',L3);
 
      Writeln('Средняя длина очереди 1: ',SrOch1:4:1);
      Writeln('Средняя длина очереди 2: ',SrOch2:4:1);
      Writeln('Вероятность простоя первого мастера: ',(T_Obshee - T_M1)/T_Obshee:5:3);
      Writeln('Вероятность простоя второго мастера: ',(T_Obshee - T_M2)/T_Obshee:5:3);
      Writeln('*************')
 
 
  End;
 
Begin
   Randomize;
   ClrScr;
   raschet(100, 30, 5, 25);
   ReadKey;
 
End.
вот в таком виде программа работает, когда меняешь значение
Pascal
1
2
3
4
5
Begin
   Randomize;
   ClrScr;
   raschet(100, 30, 5, 25);
   ReadKey;
на
Pascal
1
2
3
4
5
Begin
   Randomize;
   ClrScr;
   raschet(10000, 30, 5, 25); {и более}
   ReadKey;
выскакивает ошибка программы, якобы ей памяти не хватает так то да, массивов много...много чего запомнить надо...но надо чтоб попроще было...
может кто помочь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2010, 17:17
Ответы с готовыми решениями:

Вывод результата при запуске программы
Кто-нибудь подскажите пожалуйста. При запуске программы дает вводить...

Как убрать ненужный нуль при запуске программы?
program ob_Par; USES CRT; var Ct,Cob,n,St:real; begin ...

ошибка при запуске программ с модулем Graph
Люди подскажите пожалуйста что значят эти ошибки и как с ними...

Эффективность программы по памяти и по времени
Напишите программу для решения поставленной задачи, которая будет эффективна...

Окно с паролем при запуске
Доброго времени суток. У меня такая вот задачка: Необходимо поставить пароль на...

3
Puporev
Модератор
54586 / 42092 / 29061
Регистрация: 18.05.2008
Сообщений: 99,297
09.03.2010, 17:55 2
При работе со статистическими массивами Вы это не победите. 64кб они не резиновые. Если нужно больше нужно использовать динамическую память в виде указателей на массивы.
0
Grewer
0 / 0 / 0
Регистрация: 06.03.2010
Сообщений: 2
09.03.2010, 18:06 3
ололо))
а можно как ни будь источник где почитать про это?
если честно, 3ее предложение у Вас не понял
0
Puporev
Модератор
54586 / 42092 / 29061
Регистрация: 18.05.2008
Сообщений: 99,297
09.03.2010, 18:20 4
http://www.google.ru/search?hl=ru&so...+в+Google&lr=&
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2010, 18:20

Ошибка при запуске программы на строке Sound
Здравствуйте. При запуске программа выдает следующую ошибку. В чем может быть...

Почему при запуске программы в программе появляется консоль?
Код программы, которая запускает саму себя через некоторое время: ...

При запуске программы создается файл .pdb - для чего он?
Пишу программу на паскале.net Запускаю. Сразу скажу модуль Crt (незнаю нужно не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru