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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2017, 12:33   #1
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию Код в виндоус и линукс

Такая проблема: написал прогу, которая создает судоку. Писал ее в geany на линуксе, но при переносе кода в систему виндоус (компиляция в free paskal как и в geany) программа крашится: выводит только первое сообщение и глохнет. На линуксе работает без проблем. Хотелось бы понять в чем ошибка?
PHP код:
uses crt;
var 
q:char;
i,j,w,v,l,n:integer;
y,x,z,p,pin,ram,kam,t,k,koma,slojx:integer
alfa,beta:array [1..9of integer;
sigma:array [4..9of integer;
mas,sudoku,sudoku1:array [1..9,1..9of integer;
proxy,control1:array [1..9,1..9of integer;
trek,tron:array [4..9of integer;
sort1,sort2:array [1..3,1..3of integer;
mad1,karma:array [1..9,0..9of integer;
mad2:array [0..9,1..9of integer;
marka,uran,gamma:array [0..9of integer;
bugi,reper,kelva:boolean;
yx:array [0..72of integer;
procedure ramka;
    
begin window(1,1,21,1);textbackground(white);textcolor(black);write(#32:2);
    
for i:=1 to 9 do write(i:2);
    
window(1,2,2,11);
    for 
i:=65 to 73 do write(chr(i):2);
    
textcolor(white)end;
procedure clr;
    
begin window(1,1,80,24);clrscr end;
procedure win;
    
begin window(1,12,50,13);textbackground(0);textcolor(white)end;
procedure revers;
    
begin for i:=1 to 9 do for j:=0 to 9 do karma[i,j]:=mad1[i,j];
    for 
i:=1 to 9 do for j:=0 to 9 do mad1[i,j]:=mad2[j,i];
    for 
i:=1 to 9 do for j:=0 to 9 do mad2[j,i]:=karma[i,j];
    for 
i:=1 to 9 do for j:=1 to 9 do karma[i,j]:=sudoku[i,j];
    for 
i:=1 to 9 do for j:=1 to 9 do sudoku[j,i]:=karma[i,jend;
begin repeat clr;
    
randomize;
    
textcolor(white);z:=0;
    
write('How many digits do you want to cross out? 10<n<58 ');
    
repeat
        read
(slojx);inc(z);
        if(
slojx>58)and(z=1)then writeln('Please, do not be an idiot!');
        if(
slojx>58)and(z=2)then writeln('STOP IT!');
        if(
slojx>58)and(z=3)then begin clr;textcolor(red);writeln;writeln('FUCK YOU!');textcolor(7);exit end;
    
until slojx<59;
    
write('please, wait...');
    for 
w:=1 to 9 do alfa[w]:=0;
    for 
w:=4 to 9 do trek[w]:=0;
    for 
w:=4 to 9 do sigma[w]:=0;
    for 
w:=1 to 9 do
        for 
v:=1 to 9 do proxy[w,v]:=v;
    
y:=1;     
    for 
i:=1 to 9 do begin
        repeat
        
case i of
            1
,2,3:p:=9;
            
4,5,6:p:=6;
            
7,8,9:P:=3 end;
            if 
y>0 then begin for w:=1 to 9 do
                    for 
v:=1 to 6 do control1[w,v]:=proxy[w,v];
                for 
w:=1 to 9 do beta[w]:=alfa[w];
                for 
w:=4 to 9 do tron[w]:=trek[wend
                
else begin for w:=1 to 9 do
                        for 
v:=1 to 6 do proxy[w,v]:=control1[w,v];
                    for 
w:=1 to 9 do alfa[w]:=beta[w];
                    for 
w:=4 to 9 do trek[w]:=tron[wend;
            for 
w:=4 to 9 do alfa[w]:=alfa[w]-trek[w];
            for 
w:=4 to 9 do sigma[w]:=alfa[w];
            for 
j:=1 to 9 do begin
                y
:=p-alfa[j];
                if 
y<=0 then break;
                
x:=random(y)+1;
                
mas[i,j]:=proxy[j,x];
                
pin:=1*(1+3*trunc((j-1)/3));
                for 
w:=pin to 9 do    
                    for 
v:=1 to p-alfa[w] do begin
                        
if j=4 then trek[w]:=alfa[w]-sigma[w];
                        if 
j=7 then trek[w]:=alfa[w]-sigma[w];
                        if 
mas[i,j]=proxy[w,vthen begin
                            z
:=proxy[w,v];proxy[w,v]:=proxy[w,p-alfa[w]];if w<>j then proxy[w,p-alfa[w]]:=else proxy[w,p-alfa[w]]:=0;
                            
inc(alfa[w]);break end;end;
                if(
i<>3)and(i<>6)and(i<>9)then for w:=1 to 9 do if(p-(alfa[w]-trek[w]))=0 then begin y:=0;break end;
                if 
y<=0 then break;
                if(
j=9)and(i<>3)and(i<>6)and(i<>9)then for w:=4 to 9 do 
                    for 
v:=p-sigma[wdownto p-2-sigma[w] do if v-trek[w]>0 then begin z:=proxy[w,v-trek[w]];proxy[w,v-trek[w]]:=proxy[w,v];proxy[w,v]:=z end;end;
        
until y>0;
        if(
i=3)or(i=6)then begin for w:=1 to 9 do
            for 
l:=1 to 3 do
                for 
v:=1 to p-do if proxy[w,v]=0 then
                    begin proxy
[w,v]:=proxy[w,v+1];proxy[w,v+1]:=0 end;
            for 
w:=1 to 9 do alfa[w]:=0;
            for 
w:=4 to 9 do trek[w]:=0;
            for 
w:=4 to 9 do sigma[w]:=0 end;end;
    
repeat
        
for i:=1 to 9 do
            for 
j:=1 to 9 do begin sudoku[i,j]:=mas[i,j];sudoku1[i,j]:=mas[i,jend;
        for 
v:=1 to 3 do
            for 
w:=1 to 3 do begin sort1[v,w]:=w+3*(v-1);sort2[v,w]:=w+3*(v-1)end;
        
z:=4;
        for 
i:=1 to 3 do begin
            y
:=4;dec(z);
                for 
j:=1 to 3 do begin
                    dec
(y);
                    
w:=random(y)+1;
                    
v:=random(z)+1;
                    
sudoku[sort1[i,w],sort2[j,v]]:=0;
                    if 
w<y then begin sort1[i,w]:=sort1[i,yend;
                    if 
v<z then begin sort2[j,v]:=sort2[j,zend;
                    
end end;
        
yx[0]:=0;z:=0;
        for 
i:=1 to 9 do
            for 
j:=1 to 9 do if sudoku[i,j]<>0 then begin yx[i*9-9+j-z]:=i*10+j;inc(yx[0]) end else inc(z);
        
koma:=0;pin:=9;
        
repeat
            
if pin>9 then for i:=1 to 9 do
                for 
j:=1 to 9 do sudoku[i,j]:=sudoku1[i,j];
            
t:=random(yx[0]-koma)+1;
            
y:=yx[tdiv 10;x:=yx[tmod 10;
            
z:=yx[t];yx[t]:=yx[yx[0]-koma];yx[yx[0]-koma]:=z;
            
p:=sudoku[y,x];sudoku[y,x]:=0;inc(pin);
            for 
i:=1 to 9 do begin mad1[i,0]:=9;mad2[0,i]:=9;
                for 
j:=1 to 9 do begin sudoku1[i,j]:=sudoku[i,j];mad1[i,j]:=j;mad2[j,i]:=j end;
                for 
j:=1 to 9 do begin
                    
if sudoku[i,j]<>0 then
                        
for w:=1 to mad1[i,0] do if sudoku[i,j]=mad1[i,wthen begin mad1[i,w]:=mad1[i,mad1[i,0]];dec(mad1[i,0]);break end;
                    if 
sudoku[j,i]<>0 then
                        
for w:=1 to mad2[0,i] do if sudoku[j,i]=mad2[w,ithen begin mad2[w,i]:=mad2[mad2[0,i],i];dec(mad2[0,i]);break end;end;end;
            
repeat
                bugi
:=false;
                
repeat
                    reper
:=false;
                    for 
i:=1 to 9 do begin gamma[0]:=0;
                        for 
j:=1 to 9 do if sudoku[i,j]=0 then begin inc(gamma[0]);gamma[gamma[0]]:=j end;
                        for 
j:=1 to mad1[i,0] do begin t:=0;
                            for 
w:=1 to gamma[0] do begin
                                uran
[0]:=0;
                                for 
k:=1+3*trunc((i-1)/3)to 3+3*trunc((i-1)/3)do
                                    for 
n:=1+3*trunc((gamma[w]-1)/3)to 3+3*trunc((gamma[w]-1)/3)do 
                                        if 
sudoku[k,n]<>0 then begin inc(uran[0]);uran[uran[0]]:=sudoku[k,nend;
                                
marka[0]:=0;
                                for 
v:=mad2[0,gamma[w]] downto 1 do
                                    for 
k:=1 to uran[0] do if mad2[v,gamma[w]]=uran[kthen begin
                                        inc
(marka[0]);marka[marka[0]]:=mad2[v,gamma[w]];mad2[v,gamma[w]]:=mad2[mad2[0,gamma[w]],gamma[w]];
                                        
mad2[mad2[0,gamma[w]],gamma[w]]:=0;dec(mad2[0,gamma[w]]);break end;
                                for 
v:=1 to mad2[0,gamma[w]] do if mad1[i,j]=mad2[v,gamma[w]] then begin inc(t);ram:=v;kam:=gamma[w];break end;
                                for 
k:=1 to marka[0] do begin inc(mad2[0,gamma[w]]);mad2[mad2[0,gamma[w]],gamma[w]]:=marka[kend;
                                if 
t>1 then break;end;
                            if 
t=1 then begin
                                sudoku
[i,kam]:=mad1[i,j];mad1[i,j]:=mad1[i,mad1[i,0]];dec(mad1[i,0]);
                                
mad2[ram,kam]:=mad2[mad2[0,kam],kam];dec(mad2[0,kam]); 
                                
reper:=true;bugi:=true end;end end;
                
until not reper;
                
kelva:=true;
                if 
bugi then for i:=1 to 9 do if(mad1[i,0]<>0then begin kelva:=false;revers;break end;
            
until kelva;
            
kelva:=false;
            for 
i:=1 to 9 do if mad1[i,0]<>0 then begin kelva:=true;break end;
            if 
kelva then begin sudoku1[y,x]:=p;dec(pin);inc(komaend
                
else begin if koma>0 then yx[yx[0]-koma]:=yx[yx[0]];dec(yx[0]);koma:=0 end;
            if 
koma=yx[0then break;
        
until pin=slojx;
    
until koma<yx[0];
    
clr;ramka;k:=1;
    for 
i:=0 to 2 do
        for 
j:=0 to 2 do begin
            window
(3+6*j,2+3*i,8+6*j,5+3*i);
            if 
odd(k)then textbackground(green)
            else 
textbackground(blue);inc(k);
            for 
w:=1+3*i to 3+3*do
                for 
v:=1+3*j to 3+3*do if sudoku1[w,v]<>0 then write(sudoku1[w,v]:2)else write(#32:2)end;
    
win;writeln('Press Enter if you want to see the solution');readln;readln;
    
clr;ramka;k:=1;
    for 
i:=0 to 2 do
        for 
j:=0 to 2 do begin
            window
(3+6*j,2+3*i,8+6*j,5+3*i);
            if 
odd(k)then textbackground(green)
            else 
textbackground(blue);inc(k);
            for 
w:=1+3*i to 3+3*do
                for 
v:=1+3*j to 3+3*do begin if sudoku1[w,v]=mas[w,vthen textcolor(black) else textcolor(white);write(mas[w,v]:2)end end;
    
win;writeln;write('Do you want to continue? Press the key Y if yes ');
read(q)until q<>'y' end
tutejshy вне форума Ответить с цитированием
Старый 13.05.2017, 14:27   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

У меня что-то работает. ввел число 12, и вот ->
Изображения
Тип файла: png geWL.PNG (90.1 Кб, 78 просмотров)
type_Oleg вне форума Ответить с цитированием
Старый 13.05.2017, 14:56   #3
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию

А через какой компилятор собирал? А то у меня ни черта не пашет ни через free ни через abc.

PS. Так то все правильно - так оно и должно работать.
tutejshy вне форума Ответить с цитированием
Старый 13.05.2017, 15:00   #4
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию

Кстати, а можешь мне файл exe скинуть на почту? andrejlevkovitch@gmail.com
Проверю пойдет ли он у меня.
tutejshy вне форума Ответить с цитированием
Старый 13.05.2017, 15:22   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Отправил.

... но не отпраилось. Глюк какой-то.
Здесь выложу. Geany с FPC я использовал.
Вложения
Тип файла: rar winLin.rar (27.8 Кб, 7 просмотров)

Последний раз редактировалось type_Oleg; 13.05.2017 в 15:27.
type_Oleg вне форума Ответить с цитированием
Старый 13.05.2017, 18:52   #6
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию

работает... зараза, значит дело в компиляторе. а какая версия компилятора?
tutejshy вне форума Ответить с цитированием
Старый 13.05.2017, 19:00   #7
tutejshy
Форумчанин
 
Регистрация: 13.05.2017
Сообщений: 100
По умолчанию

Хм... интересная вещь: установил geany - и через нее все работает, а вот через freepaskal или abc - не работает... интересно почему?
tutejshy вне форума Ответить с цитированием
Старый 13.05.2017, 19:06   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Цитата:
Сообщение от tutejshy Посмотреть сообщение
а какая версия компилятора?
Free Pascal Compiler version 2.6.4 [2014/10/11] for i386

ИДЕ = Geany 1.24
ОС = W Vista HP

Последний раз редактировалось type_Oleg; 13.05.2017 в 19:09.
type_Oleg вне форума Ответить с цитированием
Старый 13.05.2017, 19:52   #9
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Лет эдак 10 назад, когда ещё был жив pascal 7.0, у него была проблема с очисткой буфера после использования write перед read, из-за этого в read попадал мусор. Возможно, этот глюк и был воспроизведён. Но в версии 7.1 это уже пофиксили.
Во freepascal в то время такой глюк я не наблюдал, хотя в ранних версиях он может быть и был.
А вот в abc нечто подобное тоже наблюдалось несколько лет назад (возможно, и до сих пор). На сколько помню, там read или readln иногда автоматически считывал данные не дожидаясь ввода если до этого был вывод в консоль.
Цитата:
установил geany
это обычный блокнот с плюшками, а использует он внешний компилятор.
Цитата:
вот через freepaskal ... - не работает
Возможно, geany при компиляции использует другие директивы компилятора нежели fpc по дефолту.
eoln вне форума Ответить с цитированием
Старый 13.05.2017, 20:16   #10
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,538
По умолчанию

Lazarus - тоже норм. работает. Он у меня тот же FPC 2.6.4 использует.
Если создать простую программу.
type_Oleg вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Виндоус на линукс komra2 Windows 19 06.09.2016 11:16
Не устанавливаются драйвера интернета на виндоус хп prikolist Windows 11 16.12.2015 14:37
проблемы html на виндоус 7 fvbrjc HTML и CSS 1 06.10.2012 06:11
Кнопки в стиле виндоус 7 masashama Win Api 8 21.12.2011 16:36
При включении виндоус не звучит prikolist Компьютерное железо 2 12.07.2009 21:43