Jump to content
GSForum - Segélyvonal

Programozás (segítség és publikálás kezdõknek)


Recommended Posts

Iam_The_Ghost
Posted

Hi,

kéne egy kis segítség. Nemrég kezdtem el tanulni programozni C-ben, nem igazán megy a dolog, nem is nagyon fordítottam rá sok idõt, meg igazából elég távol is áll tõlem ez... Szóval tudnátok segíteni háziban? :D A feladat tulajdonképpen egyszerû, 1-100-ig fel kell sorolni a számokat, egyesével, külön sorban. Próbáltam For- és While-ciklusban is, de valahogy mindig volt hiba a programban, szóval valaki esetleg letudná írni, hogy egészen a #include <stdio.h> sortól az utolsó }-ig hogy nézne ki ennek a programnak kódja Turbo C-ben? :) Nagyon megköszönném!

Posted

Hi,

kéne egy kis segítség. Nemrég kezdtem el tanulni programozni C-ben, nem igazán megy a dolog, nem is nagyon fordítottam rá sok idõt, meg igazából elég távol is áll tõlem ez... Szóval tudnátok segíteni háziban? :D A feladat tulajdonképpen egyszerû, 1-100-ig fel kell sorolni a számokat, egyesével, külön sorban. Próbáltam For- és While-ciklusban is, de valahogy mindig volt hiba a programban, szóval valaki esetleg letudná írni, hogy egészen a #include <stdio.h> sortól az utolsó }-ig hogy nézne ki ennek a programnak kódja Turbo C-ben? :) Nagyon megköszönném!

Szerintem írd le a kódot, hogy eddig mivel próbálkoztál, és akkor megmondom, hogy mi benne a hiba.

Posted

Hi,

kéne egy kis segítség. Nemrég kezdtem el tanulni programozni C-ben, nem igazán megy a dolog, nem is nagyon fordítottam rá sok idõt, meg igazából elég távol is áll tõlem ez... Szóval tudnátok segíteni háziban? :D A feladat tulajdonképpen egyszerû, 1-100-ig fel kell sorolni a számokat, egyesével, külön sorban. Próbáltam For- és While-ciklusban is, de valahogy mindig volt hiba a programban, szóval valaki esetleg letudná írni, hogy egészen a #include <stdio.h> sortól az utolsó }-ig hogy nézne ki ennek a programnak kódja Turbo C-ben? :) Nagyon megköszönném!

for (i = 1; i <= 100; i++){ printf("%d\n", i); }

Iam_The_Ghost
Posted

for (i = 1; i <= 100; i++){ printf("%d\n", i); }

Thx, de az "i"-vel gondom van, nem tudja értelmezni pontosan mi is az, gondolom az elején még egy "int" vagy egy #define paranccsal meg kell adni, de hogyan? :unsure: Nekem nem akar mûködni.

Szerintem írd le a kódot, hogy eddig mivel próbálkoztál, és akkor megmondom, hogy mi benne a hiba.

Már nincs meg, múlt hétre kellett volna igazából (erre a hétre meg valami másik feladat, de nem tudom mit... :P ), akkor próbálkoztam vele, a Doom áltatl megadott parancsokkal, de valamit rosszul csinálok, mert sehogysem fogadja el. Utoljára ezt írtam be:

#include <stido.h>

void main(void)

{

for (i=1; i<=100; i++);

printf("%d\n", i);

}

Sry a noobságom miatt, de ehhez tényleg nem értek és nem értem mi a hiba.

Posted

Thx, de az "i"-vel gondom van, nem tudja értelmezni pontosan mi is az, gondolom az elején még egy "int" vagy egy #define paranccsal meg kell adni, de hogyan? :unsure: Nekem nem akar mûködni.

A ciklus elõtt deklarálni kell az i változót, nyilván csak ezután lehet neki értéket adni: int i;

A #define erre nem való.

#include <stdio.h>

void main(void) {
  int i;
  for (i=1; i<=100; i++) printf("%d\n",i);
}

De mennie kell így is:

#include <stdio.h>

void main(void) {
  for (int i=1; i<=100; i++) printf("%d\n",i);
}

Vagy egy másik megoldás while-lal:

#include <stdio.h>

void main(void) {
  int i=0;
  while(i++<100) printf("%d\n",i);
}

A for ciklus paraméterei után a zárójel bezárása után NE írj pontosvesszõt!

for (x;y;z); // ez rossz, mert itt a ciklusmagban az van, ami a ) és a ; között van, tehát SEMMI.
for (x;y;z) UTASÍTÁS; // ekkor a ciklusmagban egy utasítás van, ami többször végrehajtódhat
for (x;y;z) {
  UTASÍTÁS1;
  UTASÍTÁS2;
  ...;
} // ekkor a { } között lévõ bármennyi utasítás végrehajtódik, valahányszor lefut a ciklus

Posted

Megjegyzem, hogy sima C-ben a:

for (int i = ....)

nem mûködik, csak ha a cikluson kívül deklarálod az i-t.

Posted

sziasztok!

sürgõs segítségre lenne szükségem! most tanulom a php-t. készítettem egy primitív adatbáziskezelõ oldalt:

http://www.andrea0411.atw.hu/Anteus/index.html

nem mûködik a módosításnál a szelektálás. a listbox és a mellette levõ tex kezelésével van bajom.

ez a kódom:

if (isset($_POST['filt'])) {

foreach($_POST as $name=>$value) {

if (($name!="filter") and ($name!="filt")) {

$listsor=$name;

}

//if ($name="filter") {

//$car=$value;

// }

}

if (!empty($_POST['filt'])) {

include('config.php');

if (!mysql_connect($db_host, $db_user, $db_pass)){

die("Nem elerheto az adatbazis");

}

else{

mysql_select_db($db_name);

$person_lista = "Select * From person WHERE '.$listsor.' LIKE '%".$_POST['filt']."%' ";

$sikerult = mysql_query($person_lista);

if($sikerult){

print ('<p>A névre kattintva elvégezheti a nódosítást!</p>');

while($sorok = mysql_fetch_array($sikerult)){

print('<p><imput type="hidden" name="id" value="'.$sorok[0].'"/><a href="update.php">'.$sorok[1].'</a>'.$sorok[2].';'.$sorok[3].';'.$sorok[4].';'.$sorok[5].';'.$sorok[6].';'.$sorok[7].';'.$sorok[8].';'.$sorok[9].'</p>');

}

print('<p><a href="updateform.php"><strong>Vissza</strong></a></p>');

}

else{

print(mysql_error());

}

}

} else {

include ('updateform.php');

}

}

mi a baj vele?

KÖSZÖNÖM!!!

Posted

Thx, de az "i"-vel gondom van, nem tudja értelmezni pontosan mi is az, gondolom az elején még egy "int" vagy egy #define paranccsal meg kell adni, de hogyan? :unsure: Nekem nem akar mûködni.

Már nincs meg, múlt hétre kellett volna igazából (erre a hétre meg valami másik feladat, de nem tudom mit... :P ), akkor próbálkoztam vele, a Doom áltatl megadott parancsokkal, de valamit rosszul csinálok, mert sehogysem fogadja el. Utoljára ezt írtam be:

#include <stido.h>

void main(void)

{

for (i=1; i<=100; i++);

printf("%d\n", i);

}

Sry a noobságom miatt, de ehhez tényleg nem értek és nem értem mi a hiba.

Elõtte deklarálni kell a változót, ahogy a kolega is írta.

Posted

A ciklus elõtt deklarálni kell az i változót, nyilván csak ezután lehet neki értéket adni: int i;

...

A for ciklus paraméterei után a zárójel bezárása után NE írj pontosvesszõt!

for (x;y;z); // ez rossz, mert itt a ciklusmagban az van, ami a ) és a; között van, tehát SEMMI.
for (x;y;z) UTASÍTÁS; // ekkor a ciklusmagban egy utasítás van, ami többször végrehajtódhat
for (x;y;z) {
  UTASÍTÁS1;
  UTASÍTÁS2;
  ...;
} // ekkor a { } között lévõ bármennyi utasítás végrehajtódik, valahányszor lefut a ciklus

A hasonló hibák elkerülése végett szerintem érdemes mindig kiírni a { } jeleket. Így átláthatóbb is a kód (gyakorlatlan szemeknek fõleg), hogy mi mihez tartozik.

A fentieket annyival egészíteném ki, hogy az x és a z az többnyire értékedás vagy függvényhívás, az y meg valamilyen relációs kifejezés. Általában az x a ciklus "kezdõértéke", a z a "lépésköz", az y pedig a "kilépési feltétel", azaz hogy meddig menjen a ciklus.

A három kifejezés (x, y, és z) bármelyike elhagyható, de a ;-knek meg kell maradniuk! Ha az x vagy a z marad ki, akkor elmarad a ; a kifejtésbõl. Ha pedig az y marad ki, akkor állandóan igaznak értékelõdik ki a feltétel, azaz végtelen ciklus lesz.

Posted

Nekem is kb. ez a gondom, hogy nagyon nem vagyok otthon C-ben, nekem már önmagában az okoz gondot, hogy mit írjak bele a kódba. Tudom mire jó egy FOR vagy DO WHILE ciklus, mivel a PHP egész jól megy, de a C-hez kuka vagyok...

Nálunk úgy kezdte a tanár a félév elején, hogy megmondta milyen könyveket vegyenek a kezdõk, és azt pusziljuk be 3 nap alatt és akkor már érteni is fogjuk, hogy mirõl beszél... persze nálunk mindenki kezdõ, fõleg, hogy a szakunknak marhára nincs köze a programozáshoz... maximum a webszerkesztésnél egy kicsit beleszagoltunk a dologba, de hát az teljesen más mint egy C.

Mindegy, van már segítségem, remélem menni fog majd... egy ZH-t már buktam, többet nem akarok.

Ja és köszi mindenkinek aki eddig segített! :)

Posted

Megint elõjöttem, megint most, de 1 új problémával! Szóval delhpiben ha én 1 radiogroup elsõ itemén akarom megvizsgálni hogy be van e jelölve azt hogy kell?

Ezzel próbálkoztam

if radiogroup1.itemindex(0).checked=true 
then ......

De ez nem működött.

Illetve 1 halmaz elemeit hogy tudom kiiratni? Úgy próbáltam ahogy a tömbnél kellett tehát

panel1.caption:=inttostr(h[1])

természetesen ez se működött

Iam_The_Ghost
Posted

Sry, elfelejtettem megköszönni a segítségeteket, de most pótlom: köszi! :D

De most megint help kellene és ez valószínûleg így lesz még egy ideig. :rolleyes: Szóval most az lenne a feladat, hogy 0-255-ig kikéne írni a számokat és melléjük az ahhoz tartozó kódot, ilyen formában:

0 : x

1 : y stb.

Magyarán egy ASCII táblázatot kellene készíteni, de Nekem nincs nagyon ötletem hogyan kéne ezt. :unsure: (Csak annyit tudok, ha az adott számot ' ' jelek közé rakjuk, akkor az ahhoz tartozó kód jelenik meg.) Órán a tömböket vettük, de õszintén szólva nem sokat fogtam fel belõle, nem is igazán tudom, hogy ez kell-e a feladat megoldásához, mindenesetre jól jönne a segítség.

Posted

Sry, elfelejtettem megköszönni a segítségeteket, de most pótlom: köszi! :D

De most megint help kellene és ez valószínûleg így lesz még egy ideig. :rolleyes: Szóval most az lenne a feladat, hogy 0-255-ig kikéne írni a számokat és melléjük az ahhoz tartozó kódot, ilyen formában:

0 : x

1 : y stb.

Magyarán egy ASCII táblázatot kellene készíteni, de Nekem nincs nagyon ötletem hogyan kéne ezt. :unsure: (Csak annyit tudok, ha az adott számot ' ' jelek közé rakjuk, akkor az ahhoz tartozó kód jelenik meg.) Órán a tömböket vettük, de õszintén szólva nem sokat fogtam fel belõle, nem is igazán tudom, hogy ez kell-e a feladat megoldásához, mindenesetre jól jönne a segítség.

#include <stdio.h>

int main() {
int i;
for (i=0;i<=255;i++) printf("%d : %c\n",i, i);
return 0;
}

  • 2 weeks later...
Posted

Van valakinek ötlete, hogy lehetne "modellezni" egy hinta mozgását OpenGL-ben (C nyelven)?

A megjelenítéssel és a mozgással nincs gond, amit el szeretnék érni, de eddig nem sikerült:

1) El lehessen "engedni" a hintát.

A nyílbillentyûk segítségével lehet manuálisan mozgatni (egy adott tengely körül forgatni), ez eddig oké. A lényeg az lenne, hogy egy adott pontból elengedve szép lassan megálljon.

Teszem azt ha a függõlegeshez képest 20 fokban van elforgatva, akkor (ahogy egy igazi hinta tenné, nagyjából) lengjen át a másik oldalra, de csak 15 fokig, majd megint vissza 10, és így tovább.

Van egy változó, ami az elforgatás szögét tárolja, 5-ösével lehet léptetni, -50 és 50 fok között. A fenti példában ez azt jelenti, hogy a következõ értékeket kell sorban felvennie:

20 -> 15 -> 10 -> 5 -> 0 -> -5 -> -10 -> -15 | -> -10 -> -5 -> 0 -> 5 -> 10 | -> 5 -> 0 -> -5 | -> 0

(A vonalak jelzik, ahog a mozgás iránya megfordul.)

ITT VAN egy videó is, hogy érteni/láni is lehessen, hogy mit akarok. (Azért akadozik így, mert ugye manuálisan nyomkodtam a gombokat, többek között.)

2) (Ha az elsõ meglenne, ez nem lenne ügy, és fordítva) Magától lengjen ki a végpontokig.

3) Az maga lenne a tökély, ha a kilengés "végpontjaihoz" közeledve lassulna, távolodva pedig gyorsulna a mozgás, de ez nem elvárás, csak amolyan hab a tortán.

Ui.: nem kötelezõ program (illetve igen, de annak a továbbgondolása), csak a magam szórakoztatására vágtam/nék bele.

Posted

A fenti példában ez azt jelenti, hogy a következõ értékeket kell sorban felvennie:

20 -> 15 -> 10 -> 5 -> 0 -> -5 -> -10 -> -15 | -> -10 -> -5 -> 0 -> 5 -> 10 | -> 5 -> 0 -> -5 | -> 0

(A vonalak jelzik, ahog a mozgás iránya megfordul.)

ITT VAN egy videó is, hogy érteni/láni is lehessen, hogy mit akarok. (Azért akadozik így, mert ugye manuálisan nyomkodtam a gombokat, többek között.)

Igazság szerint a fenti számsorozatnak az elõállítása lenne a lényeg (-50, illetve 50 lehet a kezdõérték), amit kicsit bonyolít az OpenGL.

Posted

Van valakinek ötlete, hogy lehetne "modellezni" egy hinta mozgását OpenGL-ben (C nyelven)?

A megjelenítéssel és a mozgással nincs gond, amit el szeretnék érni, de eddig nem sikerült:

1) El lehessen "engedni" a hintát.

A nyílbillentyûk segítségével lehet manuálisan mozgatni (egy adott tengely körül forgatni), ez eddig oké. A lényeg az lenne, hogy egy adott pontból elengedve szép lassan megálljon.

Teszem azt ha a függõlegeshez képest 20 fokban van elforgatva, akkor (ahogy egy igazi hinta tenné, nagyjából) lengjen át a másik oldalra, de csak 15 fokig, majd megint vissza 10, és így tovább.

Van egy változó, ami az elforgatás szögét tárolja, 5-ösével lehet léptetni, -50 és 50 fok között. A fenti példában ez azt jelenti, hogy a következõ értékeket kell sorban felvennie:

20 -> 15 -> 10 -> 5 -> 0 -> -5 -> -10 -> -15 | -> -10 -> -5 -> 0 -> 5 -> 10 | -> 5 -> 0 -> -5 | -> 0

(A vonalak jelzik, ahog a mozgás iránya megfordul.)

ITT VAN egy videó is, hogy érteni/láni is lehessen, hogy mit akarok. (Azért akadozik így, mert ugye manuálisan nyomkodtam a gombokat, többek között.)

2) (Ha az elsõ meglenne, ez nem lenne ügy, és fordítva) Magától lengjen ki a végpontokig.

3) Az maga lenne a tökély, ha a kilengés "végpontjaihoz" közeledve lassulna, távolodva pedig gyorsulna a mozgás, de ez nem elvárás, csak amolyan hab a tortán.

Ui.: nem kötelezõ program (illetve igen, de annak a továbbgondolása), csak a magam szórakoztatására vágtam/nék bele.

A legegyszerûbb az, ha a mozgatáson kívül valamelyik billentyûre rákötöd az "elengedést", ami átbillent egy változót (pl. leng), minek hatására a timerben lefut az ingamozgást megvalósító kódrész. Javaslom, hogy inkább vedd rövidebbre a timer intervallumot és kisebbre az egyszeri elmozdulást, mert szebb eredményt fogsz kapni. Kelleni fog egy irány változó, ami +1 vagy -1 attól függõen, merre mozdul az inga. Kelleni fog még egy változó, - mondjuk max amiben az aktuális végállapotot (az inga maximális kilengésének szögét) tárolod. Minden timer hívás esetén ellenõrzöd, hogy az inga aktuális szögének abszolútértéke nagyobb vagy egyenlõ, mint a max változó abszolútértéke, ha igen, megszorzod az irány változót -1-gyel, majd az irány * elmozdulást hozzáadni az inga aktuális dõlésszögéhez. Ha a max változó nulla, akkor a leng változót állítsd vissza. Ezután kézzel beállíthatod a dőlésszöget, ahogy eddig, csak a max változóról se feledkezz el, azt is változtatnod kell a dőlésszöggel együtt, kézi mozgatás esetén!

Ha realisztikusan szeretnéd csinálni, akkor a [-max;max] intervallumot képezd le a [0;360]-ra, az aktuális dõlésszög ilyen képének a koszinuszának -1-szeresével szorozd be az irány * elmozdulást és úgy add hozzá az aktuális dõlésszöghöz.

Posted

Az kimaradt, hogy a koszinusz -1-szeresét még transzponálni kéne a [0;1] intervallumba, különben elég érdekesen fog mozogni az inga...:D

Posted

Igazság szerint a fenti számsorozatnak az elõállítása lenne a lényeg (-50, illetve 50 lehet a kezdõérték), amit kicsit bonyolít az OpenGL.

A hinta az egy másodrendû differenciálegyenlet! Legalábbis az analízis tanárom szerint.

De ha elég ennek a számsorozatnak az elõállítása, akkor arra írtam egy kis programot.

Az, hogy a lépésszám hogy jön ki, egy rekurzív függvény generátorfüggvényének levezetésével, vagy teljes indukcióval is belátható lenne, de azt inkább hagyjuk :D

Ha mindenképpen szeretnél negatív kitéréssel is indítani, akkor vagy azt csinálod, hogy utólag minden tömbelemet ellentettjére változtatsz.

Vagy pedig átírod úgy, hogy negatív K esetén az irany változó kezdeti értéke +1.

Utólag olvastam, hogy negatívval is indítasz, azért maradt ez ki, de logikailag mindegy.

Mûködés közben

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

int abs(int szam) {
    if (szam<0) return -szam;
    else return szam;
};

int main(int argc, char* argv[]) {
    if (argc!=3) {printf("parameter hiba\n"); exit(1);} //program argumentumai a kezdeti kitérés és lépésköz, kötelezõ megadni
    
    int K=atoi(argv[1]); //kezdeti kitérés fokokban !nemnegatív legyen!
    if (K<0) {printf("logikailag rossz parameter\n"); exit(1);}

    const int LK=atoi(argv[2]); //lépésköz fokokban !véletlenül se legyen nulla és K%LK legyen nulla!
    if (LK==0 || K%LK!=0) {printf("logikailag rossz parameter\n"); exit(1);}

    int LSZ=K*K/LK/LK+1; //lépésszám
    int* lepesek; //lépéseket tartalmazó tömb
    lepesek=(int*)calloc(LSZ, sizeof(int) );
    
    lepesek[0]=K; //nulladik lépés a kiindulópont
    
    int idx=1; //lepesek tömb indexe
    int irany=-1; //lengés aktuális iránya 
    int lengesszamlalo=0;
    int lengesmax=(K-LK)/LK*2;

    while(idx<LSZ) {

        if (lengesszamlalo>lengesmax) {
            irany*=-1;
            lengesszamlalo=0;
            lengesmax=(abs(K)-LK)/LK*2;
        }
        K=K+irany*LK;
        lepesek[idx]=K;
        idx++;
        lengesszamlalo++;

    }

    for (idx=0; idx<LSZ; idx++) printf("%d\n", lepesek[idx]);

    return 0;
}

Ha kicsit életszerûbb mozgást szeretnél, akkor én úgy csinálnám, hogy a hinta pozícióját az idõ függvényében megadnám, és fix idõközönként rajzolnám ki a függvénynek megfelelõ értéket. Ehhez valami ilyesmi függvényt találtam ki:

pillanatnyi kitérés fokokban=A*cos(x)-B*x/PI*cos(x)

A : kezdeti kitérés, mondjuk pl 50

B : ennyivel csökken a kitérés minden kilengéskor

a kapott értékeket persze kerekítened kell a legközelebbi kirajzolható diszkrét értékre, illetve valahogy figyelned kell, hogy mikor fogy el a lendület, mert utána megvadul a függvény:

Így néz ki

Posted

Igazság szerint nem is a számsorozat elõállítása a probléma, hanem az, hogy ezeket az értékeket hogyan adjam át a az elforgatás mértékét tároló változónak?

A mozgást megvalósító kódrészt nehezen lehetne a Timer függvényen belül megvalósítani, hisz az a program futása közben folyamatosan meghívódik (lényegében rekurzívan meghívja saját magát bizonyos idõközönként), azaz a kódrész állandóan lefut, miközben a paraméterek (hogy meddig lengjen ki, milyen irányban mozogjon) folyamatosan változnak.

A kezdeti értékek eltárolásával (hogy milyen magasról - azaz hány fokról -, illetve milyen irányba mozduljon, ha egyáltalán szükséges) nincs probléma, az elsõ átbillenés sem gond, utána jön a probléma.

Egyébként kösz mindkettõtöknek a segítséget. :)

Ha lesz egy kis időm, akkor nekiülök majd.

Posted

Igazság szerint nem is a számsorozat elõállítása a probléma, hanem az, hogy ezeket az értékeket hogyan adjam át a az elforgatás mértékét tároló változónak?

Globális változóról hallottál már? :)

A mozgást megvalósító kódrészt nehezen lehetne a Timer függvényen belül megvalósítani, hisz az a program futása közben folyamatosan meghívódik (lényegében rekurzívan meghívja saját magát bizonyos idõközönként), azaz a kódrész állandóan lefut, miközben a paraméterek (hogy meddig lengjen ki, milyen irányban mozogjon) folyamatosan változnak.

Csókolom, a timernek pont ez a dolga. Callbacket meg ne keverjük már a rekurzióval, elég csúnya hiba..

Nem értem, mi a probléma. Változó paraméterekkel fut le a kód? Pont ez a lényeg! Mindig az aktuális adatokkal dolgozik és megváltoztatja azokat a következõ állapotnak megfelelõen, majd újrarajzol.

A kezdeti értékek eltárolásával (hogy milyen magasról - azaz hány fokról -, illetve milyen irányba mozduljon, ha egyáltalán szükséges) nincs probléma, az elsõ átbillenés sem gond, utána jön a probléma.

Egyébként kösz mindkettõtöknek a segítséget. :)

Ha lesz egy kis idõm, akkor nekiülök majd.

Akkor most értelmezgesd kicsit az elõzõ hsz-em, mindent leírtam benne, mit és hogy csinálj, éppen csak a kódot nem toltam az üleped alá...

Szívesen.

Ezt a rohadt quote-bugot meg nem lehetne kijavítani? Kb. 10 perces meló lenne...

Posted

1) Globális változóról hallottál már? :)

2) Csókolom, a timernek pont ez a dolga. Callbacket meg ne keverjük már a rekurzióval, elég csúnya hiba..

3) Nem értem, mi a probléma. Változó paraméterekkel fut le a kód? Pont ez a lényeg! Mindig az aktuális adatokkal dolgozik és megváltoztatja azokat a következõ állapotnak megfelelõen, majd újrarajzol.

Akkor most értelmezgesd kicsit az elõzõ hsz-em, mindent leírtam benne, mit és hogy csinálj, éppen csak a kódot nem toltam az üleped alá...

Szívesen.

Ezt a rohadt quote-bugot meg nem lehetne kijavítani? Kb. 10 perces meló lenne...

1) Nem. Mi az? :unsure: :lol:

Nyílván globális változóban tárolom a forgatási szöget (legyen az egyszerûség kedvéért rot), máshogy nem is lehetne megoldani.

2) Nem keverem, csak lemaradt az idézõjel. Elnézést.

3) Igen, csak éppenséggel a kilengés (illetve a túllengés) maximális mértékét (max) és a forgatás irányát (irany, ami -1 és +1 lehet; azaz hogy növelni vagy csökkenteni kell-e épp a rot értékét) nem kell minden egyes lépésben megváltoztatni, csak amikor elértük a max-ot, ami mindig az elõzõ max abszolút értéke mínusz a lépésköz.

És a végén amikor megállt a hinta, nem ártana a leng változót is beállítani, hogy ne akarjon a hinta többet lengeni.

Ehez csak egy megfelelõen megírt else-if szerkezet kéne, de asszem' nem látom a fától az erdõt, még.

Posted

...de asszem' nem látom a fától az erdõt, még.

Jah, majd kibökte a szemem a megoldás.

Az ötlet az eddig is megvolt (nagyjából az, amit Calypsol írt), a hiba a megvalósításba csúszott.

Itt a kód, ami végülis a sikerhez vezetett:

if (lok > 0 && (irany != 0))
  {
    if (irany > 0) rot += 2;
    if (irany < 0) rot -= 2;
    if (rot == max) 
    {
      irany *= -1;
      if (max > 0) max = -max + 2;
      else if (max < 0) max = -max - 2;
      else max = 0;
    }
    if ((max == 0) && (rot1 == 0)) lok *= -1;
  }

Az irany és a max is változik a rot értékéhez viszonyítva, miközben a billentyûkkel mozgatom a hintát, a megfelelo gomb megnyomására a lok értéket vált (1 - ha mozognia kell a hintának és -1, ha nem), és ha lehet mozgatni, akkor elkezd mozogni.

Kicsit idétlenül mozog a hinta (ugye a folyamatos sebesség miatt, fõleg), de úgy mozog ahogy kell, és frankón meg is áll.

Posted

Jah, majd kibökte a szemem a megoldás.

Az ötlet az eddig is megvolt (nagyjából az, amit Calypsol írt), a hiba a megvalósításba csúszott.

Itt a kód, ami végülis a sikerhez vezetett:

if (lok > 0 && (irany != 0))
  {
    if (irany > 0) rot += 2;
    if (irany < 0) rot -= 2;
    if (rot == max) 
    {
      irany *= -1;
      if (max > 0) max = -max + 2;
      else if (max < 0) max = -max - 2;
      else max = 0;
    }
    if ((max == 0) && (rot1 == 0)) lok *= -1;
  }

Az irany és a max is változik a rot értékéhez viszonyítva, miközben a billentyûkkel mozgatom a hintát, a megfelelo gomb megnyomására a lok értéket vált (1 - ha mozognia kell a hintának és -1, ha nem), és ha lehet mozgatni, akkor elkezd mozogni.

Kicsit idétlenül mozog a hinta (ugye a folyamatos sebesség miatt, fõleg), de úgy mozog ahogy kell, és frankón meg is áll.

Nagyon jó. :) Akkor még csak kézzel megy, timer nélkül? A sebességfüggvényt próbáltad?

Posted

Nagyon jó. :) Akkor még csak kézzel megy, timer nélkül? A sebességfüggvényt próbáltad?

Hát nem egy durva kód, de a lényeg, hogy hozza, amit elvártam.

Kézzel beállítom, hogy honnan legyen a hinta "meglökve", onnantól a timer intéz mindent. Illetve bárhol meg is lehet állítani. Ez volt az elsõdleges cél.

Ha sebességfüggvényen a koszinuszos "bohóckodást" érted, akkor nem, azt még nem próbáltam.

Posted

Írnom kellene egy szótár programot. Bár holnapra még csak a specifikáció kell, azért beleírnám, hogy miben tárolja a kifejezéseket. Szóval mit javasoltok...? Tömbök, fájl, más? :unsure: Nyilván olyan program kell, amihez a felhasználó tud adni új bejegyzést.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...