Fórum témák

» Több friss téma
Fórum » PIC programozása C nyelven, C-Compiler
Lapozás: OK   39 / 153
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 6, 2011 /
 
Köszi!
Akkor ez jó?

  1. int lko (int a, int b)
  2.         {
  3.                 int lko;
  4.                 do
  5.                 {
  6.                         a=a%b;
  7.                         if(a==0)
  8.                                 {
  9.                                         lko=b;
  10.                                 }else
  11.                                 {
  12.                                         b=b%a;
  13.                                         if(b==0)
  14.                                                 {
  15.                                                         lko=a;
  16.                                                 }
  17.                                 }
  18.                         }while((a||b)!=0)
  19.                         return lko;
  20.         }
(#) Thomy válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
int gcd(int a, int b){
while(a != b){
if(a > b)
a -= b;
else
b -= a;
}

return a;
}
(#) adamhollos válasza Thomy hozzászólására (») Jún 6, 2011 /
 
Ez micsoda??
Az a-=b mit csinál. Lehetséges lenne, hogy ennyire elfelejtettem a c-nyelvet?
(#) potyo válasza adamhollos hozzászólására (») Jún 6, 2011 / 1
 
a=a-b; rövidebben leírva.
(#) adamhollos válasza potyo hozzászólására (») Jún 6, 2011 /
 
Dehát akkor ez nem az euklidészi algoritmus.
(#) trudnai válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Idézet:
„Lehetséges lenne, hogy ennyire elfelejtettem a c-nyelvet?”


Lehetseges... Operatorokrol szolo fejezetet olvasd at, tulajdonkepp nem nagy ugy, szinte az osszes matematikai muveletnek van hasonlo megadasi lehetosege (pl ugyanigy a=a%b; helyett a%=b. Raadasul ha igy irod meg segited is a comilert megtalalni a rovidebb/gyorsabb gepi kodot...

Legalul talalod meg ezen a linken.
(#) adamhollos válasza Thomy hozzászólására (») Jún 6, 2011 /
 
Akkor így már jó?
  1. int gcd (int a, int b)
  2.         {
  3.                 do
  4.                 {
  5.                 if(a > b)
  6.                 {
  7.                         a -= b;
  8.                 }else
  9.                 {
  10.                         b -= a;
  11.                 }
  12.                
  13.                 }while(a!=0);
  14.                 return a;
  15.         }
  16.        
  17. void    x/y     (double x, double y)
  18.         {
  19.                 do
  20.                 {
  21.                         x=x*10;
  22.                         y=y*10;
  23.                 }while ((x%1)&&(y%1)!=0);
  24.                 int a= gcd(x,y);
  25.                 x/y[0]=x/a;
  26.                 x/y[1]=y/a;
  27.         }
(#) adamhollos válasza trudnai hozzászólására (») Jún 6, 2011 /
 
Köszi, trudnai.
(#) adamhollos hozzászólása Jún 6, 2011 /
 
Ennek pedig a-t kéne kerekítenie egészre.
Szerintetek jó?
  1. int ker (double a)
  2.         {
  3.                 int ker;
  4.                 int xy=((((a*100)-(a*100)%1)/100)%1)*100;
  5.                 if (xy>=50)
  6.                 {
  7.                         ker=(a)-(a%1)+1;
  8.                 }else
  9.                 {
  10.                        
  11.                         if(((xy/10)%1)*10>=5)
  12.                         {
  13.                                 xy+=10;
  14.                         }
  15.                        
  16.                         if (xy>=50)
  17.                         {
  18.                                 ker=(a)-(a%1)+1;
  19.                         }else
  20.                         {
  21.                                 ker=(a)-(a%1);
  22.                         }
  23.                 }
  24.                                
  25.                 return ker;
  26.         }
(#) adamhollos válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Hogyan tudom azt megoldani, hogy a x/y tömböt egy header fileban hozom létre, hogy csak includolni keljen.

Ez az algoritmus egy algoritmusok.c nevű file-ban lenne ahol még lesz sok más algoritmus is és nem szeretném minden egyes program elején létrehozni kézzel a tömböket mert a végén még kihagyok valamit.
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Ne haragudj, nem akarlak megsérteni, de minden egyes függvénynél amit összegányolsz fel fogod tenni a kérdést, hogy jó-e? A válasz egyszerű: nem jó.
Akkor lesz jó, ha bepötyögöd valamilyen C-t támogató IDE-be aztán ráböksz a fordításra. Ha szintaktikailag helyes a kód, akkor lefordul. Ezután szépen lépésenként lehet ellenőrizni a debugger segítségével, helyesek-e az értékek, satöbbi. Egyébként az Euklideszi algoritmus tudtommal csak egész számok esetén adja meg a legnagyobb közös osztót, aminek nem tudom mi köze a normál alak előállításához, de Te talán tudod.
Normál alakhoz egy ötlet: Szorzod a törtszámot annyiszor tízzel, ameddig az abszolút értéke nem lesz nagyobb vagy egyenlő 1-el, illetve kisebb mint tíz. Ekkor megkaptad a mantisszát és a tízzel való szorzások száma*(-1) megadja a karakterisztikát.
Kicsit jó lenne, ha önállóan is kísérleteznél és gyakorolnál, hiszen az időt leszámítva nem kerül semmibe.
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 6, 2011 /
 
Pedig kénytelen leszel, mert a kódot csak forrásfájlban tudod létrehozni, a header állományok csak fejlécek.
Én nem értem hogyan lehet valamit kihagyni? A fordító sípolni fog, ha hiányol valamit. (Esetleg papíron programozol és nincs ami jelezzen?) A hibaüzenetekből meg általában rá lehet jönni, hogy mi a gond.
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 6, 2011 /
 
Bocsánat ha megbántottalak, máskor nem fogok mindent bemásolni. A normál és az alak közül pedig kifelejtettem a tört szócskát. Nem tudom, hogy ezt (normál törtalak) mire használják normálisan de az én matektanárom a x/y típusú törtalakra használja és néha kifelejti ő is a tört szócskát ami ettől teljesen mást jelent de ezt a rossz szokását úgy látszik én is átvettem.
(#) adamhollos hozzászólása Jún 7, 2011 /
 
Mi a hiba ha erre: while (((x%1)&&(y%1))!=0) ezt a hibaüzenetet kapom: integral type required?
(#) trudnai válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
A % jel a modulust jelenti (osztas utani maradekot). Magyaran 1-el elosztod a szamot es varod a maradekot... Nem tudom mi volt a szandek? Also bitet szeretned kiollozni?
(#) adamhollos válasza trudnai hozzászólására (») Jún 7, 2011 /
 
A tizedes vessző utáni részt szeretném kinyerni. Pl:45,457%1=0,457 azt hitem ez így működik.
A többi része így néz ki:
  1. while (((x%1)&&(y%1))!=0)
  2.       {
  3.          x=x*10;
  4.          y=y*10;
  5.       }
  6.       int a= gcd(x,y);
  7.       xppy[0]=x/a;
  8.       xppy[1]=y/a;
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
Nem bántottál meg, szóval részemről nincs harag.
A normálalakról: Bővebben: Link
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 7, 2011 /
 
Köszi a forrást most már egészen biztos nem a normál alakra gondoltam amikor azt írtam normáalak.
(#) trudnai válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
Nem, nem jol hitted (azert mutattam a linket tobbek kozott, hogy utana tudj nezni mi az, es oda is van irva, hogy maradek szamitas -- nem pedig tort resz szamitas...)

Valahogy ugy csinalnam, hogy a float-bol kivonnam az egesz reszt, pl: (x - (int)x)

De a ciklus feltetelt meg mindig nem ertem? Addig akarsz menni ameddig van tort resze x-nek vagy y-nak?
(#) adamhollos válasza trudnai hozzászólására (») Jún 7, 2011 /
 
Igen. Mondjuk 123,58/154,641-ból csinálnék 123580/154641-et amit aztán legegyszerűbb alakra hoznék. Így csinálnék mondjuk a 0,5 ből (1/0,5) 10/5-öt majd abból 1/2-t 1 lenne az xpy tömb első tagja 2 a második. Érted?
(#) El_Pinyo válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
Egyébként számomra egyelőre nem világos, hogy ezt most PIC-re vagy PC-re akarod írni? Ha PIC-re akkor javaslom nézz szét a fordító library függvényei között, ha PC-re akkor az ezen a fórumon erősen OFF.
A fordító dokumentációjában megtalálod az elérhető könyvtári függvényeket a 173. oldaltól kezdődően az alábbi linken.
Egyébként elárulod, hogy mi lesz ennek a gyakorlati haszna, tán számológépet szeretnél készíteni?
(#) adamhollos válasza El_Pinyo hozzászólására (») Jún 7, 2011 /
 
Nem. Találtam egy olyan ledes kijelzőt amin két számot lehet kijelezni egymás alatt és a két szám között még van egy tört jel is. Beadnám gombokkal a tizedes törtet a PIC meg kiírná tört alakban. Csak gondoltam ez az algoritmus máskor is jól jöhetne ezért szeretném az algoritmusok.c-be tenni.
(#) trudnai válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
Ertem, akkor csinaldd meg az algoritmust elobb PC-n, es ha az mukodik akkor implementaldd a kodot PIC-re (emiatt jo a C nyelv, mert ez viszonylag fajdalom mentesen megteheted).
(#) Thomy válasza adamhollos hozzászólására (») Jún 7, 2011 /
 
Csináld azt, amit más is javasolt!
Visual Studio C++-ban fejlessz algoritmusokat stb.
Csak át kell másolnod az IDE-be, ha működik.
Így egyszerűbb a hibakeresés.
(#) adamhollos hozzászólása Jún 7, 2011 /
 
Hogyan lehet resetelni az őrző védő blökit?
Nem működik sem a reset wdt(); sem a wdt=0;
parancs. A cikkeknél pedig csak ccs-hez találtam leírást.
(#) potyo válasza adamhollos hozzászólására (») Jún 7, 2011 / 1
 
ClrWdt(); ?
(#) adamhollos válasza potyo hozzászólására (») Jún 7, 2011 /
 
Ez nem működik.
Error [499] ; 0. undefined symbol:
_ClrWdt(program.obj)
(#) adamhollos válasza adamhollos hozzászólására (») Jún 8, 2011 /
 
Megvan. CLRWDT ();
(#) p_istvan válasza adamhollos hozzászólására (») Jún 8, 2011 /
 
Talán a C (milyen) fordítód helpjében, vagy manuáljában esetleg a mintaprogramjai között nézted?
De minek neked az az eb?
Látom már tárgytalan...
(#) adamhollos válasza p_istvan hozzászólására (») Jún 8, 2011 /
 
Riasztó rendszer agyát csinálom. Nem lenne jó, ha lefagyna.
Egyébként köszönöm mindenkinek aki tegnap segített működik a tört kiíró. Vagyis működött mert titokzatos úton módon eltünt az áramkör. Na mindegy.
Következő: »»   39 / 153
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem