#1 2007-03-31 12:58:38

zordon

Ukryty talent

6821953
Skąd: Riviera/Biała Podlaska
Zarejestrowany: 2007-03-20
Posty: 87
Punktów :   -1 

Laborka 4

Rozwiazanie zadania z debuggerem na loborke (bez uzycia debuggera bo tylko przeszkadzal:P)

Kod:

/* Program przykladowa do testowania srodowiska uruchomieniowego na lab. z
 * PRM. Program zawiera bledy. Zadaniem jest wylapac bledy, a nastepnie 
 * wywolac zalaczone funkcje wg instrukcji Prowadzacego. Dla ambitniejszych:
 * napisac funkcje rysLinia, ktora uogolnialaby wszystkie funkcje o nazwach
 * zaczynajacych sie od slowa <rys>. J. Arabas */
#include <stdio.h>
#define MAXX 5
#define MAXY 10
#define PELNE '*'
#define PUSTE '.'

/* sprawdza, czy argument x jest zawarty w przedziale domknietym [min,max]
   wartosc zwracana:
   -1 jesli x<min
   0 jesli min<=x<=max
   1 jesli x>max
*/
/* signed */char pozaZak (int x, int min, int max)
{
   if (x<min) return -1; //x<min byl tu blad
   if (x>max) return 1;//x>max byl tu blad
   return 0;
}

/* Wypelnia pionowa linie w tablicy ekran znakami PELNE. 
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysPion (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<=nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[x][y]=PELNE;
      y++;Poziom
   }
}

/* Wypelnia pozioma linie w tablicy ekran znakami PELNE. 
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysPoziom (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<=nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[x][y]=PELNE;
      x++;
   }
}
/* Wypelnia ukosna w lewo linie w tablicy ekran znakami PELNE. 
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysUkosL (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<=nZnak; i++)
   { 						
      if (pozaZak(x,0, MAXX-1)) return; 
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[x][y]=PELNE;
      x--;
      y++;
   }						
}
/* Wypelnia ukosna w prawo linie w tablicy ekran znakami PELNE. 
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysUkosP (char ekran[MAXX][MAXY], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<=nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[x][y]=PELNE;
      x++;
      y++;
   }
}
/* --> Napisac samodzielnie  podczas laboratorium*/
/* --> Obsluzyc sytuacje, gdy px, dx<0 */
/* Wypelnia dowolna linie w tablicy ekran znakami PELNE. 
   Polozenie poczatkowe kreslonej linii: px, py.
   Argumenty dx, dy definiuja kierunek kreslenia
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysLinia (char ekran[MAXX][MAXY], int px, int py, int dx, int dy, int 
nZnak)
{
   printf ("\n***\n napisz mnie! \n***\n");
}


/* Rysuje zawartosc ekranu na standardowym wejsciu */
void rysEkran (char ekran[MAXX][MAXY])
{
   int x,y;

   for (y=0; y<MAXY; y++)
{  //klamerki (bład tu byl)
      for (x=0; x<MAXX; x++)

         printf("%c", ekran[x][y]);
      printf("\n");
} //klamerki (bład tu byl)

}
/* Wypelnia ekran znakami PUSTE */
void czyscEkran (char ekran[MAXX][MAXY])
{
   int x,y;
   
   for (y=0; y<MAXY; y++)
      for (x=0; x<MAXX; x++)
         ekran[x][y] = PUSTE;
}

int main()
{
   char ekran[MAXX][MAXY];
   
   czyscEkran(ekran);
   rysPion(ekran, 4,2,5);
   rysEkran(ekran);
   return 0;
}

Ostatnio edytowany przez zordon (2007-03-31 13:15:58)

Offline

 

#2 2007-03-31 13:14:34

martus

Władca much

8795851
Zarejestrowany: 2007-03-20
Posty: 61
Punktów :   -2 

Re: Laborka 4

nie wiem, o co chodzi, czy któś może dokładnie wyjaśnić, na czym ma polegać ta laborka?

Offline

 

#3 2007-03-31 13:19:09

zordon

Ukryty talent

6821953
Skąd: Riviera/Biała Podlaska
Zarejestrowany: 2007-03-20
Posty: 87
Punktów :   -1 

Re: Laborka 4

Laborka polega na tym by znalezc bledy w kodzie programu przy pomocy debuggera (lub bez:P)! i w tym kodzie zrodlowym razem z omelem i rafalem znalezlismy te bledy co tu sa wskazane w komentarzach! Tyle ze jest to kod zrodlowy ze strony jarabasa!

Offline

 

#4 2007-03-31 21:27:29

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Laborka 4

ale pojebane


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#5 2007-04-02 19:53:47

omel

Nowicjusz

6655340
Skąd: Brzeziny
Zarejestrowany: 2007-03-20
Posty: 53
Punktów :   

Re: Laborka 4

To jest link do strony z laborka numer 4:

http://staff.elka.pw.edu.pl/~jarabas/dyd/prm/prml4.html

Offline

 

#6 2007-04-02 20:13:34

Wojtek

Osesek

3389801
Skąd: DS Riviera - 711b
Zarejestrowany: 2007-03-20
Posty: 28
Punktów :   

Re: Laborka 4

http://www.ire.pw.edu.pl/~cpsp/dz_dydak/prm/lab4.htm

To jest link do strony Podgórskiego, czyli tej z której mamy teoretycznie korzystać.
Jak widać, treść zadania nie różni się niczym, z wyjątkiem tego że nie ma linka do źródła. Jak widać, ktoś tutaj na chama robił kopiuj-wklej, i mu nieco nie wyszło

Offline

 

#7 2007-04-02 20:19:48

zordon

Ukryty talent

6821953
Skąd: Riviera/Biała Podlaska
Zarejestrowany: 2007-03-20
Posty: 87
Punktów :   -1 

Re: Laborka 4

Jest taki pomysl zeby jutro zrobic ta laborke na tych okienkach co to je mamy ! Ja wezme laptopa i zrobie razem z omelem wszystko w tym debbugerze! Mam linuxa na laptopie i ten debbuger ddd wiec jak ktos bedzie chcial to zostanie na tych okienkach i zrobimy ta laborke zeby nikt juz nie mial watpliwosci typu to jest pojebane

Ostatnio edytowany przez zordon (2007-04-02 20:23:37)

Offline

 

#8 2007-04-02 23:38:05

p@weł

Osesek

2233545
Skąd: Płock Podolszyce/Wwa Ochota
Zarejestrowany: 2007-03-29
Posty: 38
Punktów :   
WWW

Re: Laborka 4

void rysLinia (char ekran[MAXX][MAXY], int px, int py, int dx, int dy, int nZnak)
{
   
   int x,y;
   int i;
   x=px;
   y=py;
   for (i=0; i<=nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[x][y]=PELNE;


      if (dx>0)
    {   
        if (dy>0)
        {y++;x++;};
        if (dy=0)
            {x++;};
        if (dy<0)
        {x++;y--;};
    };

      if (dx=0)
    {   
        if (dy>0)
        {y++;};
        if (dy=0)
            {};
        if (dy<0)
        {y--;};
    };

      if (dx<0)
    {   
        if (dy>0)
        {y++;x--;};
        if (dy=0)
            {x--;};
        if (dy<0)
        {x--;y--;};
    };
   }
}




wybiera ten jebany poczatkowy punkt ale za huja wafla nie rysuje;/ zawsze jest jedna kropka o wspolzednych px, py ;/ HELP!

Ostatnio edytowany przez p@weł (2007-04-02 23:38:27)


Wasza nienawiść umacnia naszą wiarę
HOOLIGANS
Aby zostać kimś,najpierw musisz pozostać sobą

Offline

 

#9 2007-04-03 03:18:37

wmichal

Nowicjusz

Zarejestrowany: 2007-03-24
Posty: 40
Punktów :   

Re: Laborka 4

Trochę późno ale jest.



/* Program przykladowa do testowania srodowiska uruchomieniowego na lab. z
* PRM. Program zawiera bledy. Zadaniem jest wylapac bledy, a nastepnie
* wywolac zalaczone funkcje wg instrukcji Prowadzacego. Dla ambitniejszych:
* napisac funkcje rysLinia, ktora uogolnialaby wszystkie funkcje o nazwach
* zaczynajacych sie od slowa <rys>. J. Arabas */
#include <stdio.h>
#define MAXX 5
#define MAXY 10
#define PELNE '*'
#define PUSTE '.'

/* sprawdza, czy argument x jest zawarty w przedziale domknietym [min,max]
   wartosc zwracana:
   -1 jesli x<min
   0 jesli min<=x<=max
   1 jesli x>max
*/
char pozaZak (int x, int min, int max)
{
   if (x<min) return -1;
   else if (x>max) return 1;
   else return 0;
}

/* Wypelnia pionowa linie w tablicy ekran znakami PELNE.
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysPion (char ekran[][MAXX], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[y][x]=PELNE;
      y++;
   }
}
/* Wypelnia pozioma linie w tablicy ekran znakami PELNE.
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysPoziom (char ekran[][MAXX], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[y][x]=PELNE;
      x++;
   }
}
/* Wypelnia ukosna w lewo linie w tablicy ekran znakami PELNE.
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysUkosL (char ekran[][MAXX], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[y][x]=PELNE;
      x--;
      y++;
   }
}
/* Wypelnia ukosna w prawo linie w tablicy ekran znakami PELNE.
   Polozenie poczatkowe kreslonej linii: px, py
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysUkosP (char ekran[][MAXX], int px, int py, int nZnak)
{
   int x,y;
   int i;

   for (x=px, y=py, i=0; i<nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[y][x]=PELNE;
      x++;
      y++;
   }
}
/* --> Napisac samodzielnie  podczas laboratorium*/
/* --> Obsluzyc sytuacje, gdy px, dx<0 */
/* Wypelnia dowolna linie w tablicy ekran znakami PELNE.
   Polozenie poczatkowe kreslonej linii: px, py.
   Argumenty dx, dy definiuja kierunek kreslenia
   Linia zawiera nZnak znakow, jesli "wystawalaby" poza tablice, ta wartosc
   jest przycinana do rozmiarow tablicy
*/
void rysLinia (char ekran[][MAXX], int px, int py, int dx, int dy, int
nZnak)
{
   int x,y;
   int i;
   if ((dx!=-1 && dx!=0 && dx!=1) || (dy!=-1 && dy!=0 && dy!=1))
        return;
   for (x=px, y=py, i=0; i<nZnak; i++)
   {
      if (pozaZak(x,0, MAXX-1)) return;
      if (pozaZak(y,0, MAXY-1)) return;
      ekran[y][x]=PELNE;
     
      y += dy;
      x += dx;
      /*if (dx==1 && dy ==1)
        {
            y++;
            x++;
        }
      if (dx==1 && dy == -1)
      {
            y--;
            x++;
        }
        if (dx == -1 && dy == 1)
        {
            y++;
            x--;
        }
        if (dx == -1 && dy == -1)
        {
            y--;
            x--;
        } */
   }
}


/* Rysuje zawartosc ekranu na standardowym wejsciu */
void rysEkran (char ekran[][MAXX])
{
   int x,y;

   for (y=0; y<MAXY; y++)
   {   
        for (x=0; x<MAXX; x++)
          printf("%c", ekran[y][x]);
      printf("\n");
    }
}
/* Wypelnia ekran znakami PUSTE */
void czyscEkran (char ekran[][MAXX])
{
   int x,y;
   
   for (y=0; y<MAXY; y++)
      for (x=0; x<MAXX; x++)
         ekran[y][x] = PUSTE;
}

int main()
{
   char ekran[MAXY][MAXX];
   
   czyscEkran(ekran);
   //rysPion(ekran, 4,2,5);
   //rysPoziom(ekran, 1,8,2);
  // rysUkosP(ekran, 1,1,3);
   //rysUkosL(ekran, 3,1,9);
   
   rysLinia(ekran,3,9,1,0,2);
   rysEkran(ekran);
   
   
   fflush(stdin);
   getchar();
   
   return 0;
}


Jeszcze małe wyjaśnienie. W tej mojej funkcji dla dx i dy 1 znaczy w prawo i w dół, -1 w górę i w lewo a 0 to ani jedno ani drugie, czyli po prostu kreska pionowa, pozioma albo punkt.

Ostatnio edytowany przez wmichal (2007-04-03 03:51:11)

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.trojporozumienie.pun.pl www.g3wclan.pun.pl www.magiawyobrazni.pun.pl www.rawsmackdown.pun.pl www.colobot.pun.pl