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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.10.2018, 20:34   #1
DKFL2002
 
Регистрация: 30.09.2018
Сообщений: 3
По умолчанию [Pascal ABC.NET] Графика и CRT. Ошибка, которая не должна быть

Пишу программу, в которой подключен модуль GraphABC и CRT
При компиляции выскакивает два окна с ОШИБКОЙ (мол в программе что то не так) хотя компиляция проходит нормально

ps пишу треугольник серпинского с возможностью увеличения и уменьшения

версия паскаля:
3.2 сборка 1514 (11.08.2017)

вот код:

Код:
uses GraphABC,CRT;

const
          w = 640;
          h = 480;
          kol_pixel = 200000;
          x_speed = 5;
          y_speed = 5;
          increase = 5;

var
          map: array [1..kol_pixel, 1..kol_pixel] of boolean;
          x_mouse_cursor, y_mouse_cursor: longint;
          n, m, i, j: longint;
          x, y: longint;
          a, b: array [1..3] of longint;
          read_command: char;
          scale: longint;

begin
          
          LockDrawing;
          
          scale := round(kol_pixel / w);
          
          for i := 1 to 3 do
          begin
                    a[i] := random(kol_pixel);
                    b[i] := random(kol_pixel);
          end;
          
          
          
          while True do
          begin
                    
                    if KeyPressed then
                    begin
                              read_command := readkey;
                              case read_command of
                                        'w': dec(x_mouse_cursor, x_speed);
                                        's': inc(x_mouse_cursor, x_speed);
                                        'd': inc(y_mouse_cursor, y_speed);
                                        'a': dec(y_mouse_cursor, y_speed);
                                        ' ': exit;
                                        '+': dec(scale, increase);
                                        '-': inc(scale, increase);
                              end;
                              if (x_mouse_cursor <= 0) then x_mouse_cursor := 1;
                              if (x_mouse_cursor >= kol_pixel - w - 5) then x_mouse_cursor := kol_pixel - w - 6;
                              if (y_mouse_cursor <= 0) then y_mouse_cursor := 1;
                              if (y_mouse_cursor >= kol_pixel - w - 5) then y_mouse_cursor := kol_pixel - w - 6;
                              
                    end;
                    
                    i := random(3) + 1;
                    x := abs(round((x - a[i]) / 2 + a[i]));
                    y := abs(round((y - b[i]) / 2 + b[i]));
                    
                    map[x, y] := True;
                    
                    i := 1;
                    j := 1;
                    
                    n := scale;
                    m := scale;
                   
                    clearwindow;
                   
                    while (i <= w) do
                    begin
                              while (j <= h) do
                              begin
                                        if map[x_mouse_cursor+n,y_mouse_cursor+m] then setpixel(x_mouse_cursor+n,y_mouse_cursor+m,clBlack);
                                        m:=m+scale;
                                        inc(j);
                              end;
                              n:=n+scale;
                              m:=scale;
                              j:=1;
                              inc(i);
                    end;
                    
                    redraw;
                    
          end;
end.
DKFL2002 вне форума Ответить с цитированием
Старый 03.10.2018, 20:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

первое и САМОЕ главное НЕ ТАК
не приведены эти самые сообщения
Цитата:
два окна с ОШИБКОЙ (мол в программе что то не так)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 03.10.2018, 20:56   #3
DKFL2002
 
Регистрация: 30.09.2018
Сообщений: 3
По умолчанию

Прекращена работа программы "..."
Windows может провести поиск способа устранения этой ошибки в Интернете
DKFL2002 вне форума Ответить с цитированием
Старый 03.10.2018, 21:27   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых, банально не хватает памяти (напомните, сколько массив map: array [1..kol_pixel, 1..kol_pixel] of boolean; должен занять памяти?!)

во-вторых, мне абсолютно непонятен алгоритм, который у Вас в коде (выделил)
(и, кстати, там получаются значения, выходящие за пределы окна:
Код:

                    while (i <= w) do
                    begin
                              while (j <= h) do
                              begin
                                        if map[x_mouse_cursor+n,y_mouse_cursor+m] 
                                           then begin
                                              if ((x_mouse_cursor+n)<1) or ((y_mouse_cursor+m)<1) or ((x_mouse_cursor+n)>=w) or ((y_mouse_cursor+m)>h) 
                                              then TextOut(10,10,'error')
                                              else setpixel(x_mouse_cursor+n,y_mouse_cursor+m,clBlack);
                                             end; 
                                        m:=m+scale;
                                        inc(j);
                              end;
                              n:=n+scale;
                              m:=scale;
                              j:=1;
                              inc(i);
                    end;
в третьих, подтверждаю, что при включённом модуле CRT программа при запуске валится с exception
почему это происходит - я не знаю.
попробуйте переписать без использования CRT
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2018, 21:33   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от DKFL2002 Посмотреть сообщение
Прекращена работа программы "..."
Windows может провести поиск способа устранения этой ошибки в Интернете
я Вам больше скажу.

попробуйте запустить такую "программу":

Код:
uses GraphABC,CRT;

begin
          
end.
ещё вопросы есть?

а теперь поменяйте местами библиотеки в Uses:
Код:
uses CRT, GraphABC;

begin
          
end.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 03.10.2018, 21:58   #6
DKFL2002
 
Регистрация: 30.09.2018
Сообщений: 3
По умолчанию

расчитано на 20000000 но я уменьшал и до 200 и не работало

насчёт m:=m+scale и n:=n+scale - это строки с помощью которых я вывожу некую часть изображения и беру только n-ный пиксель чем меньше scale - тем больше увелечение фрагмента картинки

попробовал я поменять местами и сработало!

правда программу надо попровлять

спасибо за помощь
DKFL2002 вне форума Ответить с цитированием
Старый 04.10.2018, 07:08   #7
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

я делаю просто. убираю код (копирую, скажем в Блокнот). оставляю только begin и end и запускаю программу. нет кода - нет ошибок. а потом по строчке или по две начинаю добавлять свой код из Блокнота. вот там-то и находятся ошибки и недочёты
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 04.10.2018, 09:27   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
я делаю просто. убираю код (копирую, скажем в Блокнот). оставляю только begin и end и запускаю программу. нет кода - нет ошибок.
Не всегда!
посмотрите мой пост #5 выше.
программа
Код:
uses GraphABC,CRT;
begin
end.
при запуске тут же рушится.

впрочем, неважно, автор темы уже сдвинулся с мёртвой точки. Будут ещё вопросы, обратится ещё раз.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.10.2018, 11:35   #9
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

вооот! я видел ваш пост выше. значит, дело не в коде, а в том, что ещё выше. если и модули *.pas убрать? тогда и обнаружим слабое звено.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 17.10.2018, 12:52   #10
jillitil
Форумчанин
 
Аватар для jillitil
 
Регистрация: 17.10.2018
Сообщений: 184
По умолчанию

Цитата:
Сообщение от DKFL2002 Посмотреть сообщение
два окна с ОШИБКОЙ (мол в программе что то не так)
Вас попросили привеси за руку сюда эти окна.
Подозреваю что вы хотите выделить 40 ГИГАБАЙТ статической памяти, вот оно и ругается.
jillitil вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal ABC.NET] ошибка во время работы при использовании System.Windows.Media.MediaPlayer Roman_Jarckov23 Паскаль, Turbo Pascal, PascalABC.NET 7 18.09.2018 08:05
[Pascal ABC.NET] Подскажите, как в код вставить процедуру суммы, которая считала бы только те столбцы матрицы, которые я укажу? 0525 Паскаль, Turbo Pascal, PascalABC.NET 4 10.11.2017 12:47
Pascal ABC. Создание меню через crt. H4t Помощь студентам 1 13.05.2013 13:19
в Pascal ABC.Net ошибка:"невозможно явно преобразовать тип integer к System.random" ameks94 Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2012 02:04
Программа должна оставить всего две строки! [Pascal ABC] Mirt Помощь студентам 1 07.12.2010 08:00