[image]

Pascal Project 3 ;)

 

DiSok

втянувшийся
Всем здравствуите :) У меня продвигается проект (см предыдушие топики) , и возник вопрос . Я хочу сделать мои Массив [array [1..9] of integer ) Arрассбросанном порядке, и не просто в разбросанном,а именно с выбором рандом. Но при написании этого в пасцале,возникли ошибки :( Вот примерно сама программа :)

program RandomizeTry(input,output);
uses crt;
Type MyArray=array [1..9] of integer;
Var
A:MyArray;
n,i,index,x:integer;
{-------------------------------------------------------------}
function Checknum(A1:MyArray;N1:integer):boolean;
var Check:boolean;
begin
index:=2;
Check:=true;
While (index<10) and (check) do
Begin
If A1[x]=n1 then Check:=false;
Index:=index+1;
end;
Checknum:=Check;
end;
{-------------------------------------------------------------}
Procedure RandMaar;
Begin
A[1]:=0;
index:=2;
While Index<10 do
Begin
n:=random(7)+1;
if (Checknum(A,N)=true) then
Begin
A[index]:=n;
index:=index+1;
end;
end;
end;
{-------------------------------------------------------------}
Begin {main}
Randomize;
RandMaar;
For X:=1 to 9 do write(A[x]);
readln;
clrscr;
End.
   
На все такие вопросы ответ- Run->Trace Into.
Плюс- написать комментарии к КАЖДОЙ строчке кода.
Или объяснить КАЖДУЮ строчку люимой девушке - или маме.
Это не наезд. Это рецепт. Сам так делал. Удачи.

Ошибке не всё равно, кто её обнаружит :D
 

DiSok

втянувшийся
da tut to vp[rpspv netu , on na4inaet tormozit', i beskonechno gonyaet trace into.. :( kogda dohodit do proverok i ne pishet ni4ego,mojet u menya pascal gluchnyi? :( free pascal...
Prover'te kto mojet :)
   
+
-
edit
 

varban

администратор
★★★☆
DiSok>mojet u menya pascal gluchnyi? :( free pascal...
DiSok>Prover'te kto mojet :)

Я не могу, нет ничего паскального, хотя Пасха и на носу ;)

Но могу тебя успокоить, что я не один раз открывал ошибки в компиляторе. Большую часть закрыл, конечно же :D

A брейкпойнт поставить и проверить значения переменных вера не позволяет?

Дебаггер - это 4 вещи:
- умение ставить брейкпойнты;
- умения трассировать программу;
- умение менять вручную значение переменных.

Но самое главное - пользоваться вообще дебаггером.

2Vale:
А что, в паскале assert не принято ставить?
Я их чаще комментариев писал в Си-коде.
   

Zeus

Динамик

Блин, ну совесть надо иметь? :eek: И вообще, праздник, отдыхай :):beer:
   

Zeus

Динамик

varban>А что, в паскале assert не принято ставить?
varban>Я их чаще комментариев писал в Си-коде.

В чистом (да и турбо-) паскале их вроде нет. В Дельфи есть.

2 DiSok: да, а ошибка в алгоритме. Так не делают! Придумай другой способ перепутать числа.
   

Ghola

втянувшийся
Хочется лишний раз потоптать Паскаль и пасквилянтов :)
Вместо
 index:=index+1; {* удобно писать } inc(index);  { инкремент *} 

[/html_font] Соответственно вместо
 index:=index-1;  {* <-> } dec(index); { декремент *} 

В Турбо-паскале были такие встроенные инлайн-функции ...
Но ++ и — всё равно лучше.
А [html_font size=+0]
 begin/end  {* - вообще зверство! *}

Одно хорошее в Pascale - оператор With.
А вообще гражданам Израиля и не быть сионистами (С/С++) :confused: ...
   
+
-
edit
 

МиГ
Реконструктор

опытный
☆★
DiSok>Всем здравствуите :) У меня продвигается проект (см предыдушие топики) , и возник вопрос . Я хочу сделать мои Массив [array [1..9] of integer ) Arрассбросанном порядке, и не просто в разбросанном,а именно с выбором рандом. Но при написании этого в пасцале,возникли ошибки :( Вот примерно сама программа :)

Как я понимаю, массив должен содержать числа с 1 до 9, причем они там должны быть расставлены в случайном порядке и не дублироватся?
   

DiSok

втянувшийся
МиГ , да это мне и надо :) только с 0 до 8 ... так надо... спасибо если что всем... :)
   

DiSok

втянувшийся
Ghola, a vse chto ti skazal ya znal i bez tebya :p:cool:
a pro sionistov ty zrya...
   
BG Реконструктор #17.04.2002 13:38
+
-
edit
 
DiSok>МиГ , да это мне и надо :) только с 0 до 8 ... так надо... спасибо если что всем... :)

Ламерский у тебя алгоритм, однако :)
Вот как надо (готовь пиво :beer2: )
Не помню очень хоршо паскаль, но надеюсь, поймеш смысл.
var 
  A : array[1..9] of integer;
  I, N, N1, N2 : Integer;
begin
  for I:=1 to 9 do
    A[i] = I-1; { заполняем масив числами с 0 до 8 }


  for I:=1 to сколько_хочеш
  begin
     { берем два случайных числа с 0 до 8 }
     N1 := random(8); 
     N2 := random(8);
     
     { меняем места елементов масива в соответствии с N1 и N2 }
     N := A[N1];
     A[N1] := A[N2];
     A[N2] := N;
  end;
end;

Все.

Блин, 100 раз отредактировал
   

DiSok

втянувшийся
? Ламерскиы ??? :mad: ... ;) может быть... :) Спасибо за свое решение :) интересный ход... просто "взбалтываеш" массив,в котором числа ... спасибо :)
   
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
А на Forth'е это в одну строчку можно :)
: RANDOMIZE_ARRAY { #ARRAY } #ARRAY 0 DO #ARRAY I - CHOOSE I + ROLL LOOP #ARRAY ;

Вот результаты для массива из 10 чисел, изначально от 0 до 9 :)
6 0 5 8 3 2 7 4 1 9
0 7 3 1 4 9 2 5 6 8
6 3 8 0 7 4 5 1 2 9
2 6 3 4 1 8 9 7 0 5
   

DiSok

втянувшийся
Ламерскии не ламерскии, это только алгоритм,а у тебя миг ошибки обнаруйились... так работает...
{ берем два случайных числа с 0 до 8 }
n1 := random(9)+1; {рандом берет с нуля ,а где ты возьмеш А[0] ? и не вклучая 9 , а ты написал random[8] еше хуже... а так то все проверил,работает,ну это сразу было видно :) спасибо еше раз :Д }
Н2 := рандом(9)+1;

P.S !!! v forume translit ne horoshii , ya ne mogu naiti bukvi,chtoby podognat' ih pod translit , vot k primeru luchshe slovo Huje (tak pishu ego ya) luchshe ne pisat'... :)
A gde bukva ж ? i ю ? vse [LIST]
   
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
По поводу "драйвера" - напомни мне URL, где оно лежит.

По поводу транслита - программеру не сложно должно было глянуть в исходник страницы с ответом, найти где там идёт транслитерация (по названию кнопки) и перед этим подгрузка JS-файла http://airbase.ru/inc/js/lat2rus.js

А там в самом начале видны все буквосочетания :)
   
+
-
edit
 

МиГ
Реконструктор

опытный
☆★
Ну, я же говорил, что отвык от Паскаля.

Насчет транслита - Крон, давай все-таки установим на базе мой клав. "драйвер" :)
   

DiSok

втянувшийся
mojno li sdelat' v pascale krasivuu nadpis',imeetsya vvidu s ispol'zovanie delay ili cto to vrode? k primeru u menya est' prilichnaya nadpis', kotoruu ya hochu napisat' no ona bol'shaya, sostoit iz dvadcati strok,i 4chto,chtoby ee napisat',mne nado sdelat' polineyno? ya napisal writeln(' ........ ') i vkonce on pishet chto line overflow, ili chto to vrode togo...
p.s u kogo est' krasivie nadpisi,prisylaite primery,a to otkuda ya uchitsya budu? :bangdesk::)
   
+
-
edit
 

=KRoN=
Balancer

администратор
★★★★★
А вот как красиво получается рандомизация массива на Perl:
@shuffle_array = sort{rand(40)-20} @array;
   

Zeus

Динамик

DiSok>p.s u kogo est' krasivie nadpisi,prisylaite primery,a to otkuda ya uchitsya budu? :bangdesk::)

Учиться, говоришь? ;) Вообще, не совсем понятно, что ты хочешь, но вот, порылся в школьных запасах... :cool: Программуля выводит текст построчно "титрами", со скроллированием. Но в графике, и с извратами вроде прямого доступа в экранную область :) Ко всему нужен полный турбо-паскаль, чтобы шрифты в папке bgi были.
uses crt,dos,graph;

var
   gr1,gr2,i:integer;
   f:boolean;
   src:byte absolute $A000:$0050;
   dst:byte absolute $A000:$0000;
   bot:byte absolute $A000:$95B0;

{ вывод строчки s. t - стиль (номер шрифта), d - размер }
procedure out(t,d:integer;s:string);
var
   i,w,h:integer;
begin
   settextstyle(t,0,d);
   w:=textwidth(s);
   h:=textheight(s)+7;
   if f then
      for i:=0 to h+3 do begin
         move(src,dst,38320);
         fillchar(bot,80,0);
      end;
   f:=true;
   for i:=2 to (w div 2)+5 do begin
      setviewport(320-i,471-h,320+i,479,true);
      outtextxy(i,h div 2,s);
      delay(10);
   end;
end;

begin
   gr1:=detect;
   initgraph(gr1,gr2,'d:tp7bgi'); { нужно подставить правильный путь до папки,
      где хранится egavga.bgi и шрифты *.chr }
   cleardevice;
   f:=false;
   setcolor(15);
   settextjustify(1,1);

   out(1,20,'Hello!');
   out(3,4,'');
   out(1,5,'Learning To Fly');
   out(1,4,'by Pink Floyd');
   out(7,3,'(from A Momentary Lapse of Reason album)');
   out(3,4,'');
   out(3,3,'Into the distance, a ribbon of black');
   out(3,3,'Stretched to the point of no turning back');
   out(3,3,'A flight of fancy on a windswept field');
   out(3,3,'Standing alone my senses reeled');
   out(3,3,'A fatal attraction holding me fast, how');
   out(3,3,'Can I escape this irresistible grasp?');
   out(3,2,'');
   out(5,4,'Can''t keep my eyes from the circling skies');
   out(5,4,'Tongue-tied and twisted');
   out(5,4,'just an earth-bound misfit, I');
   out(3,2,'');
   out(4,5,'Zeus');
   out(3,2,'');
   out(2,4,'-----------------------------------------------------------------------');
   out(1,100,'');
   out(1,100,'');
   out(1,100,'');
   out(1,100,'');

   closegraph;
end.

   

DiSok

втянувшийся
Zeus,огромное спасибо, проверу что ти написал,но я графику еше не учил ,но из того что посмотрел нашел знакомое слово Var... ;) (шучу). Я вот что хотел,у меня есть надпись,ну я делал ее в Текстовом фаиле и мне надо чтоби в паскале эту надпись (надпись большая на весь екран) вывелась на екран построчно сверху, или с низу,или сбоку,что мне кажется сложнее... но если можно без графики. Спасибо еще раз. :D
   

Zeus

Динамик

А что мешает 20 writeln'ов написать? И читать надпись что, из файла надо?
   

DiSok

втянувшийся
Ага из фаила, но не просто вивести на екран,а сделать ,чтобы эти строчки вилазили по однои, каждая строчка через 500 мили секунд.
Writeln не тяжело написать, но просто из фаила биыло бы лучше. :)
   

Zeus

Динамик

Ну так это просто. Отличается от "ручного" варианта парой строчек:
var
  f: text;
  s: string;
begin
  assign(f, 'filename.txt'); { имя файла, где хранится текст }
  reset(f);
  while not eof(f) do begin
    readln(f, s);
    writeln(s);
    delay(500);
  end;
  close(f);
end.

Ну, там, надо экран вначале очистить, цветами поиграть и т.п. - это уже мелочи. Ну и ошибки можно бы обработать - на случай отсутствия файла. См. хелп на функцию IOResult.
   

DiSok

втянувшийся
Зеус спасибы большие :D
Я обнаружил то,что у меня плохой компилятор, т.е вылетает, "jump long out of compilation" и т.д. Кто знает ,где можно взять хороший паскаль, с хорошим компилятором.Может есть у кого, но только чтобы под Виндоус шел, а точнее Доса нету... :(
:D:bird:
   
+
-
edit
 

varban

администратор
★★★☆
А что ты с ДОСом сделал?
Сразу признавайся :D:D:lol:

Я бы посоветовал сходить в музей Борланда и скачать себе достойный комплиятор нахаляву :cool: Лично я оттуда взял TC 2.0 и ТCPP 1.0
   

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru