- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen széket vegyek?
- OLED TV topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- TCL LCD és LED TV-k
- SSD kibeszélő
- Kormányok / autós szimulátorok topikja
- Milyen billentyűzetet vegyek?
- Kettő együtt: Radeon RX 9070 és 9070 XT tesztje
- Milyen belső merevlemezt vegyek?
Új hozzászólás Aktív témák
-
Lortech
addikt
válasz
Jester01 #899 üzenetére
Ez elég tesco gazsdaságos program lett tényleg, egy pár szemetet beleraktam a már meglévők mellé is (/0, nev[0]). De a lényeg részemől valami finesz belevitele volt a logikába, az ebből a szempontból lényegtelen és hibás részeket egy az egyben átvettem, ha megnézed.
-áhá, az ismétlős tényleg így működik. Több mint egy éve nem írtam hagyományos telefonon, el kellett volna olvasni a feladatot.
-const: nekem mindegy, van jelentősége azonkívül, hogy tényleg konstansként van használva és odakívánkozik a const ?
-gets és tsai: másoltam, nem értem, miért tanítják ezeket az elavult és kerülendő dolgokat a diákoknak. pl. [link]
-strlen: másoltam, tényleg ki kéne váltani egy azonnali értékkel.
-printf: szintén.
-toupper: az jogos, egy-két sor megspórolható.
-szám / egyéb nekem úgy tűnik, nem volt feladat. Persze input vizsgálat kéne. -
Jester01
veterán
Ja, ilyesmi lenne a tömbös. Csak nem jó
Mert azt kell nézni, hogy a leképezett számjegy ugyanaz-e mint az előző, nem pedig a betű. Ha "a" betű után jön "b" betű, akkor is kell a szóköz, ugyebár. Becsúszott néhány nev[0] a nev [ i ] helyett, de ez gondolom csak elírás, ugyanúgy mint a felesleges \0 a tömbben.
Ha nagyon kötözködni akarnék akkor további észrevételek (nem rosszindulatból
):
* az a tömb igazából const char* tomb[] kellene legyen
* A gets annyira rossz, hogy a gcc szól is érte (fgets helyette)
* while feltételbe strlen nem jó ötlet hatékonyság miatt
* printf helyett fputs/fputc és tsai (ha egyszer semmi formázás nincs, akkor minek a printf)
* toupper/tolower valamelyike (vagy ha nagyon trükkös valaki, akkor bit művelet)
*.ellenőrizni kellene, hogy betű jött-e egyáltalán -
Lortech
addikt
jó sok if. nekem valami ilyesmi szimpibb lenne.
char * tomb[] = {"2\0", "22\0", "222\0","3","33","333","4","44",
"444","5","55","555","6","66","666","7","77","777","7777","8",
"88","888","9","99","999","9999"};
int abetu = 'a';
int Abetu = 'A';
char nev[10000];
gets(nev);
int i = 0;
//* char elozo=0;
while(i<(strlen(nev)))
{
if (i > 0 && nev[i] == nev[i-1]) {printf(" "); }
//*vagy if (elozo == nev[i]) {printf(" ");}
//* elozo = nev[i];
if (nev[0] < abetu) {printf("%s",tomb[nev[0]-Abetu]);}
else {printf("%s",tomb[nev[0]-abetu]);}
i++;
} -
Jester01
veterán
Van egy felesleges bezáró kapcsos zárójeled és hiányzik egy #include <string.h> Ettől mondjuk még nem működik, de legalább lefordul.
Ezek így nem jók: if (nev[ i ]=='a' || 'A') helyette if (nev[ i ]=='a' || nev[ i ] == 'A') kell. Így talán jó lesz.
Amúgy a tömbös megoldásnál egyszerűen mejegyzed mi volt az előző lenyomott gomb és ha a mostani ugyanaz, akkor kiteszed a szóközt.
-
blaces
tag
Ez meg egy másik beadandó, én így tudtam értelmezni és megoldani... de ez olyan is...
A feladat ez:
[I]Írj programot, amely a standard inputról olvas karaktereket az EOF fájlvége jelig, és kiírja a képernyőre a bemenetnek megfelelő "mobiltelefonos kódolást", vagyis azt, hogy melyik gombot hányszor kell lenyomnunk, ha egy mobiltelefon segítségével szeretnénk előállítani az adott karaktersorozatot! A betűk elhelyezkedése a következő: (mint a mobil telefon)Az adott gomb száma annyiszor jelenjen meg a kimeneten, ahányszor azt le kell ütnünk! Például, ha az 5-ös gombot kell megnyomnunk háromszor, a program ezt 555-tel jelezze! Új billentyű lenyomásakor az előző és az új között ne legyen az outputon szóköz, csak abban az esetben, ha ismét ugyanaz a gomb következik, amelyet ezt megelőzően használtunk! A kis- és nagybetűk között nincs különbség.
Pl:
bemenet:Szauervein Szabolcs
kimenet: 777799992883377788833444661777799992 226665552227777 [/I]#include <stdio.h>
int main() {
char nev[10000];
int i=0;
int j=0;
gets(nev);
while(i<(strlen(nev))){
if (nev[i]=='a' || 'A') {
if (nev[i-1]=='a' || 'A' || nev[i-1]=='b' || 'B' || nev[i-1]=='c' || 'C') {
printf(" "); }
printf("2"); }
else if (nev[i]=='b' || 'B') {
if (nev[i-1]=='b' || 'B' || nev[i-1]=='a' || 'A' || nev[i-1]=='c' || 'C') {
printf(" "); }
printf("22"); }
else if (nev[i]=='c' || 'C') {
if (nev[i-1]=='c' || 'C' || nev[i-1]=='a' || 'A' || nev[i-1]=='b' || 'B') {
printf(" "); }
printf("222"); }
else if (nev[i]=='d' || 'D') {
if (nev[i-1]=='d' || 'D' || nev[i-1]=='e' || 'E' || nev[i-1]=='f' || 'F') {
printf(" "); }
printf("3"); }
else if (nev[i]=='e' || 'E') {
if (nev[i-1]=='e' || 'E' || nev[i-1]=='d' || 'D' || nev[i-1]=='f' || 'F') {
printf(" "); }
printf("33"); }
else if (nev[i]=='f' || 'F') {
if (nev[i-1]=='f' || 'F' || nev[i-1]=='d' || 'D' || nev[i-1]=='e' || 'E') {
printf(" "); }
printf("333"); }
else if (nev[i]=='g' || 'G') {
if (nev[i-1]=='g' || 'G' || nev[i-1]=='h' || 'H' || nev[i-1]=='i' || 'I') {
printf(" "); }
printf("4"); }
else if (nev[i]=='h' || 'H') {
if (nev[i-1]=='h' || 'H' || nev[i-1]=='g' || 'G' || nev[i-1]=='i' || 'I') {
printf(" "); }
printf("44"); }
else if (nev[i]=='i' || 'I') {
if (nev[i-1]=='i' || 'I' || nev[i-1]=='g' || 'G' || nev[i-1]=='h' || 'H') {
printf(" "); }
printf("444"); }
else if (nev[i]=='j' || 'J') {
if (nev[i-1]=='j' || 'J' || nev[i-1]=='k' || 'K' || nev[i-1]=='l' || 'L') {
printf(" "); }
printf("5"); }
else if (nev[i]=='k' || 'K') {
if (nev[i-1]=='k' || 'K' || nev[i-1]=='j' || 'J' || nev[i-1]=='l' || 'L') {
printf(" "); }
printf("55"); }
else if (nev[i]=='l' || 'L') {
if (nev[i-1]=='l' || 'L' || nev[i-1]=='j' || 'J' || nev[i-1]=='k' || 'K') {
printf(" "); }
printf("555"); }
else if (nev[i]=='m' || 'M') {
if (nev[i-1]=='m' || 'M' || nev[i-1]=='n' || 'N' || nev[i-1]=='o' || 'O') {
printf(" "); }
printf("6"); }
else if (nev[i]=='n' || 'N') {
if (nev[i-1]=='n' || 'N' || nev[i-1]=='m' || 'M' || nev[i-1]=='o' || 'O') {
printf(" "); }
printf("66"); }
else if (nev[i]=='o' || 'O') {
if (nev[i-1]=='o' || 'O' || nev[i-1]=='m' || 'M' || nev[i-1]=='n' || 'N') {
printf(" "); }
printf("666"); }
else if (nev[i]=='p' || 'P') {
if (nev[i-1]=='p' || 'P' || nev[i-1]=='q' || 'Q' || nev[i-1]=='r' || 'R' || nev[i-1]=='s' || 'S') {
printf(" "); }
printf("7"); }
else if (nev[i]=='q' || 'Q') {
if (nev[i-1]=='q' || 'Q' || nev[i-1]=='p' || 'P' || nev[i-1]=='r' || 'R' || nev[i-1]=='s' || 'S') {
printf(" "); }
printf("77"); }
else if (nev[i]=='r' || 'R') {
if (nev[i-1]=='r' || 'R' || nev[i-1]=='p' || 'P' || nev[i-1]=='q' || 'Q' || nev[i-1]=='s' || 'S') {
printf(" "); }
printf("777"); }
else if (nev[i]=='s' || 'S') {
if (nev[i-1]=='s' || 'S' || nev[i-1]=='r' || 'R' || nev[i-1]=='p' || 'P' || nev[i-1]=='q' || 'Q') {
printf(" "); }
printf("7777"); }
else if (nev[i]=='t' || 'T') {
if (nev[i-1]=='t' || 'T' || nev[i-1]=='u' || 'U' || nev[i-1]=='v' || 'V') {
printf(" "); }
printf("8"); }
else if (nev[i]=='u' || 'U') {
if (nev[i-1]=='u' || 'U' || nev[i-1]=='t' || 'T' || nev[i-1]=='v' || 'V') {
printf(" "); }
printf("88"); }
else if (nev[i]=='v' || 'V') {
if (nev[i-1]=='v' || 'V' || nev[i-1]=='t' || 'T' || nev[i-1]=='u' || 'U') {
printf(" "); }
printf("888"); }
else if (nev[i]=='w' || 'W') {
if (nev[i-1]=='w' || 'W' || nev[i-1]=='x' || 'X' || nev[i-1]=='y' || 'Y' || nev[i-1]=='z' || 'Z') {
printf(" "); }
printf("9"); }
else if (nev[i]=='x' || 'X') {
if (nev[i-1]=='x' || 'X' || nev[i-1]=='w' || 'W' || nev[i-1]=='y' || 'Y' || nev[i-1]=='z' || 'Z') {
printf(" "); }
printf("99"); }
else if (nev[i]=='y' || 'Y') {
if (nev[i-1]=='y' || 'Y' || nev[i-1]=='w' || 'W' || nev[i-1]=='x' || 'X' || nev[i-1]=='z' || 'Z') {
printf(" "); }
printf("999"); }
else if (nev[i]=='z' || 'Z') {
if (nev[i-1]=='z' || 'Z' || nev[i-1]=='w' || 'W' || nev[i-1]=='x' || 'X' || nev[i-1]=='y' || 'Y') {
printf(" "); }
printf("9999"); }
else if (nev[i]=='0') {
if (nev[i-1]=='0') {
printf(" "); }
printf("0"); }
else if (nev[i]==' ') {
printf("1"); }
i++;
}
}
printf("\n");
return(0);
}Az a baj, hogy most sulis gépen vagyok... itt csak devc++ van, és a printf előtt valami szintaktikai hibát jelezz. Előtte majdnem jó volt a program, csak akkor minden egyes megegyező karakter elé szóközt rakott ki... Nem tudom mi a gond.
Másik megoldásom az lett volna, hogy karaktertömböt hozok létre, és akkor azon megy egy keresés. De viszont ennél nem volt ötletem, a szóköz (space) próblémára, hogy azt hogyan valósítsam meg.
-
blaces
tag
válasz
Jester01 #889 üzenetére
kösz, így értem, hogy miért volt rá szükség. A példával eltudom már képzelni a próblémát.
Lortech nekem ez már egy picit magas
habár gondolom hogy valami olyasmit akartál írni, hogy az elsonyer+=1 helyett elsonyer++ használjak. A többi részt nem nagyon értettem a szépítésnek, bocsi.
Meg jobb az ha csak annyit finomítok rajta amennyit értek, mert ha meg kell védeni a progit (van valami plágium ellenörző) akkor eltudjam magyarázni. De szívesen megtanulnám a rövidebb(szebb) formákat is. -
Jester01
veterán
Ahogy Benmartin írta, az a baj, hogy az enter amit a felhasználó lenyom szintén bekerül a pufferbe. A %c önmagában nem ugorja át a whitespace-t (mi ennek a magyar neve?) de a szóköz az igen.
Tehát pl. ha a következő két sort adta be a felhaszáló: A<szóköz>B<enter>C<szóköz>D<enter> akkor a "%c %c" mit csinál? Berakja az A-t az első változóba, a szóköz miatt átugorja a bemenetben lévő szóközt, majd a B-t berakja a második változóba. Eddig szép és jó. Na de ha most még egy "%c %c" olvasás következik, az szembetalálja magát a pufferben lévő soremeléssel és azt teszi be az első változóba a C helyett. A formátumban lévő szóköz most a C karakterrel foglalkozik, de mivel az nem whitespace ezért nem történik semmi. A második változóba ezután szépen bekerül a C a D helyett. Ha viszont van egy szóköz a formátum elején is, akkor az megeszi a soremelést és minden megint jó.
-
blaces
tag
válasz
Jester01 #885 üzenetére
köszi a segítséget mindkettőtöknek!
scanf(" %c %c",&elso,&masodik); - így tényleg megy.
jelenleg két könyvet olvasok át ez ügyben, de nem találtam ehhez hasonló példát, ahol két karaktert olvass be, vagy hogy miért kell szóköz oda, vagy mit hogyan befolyásolja a /n ezt az egészet.
Szóval nálam a hiba a /n miatt volt, ami az okozta, hogy ha egy sorból kellett olvasnia két karaktert, akkor az első karakter után berakott egy sortörést, és a scanf a második sorból akarta olvasni a második karaktert? és emiatt valamilyen túlcsordulás történt?
-
blaces
tag
válasz
Benmartin #884 üzenetére
Köszönöm
A while és a scanf közé raktam az fflush(stdin) függvényt
while(i<=n){
fflush(stdin);
scanf("%c %c",&elso,&masodik);és így simán ment %c-vel is, és köszönöm hozzá a magyarázatot érthető volt és sokat segített! Ekkor már ugye nem volt a %s-es hiba így elkezdtem kísérletezni.
Kiszedtem a globális változókat (char elso, masodik) és beraktam a main()-be. És érdekes módon ment! Hibátlanul
-
Benmartin
senior tag
globális meg lokális deklaráció között a foglalás helyében van nagy különbség (előbbi RAM, utóbbi verem).
igazából nem tudok magyarázatot adni, hogy miért ment globálisan deklarált változónál (bár sejtem: valószínűleg %s-nél megpróbálta beleírni a '\0' karaktert a pointer végére és az egyik allokációnál sikerült a másiknál meg nem, talán ez lehet). mindenesetre a megoldás, amit mutattam nem túl szép, pontosan amiatt, hogy igazából nem szabadna char-ba %s-el olvasni, mert string beolvasásnál +1 karakter mindig kell a végére (emiatt lehet túlcsordulás).a scanf("%c %c")-vel az a probléma, hogy amikor beolvasol bármit az inputról, akkor jön vele mindig egy '\n' karakter az enter miatt és ezt nem tudod hol eltárolni, szóval bennemarad billpufferban, a következő beolvasásnál meg szépen előveszi a puffer tartalmat és beleteszi a változódba, viszont ha kiüríted ezt a puffert, akkor rendesen fog működni a beolvasás.
a szabványos inputra (stdin) kell meghívnod az fflush függvényt, szóval a while előtt, majd minden scanf("%c %c") olvasás után hajtsd végre a következő utasítást: fflush(stdin), ezáltal eltűnnek a pufferból az input végén "varakozó" soremelés karakterek.
remélem segítettem és érthető.
-
blaces
tag
válasz
Benmartin #882 üzenetére
Köszi, megy!
Miért kellett globálisan deklarálni? Valahányszor csináltunk valamit a laboron, akkor mindig main-en belül volt a deklarálás, meg a globális változónak úgy tudom akkor van jelentősége ha több függvényt használok.
és a scanf("%s %s", &elso, &masodik)-nál azért kellett %s %c helyet, mert a %s után karakterlánc (elso, masodik van), és nem pedig egy karakter( pl: a, b)?
Csak szeretném érteni, miért így jó a program
-
blaces
tag
válasz
Benmartin #880 üzenetére
Szia!
kijavítottam (így értettem a javítást):
#include <stdio.h>
int main(){
int n;
char elso, masodik, p, k, o;
int i=1;
int elsonyer=0;
int masodiknyer=0;
scanf("%d", &n);
while(i<=n){
scanf("%s %s", &elso, &masodik);
if(elso=='p' && masodik=='k')
elsonyer+=1;
else if(elso=='p' && masodik=='o')
masodiknyer+=1;
else if(elso=='k' && masodik=='p')
masodiknyer+=1;
else if(elso=='k' && masodik=='o')
elsonyer+=1;
else if(elso=='o' && masodik=='p')
elsonyer+=1;
else if(elso=='o' && masodik=='k')
masodiknyer+=1;
i++;
}
if (elsonyer>masodiknyer)
printf("elso\n");
else if (elsonyer<masodiknyer)
printf("masodik\n");
else
printf("dontetlen\n");
return 0;
}De még mindig ugyanaz a baja...
Viszont ha scanf("%c %c",&elso, &masodik)-ot használok, akkor hajlando másodjára is bekérni a karaktereket, de ugyanúgy döntetlent ír ki
-
Benmartin
senior tag
szia!
a gond a beolvasással van, a két számláló változód végig nulla marad, vagyis egyik feltétel sem teljesül a programod futása során.
a gond a scanf("%c %c")-el van ugyanis egy lehetséges "p k" input beütésénél a programod egy "p k\n" stringet kap meg, amit nem tudsz feldolgozni "%c %c"-vel.
megoldás: scanf("%s %s",&elso,&masodik);
ja és: elso, masodik típusa char legyen, ne int.
üdv.
-
blaces
tag
Sziasztok!
Nem tagadom beadandó házifeladat
A lenti kódból látszik is, hogy milyen kezdő vagyok...
A feladat ez akar lenni: Írj programot, amely a népszerű kő-papír-olló játék végeredményét segít eldönteni! Ezt a játékot ketten játsszák és több körből áll. A program írja a standard outputra, hogy melyik játékos nyert! Ha az első, a kimeneten az "elso" szó jelenjen meg, ha a második, akkor a "masodik", ha pedig döntetlen lett a játék végeredménye, akkor a "dontetlen" szó! (A körök összesített eredményét kell kiíratni.) A program bemenetként megkapja a körök számát, majd utána soronként két betűt, szóközzel elválasztva. Ez a két betű jelenti az első, ill. a második játékos választását (k - kő, p - papír, o - olló). Mindig az nyeri a kört, akinek a választása "erősebb" a másik játékosénál (a kő kicsorbítja az ollót, az olló elvágja a papírt, a papír becsomagolja a követ).
példa bemenetre:
3
p k
k o
p p
erre a kimenet: elso#include <stdio.h>
int main(){
int n, elso, masodik;
char p, k, o;
int i=1;
int elsonyer=0;
int masodiknyer=0;
scanf("%d", &n);
while(i<=n){
scanf("%c %c", &elso, &masodik);
if(elso=='p' && masodik=='k')
elsonyer+=1;
else if(elso=='p' && masodik=='o')
masodiknyer+=1;
else if(elso=='k' && masodik=='p')
masodiknyer+=1;
else if(elso=='k' && masodik=='o')
elsonyer+=1;
else if(elso=='o' && masodik=='p')
elsonyer+=1;
else if(elso=='o' && masodik=='k')
masodiknyer+=1;
i++;
}
if (elsonyer>masodiknyer)
printf("elso\n");
else if (elsonyer<masodiknyer)
printf("masodik\n");
else
printf("dontetlen\n");
return 0;
}A körök számát bekéri, aztán beadom neki, hogy:"p k" nyomok egy entert, erre eredményül azt írja ki, hogy döntetlen
Hol lehet a hiba?
-
Jester01
veterán
Hát mert nem úgy csináltad, ahogy mondtam
Egy ciklus kell összesen, nem 3. Viszont kell egy változó ami mutatja éppen le vagy fel mész.
Valahogy így:int lepes = 1;
int index = 0;
for(i = 0; i < max - 1; i++)
{
printf("%c", 'a' + index);
index += lepes;
if (index >= visszaford)
{
index = visszaford - 2; /* a minta szerint a felso fordulopontot csak egyszer irjuk ki */
lepes = -1;
}
if (index < 0) {
index = 0; /*a minta szerint az also fordulopontot ketszer irjuk ki */
lepes = 1;
}
} -
Davey7
senior tag
válasz
Jester01 #844 üzenetére
Még mindig bajlódok a 4-es feladattal.
Ez a kód jött ki,de nem működik megfelelően:int i,j,k, visszaford, max, index = 0; //az index azt jelenti,hogy hol áll épp az abc-ben
char karakterek = 97;
scanf("%d %d", &visszaford, &max); //itt olvasom be a visszafordulási ill. azt az értéket,hogy meddig írja ki
for (i = 0; i < max; i++) {
for(j=0;j < visszaford;j++) { //ez a rész ír előrefele
printf("%c", karakterek);
karakterek++;
index++;
}
if (index >= visszaford) {
for (k=0; k!=max-visszaford;k++){ //ez pedig visszafele
--karakterek;
printf("%c", karakterek);
}
}
}Itt a program lényeges része,azt tudom,hogy az index-szel van a baj,de nem jövök rá,hogy mi.
-
scorpy02
aktív tag
Üdv!
Azt miként tudnám a legegyszerűbben meghatározni, hogy ha megadok egy dátumot pl. 2009.6.21 formában, akkor ez milyen napra esik?
Köszi!
-
kokogab
csendes tag
Részketeket már megtudok csinálni belőle mint a háromszög megrajzolása:
line(x1,y1,x2,y2);
line(x2,y2,x3,y3);
line(x3,y3,x1,y1);vagy hogy hogyan kéne nagyából megcsinálni:
key=''
while (key!=q)
{
törli_képernyőt;
kirajzol_háromszög(y,x,z);
számol_ujkordinátát;
readline_vár_egy_billentyűt(key);
}DE vaéahogy nem áll össze az egész. HELP!!!
-
kokogab
csendes tag
Hella ez lenne a feladatom és nem nagyon boldogulok vele. Részletek vannak csak nem nagyon akar összeállni. SEGITSETEK!!! Köszi
C-ben kellene megoldani.Egy gépalkatrész, mint merev test mozgását három, koordinátáival adott pontja mozgásával szemléltetjük. Mutassa be e háromszög adott forgáspont körüli forgásának helyzeteit 15º-os eltérésekkel! A három pont és a forgáspont koordinátáit előzetesen billentyűzetről adjuk meg!
-
Gyuri16
senior tag
en ilyet nem irnak, c-ben lehet ilyennel jatszani, de szvsz nem szep. viszont amit te irtal nem mukodne tobb okbol sem.
eloszoris a mertekegyseg az char es '0' != 0
aztan while (!(szam && mertekegyseg))
ha mindketto int lenne, akkor pl 1&&1 = 1, !1 = 0 (false), tehat a ciklus nem hajtodik vegrete azt akarod, hogy akkor legyen false (0) ha mindketto 0
tehat a helyes megoldas szerintem while (szam || mertekegyseg) -
blaces
tag
Amúgy ez nem lenne jobb?
while (!(szam && mertekegyseg))
Szerintem erre akart gondolni haver...
Ilyen példát láttam könyvben és én is alkalmaztam egyszerű proginál:
while (a%2 ==0) az ekvivalens ezzel while (!(a%2)) ---> ugyanis !() ilyenkor a ! jel a zárójelben lévő kifejezésnek 0-t ad eredményül ebben a példában. -
Gyuri16
senior tag
tudod mi a kulonbseg e ketto kozott: ++i es i++ ?
a masik dolog hogy a c hogyan ertekeli ki a && et.ellenorzeshez tegyel meg egy printf-t a ciklus utan, hogy lasd mi maradt a valtozokban
int i=5, j=0;
while ( --i>0 && j++<5)
printf("%d, %d\n", i, j);ha lefuttatod ezt irja ki:
4, 1
3, 2
2, 3
1, 4
azt jelenti, hogy i=1, j=4, es ekkor megy a feltetelre a whilenal. mivel az i-nel prefixes a --, ezert a i>0 kiertekelese elott egyel csokkenti az erteket, igy i=0 lesz, es mar nem igaz a i>0, tehat a && jel utan mar lenyegtelen mi van, j marad 4.int i=0, j=0;
while (i++<5 && j++<5)
printf("%d, %d\n", i, j);odaig rendben van hogy i=5, j=5. itt jon a kovetkezo iteracio: i<5 nem ervenyes, igy a ciklus mar nem fog vegrehajtodni, de a postfixes ++ a i<5 utan meg teljesul, ezert 6 lesz
int i=0
for (i++; ++i<=10; i++)
printf("szöveg");lefuttattam, nekem 5 szor irja ki..
//remelem ertheto amit irok, mar kicsit faradt vagyok..
-
blaces
tag
Sziasztok!
Van néhány kód aminél nem értem, hogy miért ennyi az eredmény, vagy én nem tudom már nyomon követni,
int i=5, j=0;
while ( --i>0 && j++<5)
printf("%d, %d\n", i, j);Itt i=0, j=4 megoldókulcs szerint, de miért?
int i=0, j=0;
while (i++<5 && j++<5)
printf("%d, %d\n", i, j);Itt i=6, j=5
int i=0
for (i++; ++i<=10; i++)
printf("szöveg");Ez miért csak egyszer fut le? nem 5-ször kéne?
Mert én más megoldásra gondoltam, de az nem jó... lehet rosszul gondolkozom.
Csak jó lenne ha valaki érthetően eltudná magyarázni, hogy miért
Köszi a segítséget előre is -
Gyuri16
senior tag
na szoval, nezzuk amit te irtal:
while (szam != 0 && mertekegyseg != '0')
eloszoris: while ciklus addig fut, amig a feltetel igaz.
szam != 0 && mertekegyseg != '0'
ez akkor igaz, ha mindket resz igaz, tehat a szam nem 0, es a mertekegyseg se 0. => ha pl a szam == 0 es a mertekegyseg != 0 (az a pelda amit irtal), akkor ott false && true lesz, ami false, tehat a ciklus kilepez -> while (szam != 0 && mertekegyseg != '0') magyarul: addig fusson a ciklus, amig egyik se nulla
amit te akarsz: nem (szam= 0 es mertekegyseg= 0), ami leirva:
!( szam == 0 && mertekegyseg == 0)
ebbol De Morgan azonossagokkal megkapod amit irtam vagyokkal:
szam != 0 || mertekegyseg != 0
ami szavakban: addig csinald a ciklust amig legalabb az egyik nem 0 -
Davey7
senior tag
ez fura...
mert ugye az "és" kapcsolat a logikában akkor teljesül,ha mindkettőre teljesül a "vagy" kapcsolatnál pedig vagy az egyikre vagy a másikra teljesül a feltétel.
és nekem most az kell,hogy addig fusson a ciklus amíg mindkettő egyszerre nem 0. szóval szerintem ez "és" kapcsolat.
priviben vagy akár itt elmagyaráznád,hogy miért kell a vagy?mert nem értem...
-
Davey7
senior tag
.
.
.
int szam, osszeg=0,egesz=0,maradek=0;
char mertekegyseg;
while (szam != 0 && mertekegyseg != '0') {
scanf("%d %c", &szam, &mertekegyseg);
.
.
.ennek a programnak addig kéne beolvasnia a dolgokat amíg 0 0-t nem kap.
ehelyett én írom pl.:
5 t
10 g
165 m
0 gés itt kilép! pedig az van mondva,hogy ha a karakter is 0 akkor lépjen ki. mi lehet a baj?
-
vassgaby89
csendes tag
köszi a helpeket,sokat segít! a számsorossal meg is vok, még a prímeset gyomrozom.. be akartam vezetni 1 boolean változót és a deklarálásba azt írtam,h "bool prime;" de belekötött :S
nem tod,mi lehet a probléma? -
doc
nagyúr
válasz
vassgaby89 #851 üzenetére
a szegmentalasi hiba azt jelzi hogy valamit elszurtal...
pl. ha olyan indexebe akarsz irni egy tombnek (illetve olvasni belole) ami nincs is neki
pl. mivel itt nem 0-tol, hanem 1-tol toltod a tomboket, ha 256 db erteket akarsz belerakni, az utolso a tomb1[256] lesz, ami mar nem letezik (mivel a 256 elemu tomb az tomb1[0] - tomb1[255]-ig tart)MOD: csak most vettem eszre a masodik kerdest
termeszetesen akarhol, akarhogyan felhasznalhatod, csak figyelj ra hogy ne zavarjon be, tehat tudd hogy eppen mi van benne mikor hasznalod
itt pl. nyugodtan lehet egyetlen ciklusvaltozo a negy helyett -
vassgaby89
csendes tag
ilyen apróságon megakadni :S köszi megvan mostmár
egyébként a szegmentálási hiba mit jelez? mert gyakran találkozom vele :S pl itt is:
#include <stdio.h>
#include <stdlib.h>int main(void) {
int tomb1[256],tomb2[256],i,j,k,l,osszeg1,osszeg2,db1,db2;
printf("Hány elemű az első számsor?\n");
scanf("%d\n",db1) ;for(i=1; i<=db1; i+=1)
scanf("%d", tomb1[i]);printf("Hány elemű a második számsor?\n");
scanf("%d\n",db2) ;for(j=1; j<=db2; j+=1)
scanf("%d", tomb2[j]);osszeg1 = 0;
for(k=1; k<=db1; k+=1)
osszeg1 = (osszeg1 + tomb1[k]);osszeg2 = 0;
for(l=1; l<=db2; l+=1)
osszeg2 = (osszeg2 + tomb2[l]);if (osszeg1 > osszeg2)
printf("%d\n", osszeg1);
else printf ("%d\n", osszeg2);return EXIT_SUCCESS;
}illetve azt szeretném még tudni,h 1 változó több for ciklusban is felhasználható, v csak egyben??
-
doc
nagyúr
válasz
vassgaby89 #849 üzenetére
az osztok inicializatlan, igy az erteke veletlenszeru, vagyis a megoldas:
int szam,i,osztok=0;
amugy a program jo, bar felesleges 1-tol a szamig menni, eleg ha elindulsz hogy 2-tol sqrt(szam)-ig, es ha addig nem talalsz osztot, akkor prim, ha igen, akkor nem az (es abba is lehet hagyni a tovabbi szamolgatast)
-
vassgaby89
csendes tag
és itt van 1 kis progi prím megállapításáról,mégsem műxik jól :S
#include <stdio.h>
#include <stdlib.h>int main(void) {
int szam,i,osztok;scanf("%d", &szam);
for (i = 1; i <= szam; i +=1)
if (szam % i == 0) (osztok += 1);printf("%d\n", osztok);
if (osztok == 2) printf("%d\n",szam);
else printf("nem prim\n");return EXIT_SUCCESS;
} -
vassgaby89
csendes tag
nekem csak 1 egyszerű probémám van egyelőre (még csak most kezdtem a C-t)
hogy tudok beolvastatni 2 változót úgy,h köztük szóköz van ? (házifeladat,és beadás után a tesztprogram standard input-t ad,amihez aklakmazkodnia kell a proginak)
mert " scanf("%d %d", &szam1, &szam2); " -re szegmentálási hibát kapok
(tom vmi olyasmi a gond,h a scanf csak whitespace-ig olvas,v mi)előre is köszi
-
MadBlade
tag
Sziasztok !
Nem tudom jó helyen érdeklődöm e , de megpróbálom
...
Az lenne a problémám , hogy szerettem volna készíteni egy toolbar-t a ToolbarStudio nevű programmal , és mikor elkészítette a telepítő csomagot , csinált egy .exe illetve egy .cab filet ... namármost az exe felteszi az alapprogramot (ami maga a szinte üres sablon) , de a tartalmát a .cab file nélkül (amiben az összes változást és alkotóelemet tárolja) nem teszi fel ...
Van valami sejtésetek hogy az önkicsomagoló exe filba (amelybe a license fájl viszont beletette) miért nem ágyazta be vajon a .cab filet illetve annak tartalmát ?Előre is köszönöm a segítő hozzászólásokat !
Üdvözlettel: Mad
-
kokogab
csendes tag
Sziasztok nekem is lenne egy beadandó házim és nem nagyon boldogulok vele.
Ha tudnátok benne segíteni az nagyon jó lenne. KösziEgy gépalkatrész, mint merev test mozgását három, koordinátáival adott pontja mozgásával szemléltetjük. Mutassa be e háromszög adott forgáspont körüli forgásának helyzeteit 15º-os eltérésekkel! A három pont és a forgáspont koordinátáit előzetesen billentyűzetről adjuk meg!
-
Jester01
veterán
4) például bevezetsz index, max és lépés változókat. Az index mutatja, hol állsz az abcben, a max, hogy meddig, az irány pedig, hogy éppen merre (le/fel=-1/+1). Csinálsz egy külső ciklust, ami a kívánt kiírandó karakterszámig fut. A cikluson belül kiírod az aktuális karaktert, majd a lépés hozzáadásával mész a következőre. Ellenőrzöd nem ütköztél-e az intervallum alsó vagy felső határába és ha igen, akkor a lépést megfordítod és az aktuális indexet korrigálod. A betűk kiírásához felhasználhatod, hogy az ascii kód éppen az angol abc szerint van sorban, vagy alkalmazhatsz egy konstans stringet amiből kinézed a betűket.
5) ezzel nem tudom mi a probléma, elég szájbarágósan le van írva. Csinálsz egy függvényt, ami ellenőrzi, hogy a szám prím-e. Erre az egyszerű favágó megoldás gondolom teljesen jó lesz, miszerint végignézed osztható-e valamivel. A főprogram pedig a feladatkiírásnak megfelelően jár el.
-
Davey7
senior tag
Valaki tudna nekem segíteni?
Most kezdtük a C-t tanulni és van pár beadandó és hát még nem igazán értek a programozáshoz...
Itt vannak a feladatok. Az első 3at megoldottam,de a 4.-5.el nem bírok. Igazából az algoritmussal van a gondom,hogy hogyan kéne nekilátni és mit miután csinálni.
Az első 3nál egy kis segítséggel és sok fejtöréssel rájöttem,de ezek nem mennek. -
Dirty_Pio
csendes tag
válasz
Jester01 #839 üzenetére
Koszi. Meg volna egy kerdesem : mivel olvassam be az adatokat, mert a scanf elcseszi nekem eleg rendesen, mivel a buffert szepen betologatja az adatok helyere es nincs igazan semmi 5letem mit hasznaljak helyette, mar azon kivutl johu irok egy fuggvenyt ami szepen beolvassa a getchar() ral a neveket meg a kulonbozo szovegeket. Akkor mukodne ha csak a scanf() -el a szamokat olvasnam be?
-
Jester01
veterán
válasz
Dirty_Pio #838 üzenetére
1) Nem tudom, hogy az [ i ] indexeket a fórum nyelte-e be, de ha nem akkor hiányzanak
2) ha ragaszkodsz a bitmezőkhöz, az megbonyolítja a beolvasást. Én inkább kidobtam őket
3) a switch-ben kimaradtak a case kulcsszavak.
4) a default után is kell kettőspont, de a default: break konstrukciónak nincs sok értelme, olyan mintha ott sem lenne
5) becsúszott egy bezáratlan kapcsos zárójel
6) a %c formátum nem ugorja át a szóközt (whitespace) ilyenkor explicit kell egy szóköz
7) a scanf-nek pointer kell, hiányzik egy pár & jelEz itt patch, hogy jobban látszódjon a módosítás.
--- t.c.orig 2009-03-11 22:10:54.000000000 +0100
+++ t.c 2009-03-11 22:37:13.000000000 +0100
@@ -7,15 +7,15 @@
enum star_type tp;
union star{
struct mai{
- unsigned char type:2;
- unsigned char age:2;
+ unsigned char type;
+ unsigned char age;
char color[11];
}m;
struct bin{
float r1;
float r2;
- unsigned char t1:2;
- unsigned char t2:2;
+ unsigned char t1;
+ unsigned char t2;
}b;
struct var{
float lowlmn;
@@ -32,37 +32,35 @@
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
- for (i=0;i<n;i++){
+ for (i=0;i<n;i++)
switch (a){
- MA:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
- break;
- BIN:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
- break;
- VAR:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
+ case MA:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf(" %c %c %s",&x[i].u.m.type, &x[i].u.m.age, x[i].u.m.color);
+ break;
+ case BIN:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf("%f %f %c %c",&x[i].u.b.r1,&x[i].u.b.r2,&x[i].u.b.t1,&x[i].u.b.t2);
+ break;
+ case VAR:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf("%f %f %f",&x[i].u.v.lowlmn,&x[i].u.v.highlmn,&x[i].u.v.period);
break;
- default break;
};
for (i=0;i<n;i++)
- switch (x.tp){
- MA:
- printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
+ switch (x[i].tp){
+ case MA:
+ printf("%c %c %s\n",x[i].u.m.type, x[i].u.m.age, x[i].u.m.color);
break;
- BIN:
- printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
+ case BIN:
+ printf("%f %f %c %c\n",x[i].u.b.r1,x[i].u.b.r2,x[i].u.b.t1,x[i].u.b.t2);
break;
- VAR:
- printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
+ case VAR:
+ printf("%f %f %f\n",x[i].u.v.lowlmn,x[i].u.v.highlmn,x[i].u.v.period);
break;
- default break;
};
system("pause");
return(0); -
Dirty_Pio
csendes tag
válasz
Dirty_Pio #837 üzenetére
Kozbe reajottem egy-ket hibara szoval az uj kod mar igy nez ki
#include <stdio.h>
#include <stdlib.h>
enum star_type{ MA,BIN,VAR};
typedef struct {
char name[51];
enum star_type tp;
union star{
struct mai{
unsigned char type:2;
unsigned char age:2;
char color[11];
}m;
struct bin{
float r1;
float r2;
unsigned char t1:2;
unsigned char t2:2;
}b;
struct var{
float lowlmn;
float highlmn;
float period;
}v;
}u;
}stars;
int main(void){
enum star_type a;
int n,i;
stars *x=(stars *)malloc(sizeof(stars)*10);
printf("which type of definition would you like to use for the stars?\n");
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
for (i=0;i<n;i++){
switch (a){
MA:
scanf("%50s",x.name);
x.tp=a;
scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
for (i=0;i<n;i++)
switch (x.tp){
MA:
printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
system("pause");
return(0);
}de meg mindig nem megy
-
Dirty_Pio
csendes tag
Sziasztok, volna egy problemam a kovetkezo feladatban :
#include <stdio.h>
#include <stdlib.h>
enum star_type{ MA,BIN,VAR};
typedef struct s{
char name[51];
enum star_type tp;
union star{
struct mai{
unsigned char type:2;
unsigned char age:2;
char color[11];
}m;
struct bin{
float r1;
float r2;
unsigned char t1:2;
unsigned char t2:2;
}b;
struct var{
float lowlmn;
float highlmn;
float period;
}v;
}u;
}stars;
int main(void){
enum star_type a;
int n,i;
stars *x=malloc(sizeof(stars)*10);
printf("which type of definition would you like to use for the stars?\n");
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
for (i=0;i<n;i++){
switch (a){
MA:
scanf("%50s",x.name);
x.tp=a;
scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
for (i=0;i<n;i++)
switch (x.tp){
MA:
printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
system("pause");
return(0);
}nos, azt az errort adja, hogy name is not a struct or union. Probaltam siman csak egy valtozoba beolvasni az elemeket de ugy meg amikor a unionba akarok olvasni akkor szepen elmegy vegtelenbe, szoval nem igazan tudom mihez kezdjek.
-
cellpeti
nagyúr
válasz
Fire/SOUL/CD #834 üzenetére
Mind1 ám,mert a driverek,meg a viruskereső 64bites a notin,oszt az elég,de köszönöm!
-
blaces
tag
Celeron: Pasz, én nem tudok segíteni ez ügyben, esetleg próbálkozz mással [CodeBlocks] ez Linuxon is elérhető.
Csak nem Debreceni Egyetem?
Cellpeti a fenti linken 64-bites linux változatot találsz a CodeBlocks-ból
-
cellpeti
nagyúr
Sziasztok!
Létezik 64bites fejlesztő környezet C-hez?
-
-
celeron
senior tag
Üdv mindenkinek!
OLyan problémám lenne, hogy Fedora 10-em van feltettem rá a Netbeans 6.1-et. C-ben akarok programozni és nem tudom használni az Atl billentyűt . Szal semmi írásjelet nem tudok írni. Valaki segítsen a problémán!! -
djdemi
csendes tag
sikerült a programot megírni, ha valakit érdekel...
#include <graphics.h>
#include <conio.h>
#include <math.h>double pi =3.141592654;
double G =9.81;
int graph_open(void);
void main(void){
double v0,v0x,v0y; // *** a hajítás paraméterei
double alfa;
double y0;
double tt,tb,bx,by,tx,ty;
clrscr();
printf("Tesztadatok (100 [m/s],30 [fok], 20 [m]");
printf("\nKérem a kezdősebesség nagyságát! [m/s] >");
scanf("%lf",&v0);
printf("\nKérem a hajítás szögét! [fok] >");
scanf("%lf",&alfa);
printf("\nKérem a pont kezdőmagasságát! [m] >");
scanf("%lf",&y0);printf("\n\nPress any key to continue:");
getch();v0x=v0*cos(alfa*pi/180);
v0y=v0*sin(alfa*pi/180);// A becsapodás adatai: idő, koordináták
tb=(v0y + sqrt( v0y*v0y + 2 * G * y0 ) ) /G;
bx=v0x*tb;
by=0;// A tetopont elérésének adatai: idő, koordináták
tt=v0y/G;
tx=v0x*tt;
ty=(-G/2 * tt*tt + v0y * tt + y0);
printf("\n\nA becsapódás adatai:\n");
printf(" Ideje [tb] :%lf s\n",tb);
printf(" Távolsága [bx] :%lf m\n",bx);
printf("\n\nA tetőpont elérésének adatai:\n");
printf(" Ideje [tt] :%lf s\n",tt);
printf(" Koordinátái [tx,ty]%.4lf, %.4lf) m\n",tx,ty);
printf("\n\nPress any key to continue:");
getch();
if ( !(graph_open()) ) {
int i,j;
double t,lp;if (bx/getmaxx()>ty/getmaxy())
lp=bx/getmaxx();
else
lp=ty/getmaxy();// Az idő paramétereként fejezzük ki az x(t) és y(t) koordinátákat:
for (t=0;t<=tb;t+=tb/getmaxx()) {// Pályaadatok:
i=floor(v0x*t/lp);
j=floor((-G/2*t*t+v0y*t+y0)/lp);// Pályagörbe
putpixel(i,getmaxy()-j,YELLOW);delay(20);
}getch();
closegraph();
} else {
printf("BGI ERROR! >%i \n");
printf("\n\nPress any key to continue:");
getch();
}
}int graph_open(void) {
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\borlandc\\bgi");
return(graphresult());
} -
djdemi
csendes tag
A ferdehajításos programot BorlandC környezetben kellene megcsinálni...
Sziasztok -
cellpeti
nagyúr
válasz
Fire/SOUL/CD #825 üzenetére
Milyen progival kéne neki állni Fire?
Az egyenletet be kell írni mindenképp vagy nem? -
Hali!
Megoldható, nem olyan bonyolult aminek tűnik.
Engem viszont először az érdekelne, hogy milyen C környezetben dolgozol???
(mi a program neve, amivel dolgozol, a grafikus megjelenítés szempontjából nem mindegy)CellPeti
Amit adtál linkeket, azt ne használd, mert az egyik az egy "herélt" egyenletet tartalmaz, a másik meg(delphi), az meg hibás kódot...Fire.
UI: mondjuk azt nem értem, hogy a tömeget minek adták meg...
, nincs rá szükség a parabola kirajzolásához
-
cellpeti
nagyúr
Ezt lehet megint én értelemezem félre,hogy itt valamely mennyiséggel kell számolni,vagy csak a "sima" képeletet kell behelyettesíteni?
Mert én megtaláltam, a Ferde hajítás képleteit,a függvénytáblába,de ez nagyon nem egyszerű...és még finom voltam
Itt van egy feladat ferde hajításról,de ez Delphi-be van
A ferde hajítás képlete
Ferde hajításnál az ideális szög,ugye 45° -
cellpeti
nagyúr
Ez a feladat engem is érdekelne...
Hát mindenképp kellenek hozzá a matematika dolgok,ezért a header-eket úgy kell felvenni,ami a math.h-ba van benne,ha jól tudom. Valszeg kell majd valami,ahhoz is,hogy ki tud rajzolni a képernyőre ezt a görbét.Bennem ne bízz,kezdő vagyok.
Fel kell venni m-et,v0-t és az emelkedési szöget,mivel a szög lehet tizedes,ezért a lebegőpontosan(float) kell felveni a változókat.
Ehhez persze nem árt ismerni,hogy alapba,hogyan lehet kiszámolni és tudni a képletet. Persze azt is megteheted/jük,hogy a képletet egy fv-be beírod és a főprogramba csak meghívod.
Ennyit tudok én segíteni. Ha baromságot írtam,akkor valaki javítson ki kérem!
Jó éjszakát mindenkinek!
-
djdemi
csendes tag
sziasztok!
Kaptam egy beadandó feladatot, nem is tudom hogy kezdjek neki...ha valaki tudna segíteni megköszönném! Egy grafika feladtaról lenne szó...Íme:
Rajzolja meg és számolja ki egy m tömegű anyagi pont v0 kezdősebességű, φ0
emelkedési szögű ferde hajítás során befutott röppályát!ha valaki tud segíteni ezzel kapcsolatban, írjon
Előre is köszi
hali! -
Devdi
aktív tag
Sziasztok írtam a programozás fórumba is, de eleht hogy itt jobb helye van. Van ez a programom aminek annyi a lényege hogy kiírja a begépelt karakterek számát.
#include<stdio.h>
main()
{
double nc;
for(nc=0;getchar()!=EOF;++nc)
;
printf("%.0f\n",nc);
}
ezután gépelek gépelek és az a baj hogy nem tudom leállítani szóval nem tudom elérni azt hogy kiírja mennyi karaktert gépeltem be. Netbeanst használok ha ez segít. Valaki tudja a megoldást? -
válasz
cellpeti #817 üzenetére
Hali!
Semmi komolyra ne gondolj, "bármely" ciklus utasítást használhatod, mondjuk nagy variáció nincs, mert van a FOR, a WHILE, meg a DO-WHILE. A bármely szót azért tettem idézőjelbe, mert míg a FOR és WHILE előtesztelős ciklus utasítások(azaz a ciklusfeltétel kiértékelése a ciklusmag futattása elött történik), addig a DO-WHILE utótesztelős(ebben az esetben a ciklusmagban lévő programkód egyszer mindenképp lefut, és csak azután kerül kiértékelésre a ciklusfeltétel) ezért ezt körültekintően kell alkalmazni.
A hisztogramokat meg nagy általánosságban úgy lehetne meghatározni, hogy különbözö adatok, folyamatok, információk stb vizuális megjelenítése...
Egy oszlop diagram is hisztogram. De egy program működéséről is lehet hisztogramot készíteni, csak ott úgy nevezik hogy folyamatábra...
És persze számtalan különféle hisztogram létezik, amit felsorolni sem lehet, de Te is nap mint nap találkozol rengeteggel....Fire.
-
cellpeti
nagyúr
válasz
Fire/SOUL/CD #815 üzenetére
"kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig..."Nem értem,hogy ez milyen ciklus is lenne? Talán while?
Mi az a hisztogram?
-
válasz
cellpeti #814 üzenetére
Hali!
A második feladattal kezdeném
kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM \t, \b karakter akkor simán kiiratod
ha IGEN akkor nem iratod ki, hanem helyette a dupla backslash-t =>printf("\\\\")
C-ben a backslash karaktert "duplázni" kell kiiratáskor(többekközt), erre azért van szükség mert a backslash vezeti be a vezérlőkaraktereket is \t,\n,\b stbAz első példa
kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
kell egy "szőközjelző" integer pl _IS_SPACE, ezt a progi elején nullázd
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM SZÓKÖZ KARAKTER, akkor kiiratod és az _IS_SPACE-t ALACSONYRA(0) állítod
ha a string[n] SZÓKÖZ KARAKTER, akkor megvizsgálod, hogy az _IS_SPACE alacsony(0) vagy magas(1)
ha az _IS_SPACE ALACSONY(előtte nem szóköz volt) akkor kiirod a szóközt, és MAGASRA(1) állitod az _IS_SPACE-t
ha _IS_SPACE MAGAS(elötte szóköz volt) akkor nem iratsz ki semmitLeírva bonyolultabb mint a kész progi...
Fire.
-
cellpeti
nagyúr
1. Írjunk programot,ami a bemenetre adott szöveget,úgy másolja át a kimenetre,hogy közben az egy vagy több szóközből álló karaktersorozatokat egyetlen szóközzel helyettesítse.
2. Írjunk programot,ami a bemenetre adott szöveget úgy másolja át a kimenetre,hogy közben a tabulátorjeleket \t, a visszaléptetéskaraktereket \b és a fordított törtvonalkaraktereket(backslash) \\ karakterrel helyettesíti!
-
Jester01
veterán
válasz
cellpeti #811 üzenetére
Egyes számú okos tanács: próbáld ki
Kettes számú okos tanács: mindig használj kapcsos zárójelet ciklusokban és feltételekben
Hármas számú okos tanács: a main úgy illik, hogy int-et adjon visszaHa a kapcsos zárójeleket betesszük úgy, ahogy a fordító értelmezi a te kódod, akkor ez lesz:
while (( c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c=='\t') {
++tab;
}
}
++ujsor;
++space;Látható, hogy az utolsó két sor nem hogy az if-ben, de még a while-ban sincs benne. Tehát azok mindig 1-et fognak kapni. A tab változó pedig önmagában számolja mind a 3 típust, vagyis azok összege lesz benne. A 3 karaktert külön-külön feltétellel (vagy switch szerkezettel ha már azt ismered) kell ellenőrizni, és persze mindet a cikluson belül.
-
cellpeti
nagyúr
válasz
cellpeti #810 üzenetére
Sziasztok!
Az előző feladatot sikerült megcsinálnom Fire segítségével.
Itt lenne egy másik feladat:
Írjunk progit,amely megszámolja a bemenetre adott szövegben lévő szóközöket,tabulátorokat és új sor karaktereket.
Amit megírtam,de nem is bizti,hogy jó,meg lehet valaki tud valami okos tanácsot adni,hogy lehetne kicsit tömörebben. A forráskódot belinkelem,ha lehet ne szapuljatok,mert kezdő vagyok.
#include<stdio.h>
void main(void)
{
int c,tab,ujsor,space;
tab = 0;
ujsor =
space = 0;
while (( c = getchar()) != EOF)
if (c == ' ' || c == '\n' || c=='\t')
++tab;
++ujsor;
++space;
printf("%d\n",space);
printf("%d\n",ujsor);
printf("%d\n",tab);
} -
cellpeti
nagyúr
Sziasztok!
Nekem van egy olyan feladatom,hogy írassam ki EOF értékét,de nem teljesen vágom mit és hogyan kéne
-
nemmegyaC
csendes tag
Haliho mindenkinek!
Nekem lenne 4 (rövidebb...állitolag...
) prog házim. És nem boldogulok vele. C-ben kéne megirni, ömmm...holnapra
És futnia kell, csak ugy fogadják el
Tudna nekem ebben segiteni vki okos-lelkes programozo?
A feladatok:
1.,Írjon és deklaráljon C függvényt, amely egy nullavégű sztringben
kicseréli az angol abécé kisbetűit a nekik megfelelő nagybetűkre.
Használjátok a isupper, toupper, islower, tolower függvényeket.int islower(c): TRUE if c is any lowercase char
int isupper(c): TRUE if c is any uppercase char
int tolower(c): convert c to a lowercase
int toupper(c): convert c to uppercase2., Írjon és deklaráljon C függvényt, amely összefűz két, paraméterként
kapott NULL terminált sztringet! Az eredményt ne visszatérési értékként adja
vissza, válasszon más módszert! (Nem használhatjátok a string.h-t.)3., Írjon és deklaráljon C függvényt, amely egy nullavégű sztringben, amely
egyes karaktereket ('1') és nullákat ('0') tartalmaz, minden EGYMÁST KÖVETŐ
ötödik egyes után beír egy nullát ('0')! Az eredmény számára a függvény
foglal helyet. (Ez kicsit hasonlít ez első házi 3., feladatához, de muszáj
gyakorolni, szóval rágjátok át rendesen.)4., Amit az órán lediktáltam: void reverse(char* str,char* rev); A fv. a
rev-t állítja elő a str megfordításával (Pl.: str "Hello" rev "olleH").
Vigyázzatok, hogy a rev nullterminált legyen, és ebben a feladatban hívó
foglal helyet a rev-nek. Írjatok teszt main-t is.Elöre is nagyon köszönöm!
Szép napot mindenkinek
-
blaces
tag
Sziasztok!
Most hardcore szinten belefogtam a C tanulásába magamtól (könyv alapján) eldöntöttem, hogy ideje normálisan megtanulni programozni ,persze közben a félévben is tanulni kell az egyetemen
A könyv azt írja, hogy a ?: operátor jobbról balra típusú... egy fél nap alatt a többire rájöttem, hogy miért olyan asszociativitással rendelkezik. A könyv két példát hozz fel erre az operátorra:
x < y ? (min1 = x) : (min1 = y);
min2 = x < y ? x : y;az utóbbinál értem, mert ez olyan mint egy értékadás
, de az első verziónál nem látom, hogy mitől lenne ez jobbról balra... nekem balról jobbra félének látszik.
-
skoda12
aktív tag
válasz
Dirty_Pio #804 üzenetére
Most pici jobban ránéztem a kódra. A fordító azért is szólni fog, amit fentebb írtam. Nem az a lényeg, hogy %i vagy %d, hanem, hogy kell a printf-nek következő paraméter is. Az is probléma viszont, hogy pár dolgot elírtál, pl printf helyett pritnf -t írtál, printstudents nevű függvényed pedig nincs, szintén elírás miatt, emiatt nem találja ezeket a függvényeket. Strcpy-t sem fogja felismerni, mert nincs betolva a megfelelő header fájl. Így már megeszi a fordító:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
void read_student ( struct student a[], int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
printf("\n the %d th student is:",i);
e=getname(p);
a[i].name=malloc(e*sizeof(char));
strcpy(a[i].name,p);
printf("\n mark for %s :",a[i].name);
scanf("%f",&a[i].mark);
}
free(p);
}
void printstudents(struct student a[], int n)
{
int i;
struct student *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].name);
}
int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudents(a,nstdnt);
return(0);
} -
Dirty_Pio
csendes tag
Annak a printfnek semmi baja... amugy az ANSIC ben lehet hasznalni %i -t az integerek kiirasara, nem szukseges feltetlenul a %d (decimal) placeholder hasznalata. A masik printf -fel van baj: azzal amelyikben az a[i].name szerepel, es nem tudom hogy miert :az error igy hangzik: undefined reference to printf es a masodik a printstudentben is ugyanez az error jelentkezik. Es axitcode 1 el kilep a fordito.
-
Dirty_Pio
csendes tag
Na... kozbe rajottem egy-ket nagyobb hibamra, szoval igy nez ki a javitott kod:
#include <stdio.h>
#include <stdlib.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
read_student ( struct student a[], int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
pritnf("\n the %i th student is:");
e=getname(p);
a[i].name=malloc(e*sizeof(char));
strcpy(a[i].name,p);
printf("\n mark for %s :",a[i].name);
scanf("%i",&a[i].mark);
}
free(p);
}
pritnstudnets(struct student a[], int n)
{
int i;
struct student *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].name);
}
int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudenst(a,nstdnt);
return(0);
}A forditas elindul, de a lineker problemat talal a pritntf -ben a readstudent fuggvenyen belul, szovla mi a tehendom ?
-
Dirty_Pio
csendes tag
Itt megint problemam van :
#include <stdio.h>
#include <stdlib.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
read_student ( struct student a, int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
pritnf("\n the %i th student is:");
e=getname(p);
a[i].name=malloc(e*sizeof(char));
a[i].name=*p;
printf("\n mark for %s :",a[i].name);
scanf("%i",&a[i].mark);
}
free(p);
}
pritnstudnets(struct student a, int n)
{
int i;
stdnt *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].*name);
}
int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudenst(a,nstdnt);
return(0);
}NEm tudom hogy hogyan vonatkozzak egy sturkturaban levo pointerre
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Kerékpárosok, bringások ide!
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen széket vegyek?
- One otthoni szolgáltatások (TV, internet, telefon)
- Goddess of Victory:Nikke
- OLED TV topic
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- TCL LCD és LED TV-k
- SSD kibeszélő
- Linux kezdőknek
- További aktív témák...
- Easun iSolar SMW 11kW Twin Hibrid inverter // Dupla MPPT // BMS // WiFi
- GAMER PC : RYZEN 7 5700G/// 32 GB DDR4 /// RX 6700 XT 12 GB /// 512 GB NVME
- GAMER MSI LAPTOP : 15,6" 144 HZ /// i5 12450H /// 16GB DDR4/// RTX 4050 6GB/// 1TB NVME
- Manfrotto 055 magnézium fotó-videófej Q5 gyorskioldóval
- Sony ECM-W2BT
- BANKMENTES részletfizetés Noblechairs HERO Fekete/Platinafehér Gamer Szék
- DELL PowerEdge R640 rack szerver - 2xGold 6138 (20c/40t, 2.0/3.7GHz), 64GB RAM,4x1G, H730 1GB, áfás
- Dell P2419H P2419Hc Full HD LED IPS 24" + P2719H 27" LCD monitor (vékony keretes)
- Wilbur Smith könyvek (15 db) egyben
- Dixit 4 Eredet (bontatlan, fóliás kártyacsomag)
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged