r   e   k   l   a   m   a

[PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Wszystko co dotyczy szeroko pojętego programowania.

[PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez hondus » 30.01.2010 (So) 10:44

Napisz program, w którym dana jest tablica o wymiarach (10 x 10), po uruchomieniu programu ma zostać wygenerowane pozycje statków:
10 jednomasztowców (w dalszej części ale to nie jest teraz wymagane musze mieć możliwość celowania w nie);

ofc każdy wie jak wygląda plansza do statków i wie jakie zasady panują, ale przypomnie, że żaden statek nie może się ze sobą stykać żadną częścią, tzn nawet po ukosie, czyli stawiając 1 jednomasztowiec mamy 9 pól które już nie mogą być wykorzystane

Obrazek

Kod: Zaznacz cały
uses crt;

const
   N = 10;
var

   i, j: 1..N;

begin
clrscr;
gotoxy(15,1);
writeln('Plansza do statkow');
writeln;
   for i := 1 to N do
   begin
      for j := 1 to N do
      begin

         write('0');
      end;
      writeln;
   end;
   readln;
end.


to co wymyśliłem (na podst innego prog) to narazie czysta plansza wywołana prostymi pętelkami, właśnie tak ma wyglądać plansza, statyki mają być oznaczone '1' a puste pola '0'
hondus
 
Posty: 27
Dołączył(a): 13.12.2009 (N) 12:30

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez [alex] » 30.01.2010 (So) 11:17

Do tego celu potrzebujesz:
dwie tablice 10x10 typu Boolean; jedna podstawowa druga pomocnicza.
W pętle na odpowiednią ilość statków ...
1. kopiujesz tablice bazowa do pomocniczej.
2. dla każdej jedynki znajdującej się w bazowej wstawiasz dodatkowe 2..4 jedynki w tablice pomocniczej po przekątnych.
3. zliczasz ilość zer w tablice pomocniczej i na podstawie tego generujesz liczbę losową N
4. odliczasz w tablice pomocniczej N-tą komórkę zawierającą zero.
koniec pętli.
Owszem można to zrobić na jednej tablicę typu:
var T:array[0..99]of set of {Pusto,Statek,Okolice};
ale to wymaga większego zastanowienia się.
GG status: Obrazek
[alex]
 
Posty: 1329
Dołączył(a): 12.02.2009 (Cz) 12:47

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez hondus » 30.01.2010 (So) 11:52

a jeżeli nie słyszałem ( nie miałem tego jeszcze) o tablicy Boolean?
duplikowanie tablicy miałem tylko w taki sposob, tzn bez lini brzegowych
co do zwykłego zduplikowania tablicy nie widze problemu ale czy tym sposobem tzn bez tej tablicy Boolean da sie zrobic

Kod: Zaznacz cały
uses crt;

type
tab2=array[1..20,1..20] of byte;




procedure info(var n,m:byte);
begin
     clrscr;
     writeln('Program generuje i wyswietla tabilce dwuwymiarowa.');
     write('Podaj ilosc kolumn: ');readln(n);
     write('Podaj ilosc wierszy: ');readln(m);
     writeln;
end;

procedure generuj(var tab2x2:tab2; n,m:byte);

var
   i,j:byte;

begin
     randomize;
     for j:=1 to n do
     begin
          for i:=1 to m do
          begin
               tab2x2[i,j]:=random(10);
          end;
     end;
end;

procedure drukuj(tab2x2:tab2; n,m:byte);
var
   i,j:byte;
begin
     for j:=1 to m do
     begin
         for i:=1 to n do
         begin
              write(tab2x2[i,j],'  ');
         end;
         writeln;
     end;
end;

procedure nowa(var bis:tab2; tab2x2:tab2; n,m:byte);
var
   i,j:byte;
begin
for j:=1 to n do
     begin
          for i:=1 to m do
          begin
               bis[i,j]:=tab2x2[i,j];
          end;
     end;
      for j:=2 to m-1 do
     begin
          for i:=2 to n-1 do
          begin
              bis[i,j]:=(tab2x2[i-1,j]+tab2x2[i,j-1]+tab2x2[i,j+1]) div 4;
          end;
     end;
end;


var
   tab2x2,bis:tab2;
   n,m:byte;


begin
     info(n,m);
     generuj(tab2x2,n,m);
     drukuj(tab2x2,n,m);
     nowa(bis,tab2x2,n,m);
     writeln;
     drukuj(bis,n,m);
     readln;
end.
hondus
 
Posty: 27
Dołączył(a): 13.12.2009 (N) 12:30

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez [alex] » 30.01.2010 (So) 12:34

Boolean to typ który przyjmuje wartości jedynie true lub false;
Możesz to zrobić nawet na typie extended, z tym że potrzebujesz informacje tylko - tak czy nie - dla każdego pola.
tb:array[1..20,1..20] of boolean;

PS. Nie rozumiem co ma wspólnego podany w ostatnim poście kod do tego tematu?
GG status: Obrazek
[alex]
 
Posty: 1329
Dołączył(a): 12.02.2009 (Cz) 12:47

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez hondus » 30.01.2010 (So) 12:41

1. kopiujesz tablice bazowa do pomocniczej.
kopiujesz tablice tzn duplikujesz to miał ten kod do tego ;d, z resztą nie ważne
hondus
 
Posty: 27
Dołączył(a): 13.12.2009 (N) 12:30

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez [alex] » 30.01.2010 (So) 12:59

Tak a propos to nie musisz tu stosować tablicy dwuwymiarowej. Wystarczy jednowymiarowa.
A jeżeli rozmiar jest konkretnie 10x10 to zamiast dwóch tablic wystarczą 4 zmienne typu Int64 :-D
GG status: Obrazek
[alex]
 
Posty: 1329
Dołączył(a): 12.02.2009 (Cz) 12:47

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez hondus » 09.02.2010 (Wt) 17:11

trochę stary temat ale co tam nie będę otwierać nowego. mam pytanko jak zadeklarować taki jednomasztowiec? jako typ czy jako co? (i jak ewentualny 2 masztowiec?)
hondus
 
Posty: 27
Dołączył(a): 13.12.2009 (N) 12:30

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez [alex] » 09.02.2010 (Wt) 17:28

metod jest mnóstwo:
np: jednomasztowiec to jeden bit w 16 bitowej liczbie z dziesięcioelementowej tablice dwumasztowieć odpowiednio dwa bity.
lub: trzy liczby - jednomasztowieć x,y,0 ; dwumasztowiec x,y,1 - poziomy; lub x,y,-1 - pionowy.

Pomyśl przez chwilkę a znajdziesz jeszcze z 20 różnych możliwości.
Myślenie nie boli.
GG status: Obrazek
[alex]
 
Posty: 1329
Dołączył(a): 12.02.2009 (Cz) 12:47

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez hondus » 09.02.2010 (Wt) 18:02

no okej to rozkminie, a jak rozpykać to żeby losowo (gdziekolwiek w tablicy spęłniając warunki w.w) były generowane te jednomasztowce tzn bez udziału usera. Czy da się to funkcją randomize zrobić? nakieruj mnie jakoś
hondus
 
Posty: 27
Dołączył(a): 13.12.2009 (N) 12:30

Re: [PASCAL]tab 2 wym, statki,generowanie jednomasztowców

Post przez [alex] » 09.02.2010 (Wt) 18:18

Do tymczasowej tablicy współrzędnych wpisujesz listę wciąż dozwolonych pozycji, losujesz jedną z nich.
Powtarzasz tyle razy ile trzeba.
GG status: Obrazek
[alex]
 
Posty: 1329
Dołączył(a): 12.02.2009 (Cz) 12:47


Powrót do Programowanie

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości