HTML

Programozó Páternoszter

Ez a Programozó Páternoszter (PP) blogja, a programozásról szól. Aktualitása, hogy a Debreceni Egyetem Informatikai Kara Magasszintű programozási nyelvek 1-2, C++ esattanulmányok, Java esettanulmányok című kurzusainak blogja is egyben.

A vadászat

A Debreceni Egyetem Programozói Évkönyve: az UDPROG projekt. A szakmai fórumunk a Facebook-en. Az új előadások a prezin.
A régi előadások:
Prog1:
1. C bevezetés
2. C tárgyalás
3. C befejezés
4. C a gyakorlatban
5. C++ bevezetés
6. C++ tárgyalás
7. C++ befejezés
8. C++ a gyakorlatban
9. Java platform bevezetés
10. Kvantuminformatikai alg. bev.
Prog2:
1. Java bevezetés
2. Java tárgyalás
3. Java befejezés
4. Java a gyakorlatban
5. Software Engineering bev.
6. Java EE bevezetés
7. AspectJ bevezetés
8. BPMN-BPEL SOA programozás
9. C++ haladó
10. Tensorflow

Kövess engem!

Friss topikok

Linkblog

Megtaláltam Neo-t

2011.02.13. 11:37 nb

Avagy megvan az "if-nélkül" pattogó labda két kisbajnokságának győztese. Itt volt maga a kiírás: progpater.blog.hu/2011/02/11/elsore_neo_is_az_aszfalt_ala_esett_avagy_emlekek_az_elso_basic_programokrol

A 3 beérkezettből a két utóbbit néztem: működtek. Az első (Joe89) a while(w){ helyett while(1){-el könnyen végteleníthető. Nem így a második (fulibacsi), mert ott gond lehet, ha az állandóan növekedő x, y kifut a tartományából: azaz megszűnik pattogni a laszti, jól látszik ez, ha például a tartomány végének közeléről indítjuk:

#include <limits.h>
...
long int x = LONG_MAX-100, y = LONG_MAX-100;

100-at jól lép, de aztán kékhalál :) Joe89 megoldását is megnézzük közelebbről: -Wall-al fordítva jönnek belőle üzenetek, amiket érdemes javítani. A x, y számokat ellenőriztem, azok jól változnak 1-79 és 1-22 között. Amig "fulibacsi" megoldása inkább a majd általam használt technikára hasonlít (maradékos osztás), addig "Joe89" eredeti módon azt mondja, hogy pl. az x koordináta tekintetében az elején és a végén fordít, hogy milyen előjellel adja hozzá az 1 növekményt. Jól hajlítja a kanalat! Szerintem nyugodtan adhatjuk Neki a 2 kisbajnokságot.

BN megoldása

Szerényen: tökéletes. 

#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#include <unistd.h>

int
main (void)
{
    int xj = 0, xk = 0, yj = 0, yk = 0;
    int mx = 80 * 2, my = 24 * 2;

    WINDOW *ablak;
    ablak = initscr ();
    noecho ();
    cbreak ();
    nodelay (ablak, true);

    for (;;)
    {
        xj = (xj - 1) % mx;
        xk = (xk + 1) % mx;

        yj = (yj - 1) % my;
        yk = (yk + 1) % my;

        clear ();

        mvprintw (0, 0,
                  "--------------------------------------------------------------------------------");
        mvprintw (24, 0,
                  "--------------------------------------------------------------------------------");
        mvprintw (abs ((yj + (my - yk)) / 2),
                  abs ((xj + (mx - xk)) / 2), "X");

        refresh ();
        usleep (150000);

    }
    return 0;
}

Annyi az ötlet, hogy megfigyeltem: annak a helynek a koordinátája, ahová ki kellene rajzolni a pattogó lasztit, ilyen formájú, mindjuk az oszlop tekintetében:
0, 1, 2, 3, ... , oszlop_max-2, oszlop_max-1, oszlop_max-2, ... 3, 2, 1, 0, 1, 2 3 és így tovább, ráadásul a két koordináta egymástól függetlenül így változik "ész nélkül". Tehát két olyan számsort kell legyártani folyamatosan, ami 0 és egy max között szépen hullámzik fel-le. A százalékos osztás jó is erre, csak az fűrészfogban változik, szépen növekszik, aztán nullára zuhan. Ezért kell két ilyen hullám és azokat összemosni:

#include <stdio.h>
#include <stdlib.h>
int
main (void)
{
    int xj = 0, xk = 0, yj = 0, yk = 0;
    int mx = 80 * 2, my = 24 * 2;

    for (;;)
    {
        xj = (xj - 1) % mx;
        xk = (xk + 1) % mx;

        yj = (yj - 1) % my;
        yk = (yk + 1) % my;

        printf ("%d %d\n", abs ((yj + (my - yk)) / 2),
                abs ((xj + (mx - xk)) / 2));

    }
    return 0;
}

 

 

Szólj hozzá!

Címkék: noe if nelkül curses maradékos osztás

A bejegyzés trackback címe:

https://progpater.blog.hu/api/trackback/id/tr852657587

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása