- Motorola Edge 40 neo - színre és formára
- Milyen okostelefont vegyek?
- iPhone topik
- DIGI Mobil
- Motorola Edge 40 - jó bőr
- Garmin Forerunner 255 Music - nem csak futóknak
- Xiaomi Smart Band 8 - folyamatosan
- Itt az első kép a 2024-es Nokia 3210-ről
- Google Pixel 8 Pro - mestersége(s) az intelligencia
- Redmi Note 10 Pro - majdnem minden stimmel
Hirdetés
-
Toyota Corolla Touring Sport 2.0 teszt és az autóipar
lo Némi autóipari kitekintés után egy középkategóriás autót mutatok be, ami az észszerűség műhelyében készül.
-
Súlyos adatvédelmi botrányba kerülhet a ChatGPT az EU-ban
it Egyre nagyobb probléma az AI hallucinálása – most az osztrák adatvédelmi hatóság veheti elő a ChatGPT miatt az OpenAI-t, alapvetően a GDPR megsértése miatt.
-
Kicsit extrémre sikerült a Hyte belépője a készre szerelt vízhűtések világába
ph A cég megoldása centralizált vezérelhetőséggel, masszív radiátorral és robusztus ventilátorokkal igyekszik vásárlásra csábítani.
Új hozzászólás Aktív témák
-
Gyuri16
senior tag
-
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 0Nem vagyok egoista, csak uborkagyalu!
-
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..
Nem vagyok egoista, csak uborkagyalu!
-
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)Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz skylaner #1158 üzenetére
makrot definialtal. ezt a c preprocessora feldolgozza, es a fordito mar nem latja hogy ott mi volt eredetileg, tehat addigra mar be van helyettesitve a makro teste, nincs fuggvenyhivas
wiki: [link]
gcc doksi: [link]mod: sokaig kinlodtam ezzel a bonyolult esszevel, megeloztek
[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
-
Gyuri16
senior tag
válasz mrbig25 #1217 üzenetére
tobb egyszeru megoldas is van erre, kellene ismerni a konkret korulmenyeket.
ha tudod hogy nem tul sok fajta szam lesz (mondjuk max 100) viszont ezekbol sok (ertsd: a legtobb szam tobbszor is lesz), akkor csinalsz egy akkora tombot, kinullazod. aztan veszed a szamaid sorban, es a tombben azon az indexen levo erteket egyel noveled. igy a vegen megkapod a 100as tombben, hogy melyik szambol mennyi volt.
ha nagy intervallumbol lehetnek a szamok, ill tul nagy pazarlas lenne a tomb (nagy ugrasok vannak a szamok kozott), akkor lancolt listaval lehet probalkozni (a lista minden eleme tartalmazza a szamot, es a gyakorisagat + pointert a kovetkezo elemre). nagyvonalakban:
x=kovetkezo szam a tombbol
atfutod a lancolt listat, van e mar ott x ertek
-ha igen, akkor noveled ott a gyakorisagot
-ha nem, akkor a megfelelo helyre beszurod (akar rakhatod a vegere is, de ha sorbarendezve lesz, akkor valamivel gyorsabb lesz), es a gyakorisagot beallitod 1-re
kezded elolrol, amig van szamaz elso algoritmus linearis idoben fut, viszont a felhasznalt memoria fugg a legnagyobb vart szamtol.
a masik algoritmus kvadratikus idoben fut, es a memoria linearisan fugg a kulonbozo ertekek szamatolNem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz cellpeti #1230 üzenetére
kerdest nem latok, de azert leirom: ugy jo ahogy mondod. egyik modszer, hogy nezed a szamerteket (tudod hogy az ascii tablaban a betuk egymas utan vannak, igy aztan eleg kivonnod a kisbetuk kodjabol valamennyit, es megkapod a nagybetut)
az egyszerubb megoldas a toupper, isupper fv, peldaprogram: [link]Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
-
-
Gyuri16
senior tag
olyat programot szeretnek (linux alatt) irni, ami figyeli a billentyuzeten lenyomott gombokat (nem csak a karaktereket, hanem ctrl, shift, alt, home, del, illetve ezek kombinacioit - tehat ha egyszerre tobb van lenyomva). eleg kezdo vagyok c-ben, segitseget szeretnek kerni. google azt tanacsolta, hogy probaljam meg a /dev/input/event*-t olvasni, arra viszont meg nem jottem ra, hogy ezeket az adatokat hogyan kell ertelmezni, ill hogy hogyan tudom meg, hogy milyen szamu event-et kell figyelnem. esetleg van-e erre valami standard fuggveny?
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Darth_Revan #1463 üzenetére
nalam jol mukodik. gcc 4.3.2
(utolso printf-bol hianyzik egy ", illetve egy return 0 a vegere )Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz cellpeti #1521 üzenetére
legyszives aruld el milyen iskola ez, ha nem akarod kiirni privatban is lehet (nyugodt lehetsz nem fogom senkinek tovabbadni, csak erdekel. egyetemista vagyok, es nalunk inkabb orulnek ha tobbet tudsz mint ami az anyag, nem hogy tiltanak)
hogy legyen valami on is: arab-romai konvertacion kicsit gondolkozz magad, neha jobb rajonni hoszabb ido alatt egyedul.. legalabb kezdd el az alapokat, ird le papirra, hogy hogyan csinalod te manualisan, es probalj szamitogepkent gondolkozni, tehat mik azok a lepesek amik egymast kovetik, es milyen feltetelek mellett
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz cellpeti #1523 üzenetére
jo, ez mas dolog, attol fugg a tanar mennyire veszi komolyan az ilyen formalis dolgokat. nekunk is volt projektunk, ahol azt mondta, hogy levon pontokat, ha nem a standard szerint indentalunk. c-ben ha minden igaz a prototipusokat kulon fajlban szokas definialni *.h, es ezeket includolni a fajl elejen. ha pedig ugyanabban a fajlban akarod, akkor lehet hogy igy egyeseknek jobban tetszik, nem tudom (c-ben eleg kezdo vagyok, de szabadidomben probalok rajta valtoztatni )
ami meglep, hogy egy egyetemen megcsinaljak veled, hogy nem hasznalhatsz olyat amit te onszorgalombol megtanultal. nalunk senkit nem erdekel, hogy a feladatot ugy oldod e meg ahogy az tanitva volt, vagy mashogy (termeszetesen csak ha jol csinalod )Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz cellpeti #1524 üzenetére
itt egy magyar flash amivel lehet jatszani:
[link]valahogy igy programoznam:
arab -> romai
max 3xxx-ig csinalom (mert tovabb nem tudom hogy a romaiak hogyan szamoltak).csinalsz 4 tombot (egyeseknek, tizeseknek, szazasoknak es ezreseknek), kb igy:
egyesek: I,II, ...,IX
tizesek X,XX,XXX,XL,L,LX,LXX,LXXX,XC
szazasok C,CC,CCC,CD,D,DC,DCC,DCCC,CM
ezresek M,MM,MMM
szoval mesz a szamjegyeken sorban, mondjuk a legkissebtol a legnagyobbig.
megnezed hogy az egyeseken mennyi van (ez ugye szam % 10), a tizesek tombbol azon az indexen levo stringet megjegyzed (beleteszed az eredmenybe)
aztan tizesek: a tizesek tombben a megfelelo indexen levo stringet hozzamasolod ahhoz amit elobb megjegyeztel
etc..
igy a vegere kijon az egesz romai szamodna kozben nezem hogy vannak roviditett verziok is, pl 1998 lehet MCMXCVIII, vagy MIIM, de akar IIMM, ezekkel nem foglalkozom
Nem vagyok egoista, csak uborkagyalu!
-
-
Gyuri16
senior tag
válasz Dead_slow #1609 üzenetére
ebben a sorban van a hiba:
printf("|%c", tabla[j][i-k]);
ha k>i akkor nem lesz jo. ha pl j=2, i=2, k=3 akkor tabla[2][-1] lesz az eredmeny ami a tabla[1][9] re fog mutatni, ezert lehet hogy mas oszlopba lep at. tehat eleg ele tenni egy ifet, es ha k>i akkor ures helyet rajzolni odaNem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1611 üzenetére
eleg erdekes dolgot irtal, nem egeszen ertem mit akartal ezzel a sorral:
printf("|%c",tabla[' '][' ']);
ha jol gondolom (ha nem akkor valaki javitson ki) az tortenik hogy a ' ' atvaltozik szamra (32) es azzal indexeled a tombot, es kiirsz valamit, rosszabb esetben megfagy a program mert olyan helyre nyulkalsz ahova nem szabadna.
en siman kiiratnak egy "| "-t igy:
printf("| ");Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1613 üzenetére
de a te megoldasod nalam "|"-t ir ki "| " helyett az elso sorokban, azon kivul nem korrekt (ha beadando akkor pontlevonas).
kicsit jatszottam vele es sikerult rossz helyzetet eloidezni. a kododba raktam egy masik tombot ami pont akkora hogy a tabla[32][32](ami a tabla[' '][' ']) cim benne legyen, es arra a cimre raktam egy 'x' jelet. itt a forraskod reszlete (abban nem vagyok biztos, hogy ez most nalad is mukodni fog e igy, nem tudom pontosan hogyan foglalja le a memoriat, eloszor az en tombomet a tabla ele rakta, vegul sikerult ravennem, hogy utana tegye):char tabla[10][10];
char kuk2[225];
int sor,oszlop,lep;
char imp[3];
void init(){
for(sor=0;sor<9;sor++){
for(oszlop=0;oszlop<9;oszlop++)
tabla[sor][oszlop]=' ';
}
kuk2[224]='x';
}ezen kivul minden olyan mint amit te irtal. itt a kimenet:
gyuri@TGyuri:~/phprogs$ gcc -o sakk sakk.c && ./sakk
Kerem a babut es a poziciojat pl.:(Ha1): Ha1
Kerem a babut es a poziciojat pl.:(Ha1): *
A B C D E F G H
1 |H| | | | | | | |
2 | | | | | | | | |
3 | | | | | | | | |
4 | | | | | | | | |
5 | | | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |
lepeszsam:4
A B C D E F G H
1 |x|x|x|x|x|x|x|x|
2 |x|x|x|x|x|x|x|x|
3 |x|x|x|x|x|x|x|x|
4 |x|x|x|x|x|x|x|x|
5 |H| | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |amint latod kiirta az x-et a masik tombbol. ez egy nagyobb projektnel ahol tobb valtozod van elofordulhat ilyen ugyeskedes nelkul is
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1616 üzenetére
1, initet akkor hivd meg, amikor mar beolvastad a meretet (beker()-ben a scanf(...meret) utan, es aztan a mainbol kikell venni az initet)
2, beker()-ben a do ciklus eleg ha a printf("Kerem a babu poziciojat:"); elott kezdodik (meretet eleg egyszer beolvasni)ezeket kijavitva nalam mukodik
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1619 üzenetére
azon a ponton amikor mar tudod, hogy cenzurazni kell, kovetkezot csinalod:
-ha szohossz < 3 akkor odebbtolod* a string tobbi reszet annyi hellyel jobbra, hogy beferjen a 3 csillag
-ha szohossz >= 3 akkor odairsz 3 csillagot es szohossz-3al balra tolod a maradek szoveget* odebbtolas azt jelenti, hogy minden egyes betut x hellyel odebb masolsz. vigyazni kell, hogy a string eleg nagy legyen. mivel tobb hellyel kell mozgatni hatulrol kezdenem, tehat ha pl jobbra kell eltolni, akkor eloszor az utolso elemet tennem x hellyel jobbra, aztan az utolso elottit, stb. ha pedig ballra akkor eloszor az elsot.. meg nem art odafigyelni, hogy a string veget jelzo 0at is masold. (ajanlom fuggvenykent megirni, hogy tudd egyszeruen kulon tesztelni)
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
ez a progam igy nem korrekt. egyreszt szintaktikailag se jo (eredet(i) helyett eredet[i]). masreszt a beolvasasod se jo, mivel a valtozodat mindig felulirod, igy csak az utolso betut jegyzed meg
hogy az eredeti kerdesre valaszoljak: isalpha() fuggveny segithet, ez megnezi, hogy a char amit adsz neki betu e, ha csak kisbetuk erdekelnek akkor islower()
#1650:
Sk8erPeter szepen osszefoglalta pedig. probald meg a programot a hsz-e vegerol lemasolni. irj hozza annyit, hogy kiirasd a ket valtozot. ezutan forditsd le, es futtasd a ket parameterrel[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
egyaltalan nem ertem mit csinaltal. az eleje (majdnem) jo, igy kellene kineznie:
if (argc < 3) {
/* keves parametert adtal meg, irass ki valami hibauzenetet,
es hogy hogyan kell hasznalni a programodat,
aztan lepj ki hibakoddal */
}
min = atoi(argv[1]);
max = atoi(argv[2]);
ekkor a ket parameter amit a programod utan irtal futtataskor a min es max valtozokban lesz. tovabb nincs miert foglalkoznod az argv-vel. a feladatod szerint igy kellene folytatni:
if (min>max) {
/* csere: min <--> max */
}
int i;
for (i=min; i<=max; i++) {
// vegignezzuk az osszes szamot min es max kozott
/* ha i primszam akkor kiirod ahova kell */
}ott ahol /* kommentar */ van, kell irni meg par sornyi kodot
[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Sk8erPeter #1658 üzenetére
szerintem a prime_or_not nagyon szerencsetlen fuggvenynev, hiszen a "prim vagy nem" mindig igaz, nem egyertelmu mit csinal a fuggveny. inkabb is_prime vagy hasonlo javasolt.
igen, szeretem mas kodjat kritizalnite mar a jobb verziot csinaltad, ami csak a gyokeig keresi az osztokat. viszont foloslegesen mesz vegig az osszes oszton, ha mar megtalaltad, hogy valami osztja (divider valtozod), ott mar ki tudod jelenteni, hogy nem prim
itt az en verziom (tiedet felhasznalva), ami jobban koveti az eredeti kiirast (ezert aztan butabb is, viszont lehet kicsit egyszerubb):
#include <stdio.h>
#include <ctype.h> /* isdigit() miatt */
#include <stdlib.h> /* atoi miatt */
int prim(int i);
int main(int argc, char *argv[]) {
/* beolvasas, ugyanaz.. */
int i;
for (i=min; i<=max; i++) {
if (prim(i))
printf("%d\n",i);
}
}
int prim (int i) {
if (i<2)
return 0;
int j;
for (j=2; j<i; j++) // itt eleg lenne sqrt(i)-ig
if (i%j==0)
return 0;
return 1;
}[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Sk8erPeter #1663 üzenetére
igazad van, megzavartak a kommentek
Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható.
egy szo: KISS annak a fuggvenynek az a dolga hogy megmondja prim-e vagy nem. lehet nekem mas a velemenyem a fuggvenyek tervezeserol (es nem feltetlenul jo), ezert irtam csakMár kezdem bánni, hogy megcsináltam a programot a srác helyett.
sorry, nem ezt akartam elerni.
szerintem egy ilyen forumon van helye errol beszelni, hiszen van itt jopar szakember, akiknek a velemenyere adokNem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
egy kis program forraskodjat neztem, ennel megakadtam:
n = snprintf(buffer, sizeof(buffer),"...",... );
/*
* We write it with the final '\0' and then truncate it.
* This way, even if somebody were to read it concurrently,
* the data should always be valid as a string.
*/
write(fd, buffer, n+1);
ftruncate(fd, n);mit akar jelenteni ez a komment? es miert is jo ez igy?
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Jester01 #1678 üzenetére
koszonom, igy mar ertheto.
kozben tovabb olvasva talaltam meg egy erdekeset:
program elejen van egy ilyen:
signal(SIGCHLD, SIG_IGN);
(ha jol tudom ez a default beallitas..)aztan kesobb ez:
int pid = fork();
if (!pid) {
/* ... */
exit(1);
}
/*
* Yeah, we set CSIGCHLD to SIG_IGN, so this should
* never even succeed reliably anyway, but at least
* we'll wait for the child to exit, and not have
* potentially lots of children outstanding.
*/
if (pid > 0) {
int status;
waitpid(pid, &status, 0);
}itt ismet a kommentar amit nem ertek.
azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerintmod: miert lettem en is OFF? en nem akartam
[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Jester01 #1681 üzenetére
koszonom, ertem.
igy viszont nem igazan vilagos mire is volt jo az, hogy beallitotta SIG_IGN-ra az elejen, hiszen ez a default ertek, es ha jol ertem akkor ezzel csak azt erte el, hogy a waitpid() az osszes gyerekre var (viszont itt mindig csak egy lesz egyszerre). tehat ha az elejen nem teszi oda a SIG_IGN-t, es a fork() utan tesz egy wait()-et, akkor nem ugyanez az eredmeny?
a program ezen kivul nem hoz letre processzeket (kiveve, hogy a foprogram demonkent fut)mindenesetre majd holnap kiprobalom, hogy is mukodik ez
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
miutan beolvastad az adatokat vegzel egy ellenorzest.
egy for ciklussal vegigmesz a string elemein, mindegyiken megnezed, hogy 1 es 6 kozott van-e.
ezt legegyszerubben ugy, hogy a betu '1' es '6' kozott van-e (siman osszehasonlitassal), igy:char k;
/* k-t beolvasod stb.. */
if (k>='1' && k<='6') {
/* a szam 1 es 6 kozott van */
}ez a megoldas nem a legszebb, mivel bizik abban, hogy a kodolasban a szamok novekvo sorrendben vannak egymas utan (altalaban ez igy van). ha ez nem tetszik, akkor az isdigit() fv segithet.
(bar megjegyzem en inkabb eleve szamokkent kezelnem ezeket az adatokat, es ugy is olvasnam be oket)az egesz tesztelest es beolvasast pedig egy ciklusba teszed, amit addig csinalsz, amig nem jo amit bead a felhasznalo
tovabba nem lenne rossz megnezni azt is, hogy a beolvasott dobas valtozod megegyezik-e a beolvasott dobasok szamaval
nepszter1: nem ertem mit kerdezel, olvasd el magad utan a hozzaszolasodat, es gondold ujra. ha egy szam osztoit akarod kiiratni, akkor vegigmesz egy ciklusban 2 tol a szamig, es a mar emlitett % operatorral megnezed osztja e.
[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz nepszter1 #1693 üzenetére
te meg nem erted, hogy fogalmam sincs mit akarsz?
"...hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen "
ezt hogyan ertelmezzem?? ennyit irtal, probaltam ra valaszolni. abbol amit irtam ha legalabb kicsit is akarod meg tudod irni a programot
{itt egy osztonzo beszed lett volna, hogy nezz utana, tanuld meg. hiszen a vizsgan ugyis tudnod kell majd, de rajottem nem eri meg. ha ennyire nem erdekel a dolog ird le rendesen mit akarsz (hogyan van a beolvasas,...) es megirom}[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz nepszter1 #1695 üzenetére
#include <stdio.h>
int main() {
int x;
printf("Add meg a szamot!\n");
scanf("%d", &x);
if (x % 6 == 0)
printf("A szam oszthato kettovel es harommal is\n");
else if (x % 2 == 0)
printf("A szam kettovel oszthato, harommal nem\n");
else if (x % 3 == 0)
printf("A szam oszthato harommal, kettovel nem\n");
else
printf("A szam nem oszthato se kettovel se harommal\n");
return 0;
}meg mindig nem teljesen vilagosan irtad le, de gondolom valami ilyesmi kell. nezd meg, es probald meg megerteni mit csinal (direkt nem irtam legegyertelmubben), ne csak leadd a tanarnak
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1706 üzenetére
scanf tud olyat, hogy a formazo stringben megmondod neki milyen karaktereket matcheljen. igy kell irni: %[a-z] ez pl azt jelenti hogy mindent a-tol z-ig. negalni lehet ^ jellel, that pl ez: %[^,] azt jelenti, hogy mindent a vesszon kivul. ezt felhasznaljuk ehhez. tehat az elso kettonel (Lili, 7) az elvalaszto a vesszo lesz, a harmadiknal pedig a \n. igy fog kinezni:
#include <stdio.h>
int main() {
char a[80], b[80], c[80];
scanf("%[^,], %[^,], %[^\n]",a, b, c);
printf("%s\n%s\n%s\n", a, b, c);
}Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1711 üzenetére
amit irsz, igy ranezesre jo. tehat tegyuk fel, hogy a beolvasas megvan.
a listaz fv-ben megallapitod a min es max evet amit majd a kimenetbe irsz. itt egy kis bug szerintem, a max-ban a tavozast kellene nezni, nem az erkezest.tovabb az en javaslatom:
lesz egy tombod amit az evvel indexelsz ( (ev-min)-nel konkretan, hogy uljenek az indexek). ez a tombod jegyzi meg az evben ott levo elefantok nevet. Ezt szerintem legegyszerubb lancolt listaval (mivel elore nem tudod, hogy mennyi elefant lesz az adott evben, igy elore nem tudnad a tombot lefoglalni. persze lehet lefoglalni tobbet..)
szoval a tombod minden eleme egy lancolt lista elejere fog mutatni. a lista elemei lehetnek mutatok az elefant structokra. egy ciklusban vegigmesz az osszes elefanton, es az eves tombodbe a listakba hozzaadod a megfelelo evekhez.ha nincs kedved a lancolt listahoz, lehet csinalni tombbel is, akkor lefoglalsz akkora tomboket mint amennyi elefant osszesen van.
ha pedig csak kiiratni kell, akkor lehet akar egyenesen stringbe is gyujteni a neveket evek szerint, ez is kicsit maceras, hiszen oda kell figyelni, hogy eleg hely legyen lefoglalva
lehet mashogy is csinalni, de gondolom nincs egy elefantfarmod ahol tenyleg futna a program[ Szerkesztve ]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1715 üzenetére
"nem fogadták el, mondván, hogy a név állhat simán 3 részből is"
az nem gond. amit en irtam az az utolso reszt elolvassa a \n-ig, tehat ilyen is jo lesz:
valami, 2, Abc Efg Hijaz viszont igaz, hogy ezt nem igy kellene megcsinalni, amint azt Jester01 is irta.
azzal amit irtal az a gond, hogy elso, masodik es harmadik stringjeidet i-vel indexeled, ami egyre nagyobb. az elso jo lesz, de a masodikban mar nem a nulladik helyrol kezded feltolteni a stringet.Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1718 üzenetére
ha a tanaraid szigoruak, akkor meg van par dolog amit lehet ezen javitani:
1. gets nem egy tul jo fuggveny, mert nem ellenorzi a buffer es a bemenet hosszat. buffer overrun lehet a vege. helyette inkabb fgets ajanlott
2. a programod jol lefut, ha olyan bemenetet kap, mint amilyet var, viszont ha csak egy vesszo van a mondat-ban, akkor csunya dolgokat csinal. a while ciklusaidban jo lenne a mondat veget jelzo \0-t is figyelni (ilyenkor valami hibakoddal kilepni)
ez ervenyes az i=i+2-re is
3. a masodik es harmadik stringet nem zarod le \0-valNem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Scroll Lock #1724 üzenetére
nem kell deklaralnod. hasznalni ugy kell hogy eloszor nullazod (ez foleg akkor kell, ha a fuggvenyed amit majd hivsz ha -1et ad vissza, nem feltetlenul hibat jelent). azutan meghivod a fuggvenyed, ha -1-el ter vissza akkor az errno-ban lesz a hiba oka. ezt nem rossz rogton feldolgozni, mert sok fuggveny modosithatja, igy aztan megvaltozhat az erteke
van egy par specialis eset, ezeket nem rossz megnezni a manualban. ugyanitt megtalalod a hibakodokat is
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Scroll Lock #1732 üzenetére
altalaban ugy mukodik, hogy meghivod a fuggvenyt, ha hibat csinal akkor beallitja az errno-t olyan ertekre amibol a programozo valamit megtudhat, es visszater -1-el. az errno egy szam lesz, ezek minden ilyen fuggvenynel le vannak irva a manualban. a linken amit legutobb adtam fel vannak sorolva omlesztve a hibakodok. a kod nem a hiba helyet adja meg, hanem a "fajtajat". tehat pl malloc. kaphatsz ENOMEM hibakodot, ez az jelenti, hogy nincs mar hely, es ne is nagyon bizz benne, hogy lesz, mig EAGAIN azt jelenti, hogy most nem sikerult lefoglalni a helyet, de majd probald meg kesobb.
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
milyen IDE-t ajanlasz/hasznalsz Qt-hoz? (olyan wysiwyg csodara gondolok)
egyelore c-t vimben irok, ami szuper, viszont grafikus cuccot nem igazan tudom elkepzelni vele
(btw ha van itt vim guru, szivesen elbeszelgetnek vele foleg debuggolas erdekel vim alol, illetve olyan -nem tudom a nevet- cucc ami odaugrik egy fuggveny kodjara, illetve vissza, ha egy fuggvenyhivasrol megnyomok egy gombot)Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
orulok, hogy mas is hasznal vimet
igen ctags-ra gondolok, kicsit jatszottam vele (foleg azert, mert autocompletionhoz is kell), mas tapasztalata alapjan konnyebb beallitani ezeket a dolgokat. sajnos a dokumentacio egyes pluginokhoz eleg keves.
debuggolasra probaltam yavdb-t, de nem sikerult beizzitani (leiras alapjan nem tudtam megcsinalni)
gdb nekem mar tul fapadosugralos dolgot mindjart kiprobalom
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Korcsii #1795 üzenetére
ezt pont igy meg lehet irni, olvasd el megegyszer shev7 es doc hszait.
a qsortnak adhatsz egy fuggvenyt, ami eldonti miszerint lesz rendezve. megirod ezt a ket fuggvenyt (varos es termek szerint), es beirod az ifedbe a megfelelo parameterekkel a qsortot
itt egy pelda: [link]
Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Sk8erPeter #1822 üzenetére
nem tudom mire gondolt shev7, de en kb igy csinalnam:
eloszor papirra lerajzolnam a nem determinisztikus automatat (NFA). ebbol lehet ekvivalens determinisztikusat csinalni (DFA), mivel a DFA es NFA ereje ugyanakkora. ez kicsit maceras, de meg lehet csinalni. ha ez megvan akkor az atmeneti fuggvenyt valami ertelmes adatstrukturaba rakod, es onnan mar csak szimulalod a DFA-t.
ha nem volt meg formalis nyelvek es automatak tantargyad akkor vagy kitalalsz valamilyen sajat modszert, vagy valahol elolvasod mik a fenti dolgok (DFA es NFA a legegyszerubb modell, ugyhogy a tankonyvek elejen szok lenni)Én viszonylag egyszerű megoldásra gondoltam, hogy ellenőrizgetem, hogy megfelel-e a reguláris kifejezéseknek
ezzel csak az a gond, hogy nem olyan egyszeru mint hangzikNem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz AlapVaj #1871 üzenetére
hogyan kapja meg a program a stringeket?
ha parancssori parameter (pl: program.exe alma korte) akkor az argv tombben lesznek a stringek (ez jo, mert a szokozoknel elvalasztja)
erre itt egy pelda:
[link]ha beolvasni kell stdinrol, akkor a legtisztabb megoldas az, hogy beolvasod az egesz sort (getline, fgets), es aztan egy ciklussal vegigmesz rajta, es szetvagod a beolvasott stringet ketto masikba (itt vigyazni kell, hogy le legyen foglalva a hely, ahova a stringeket masolod)
kicsit "csunyabb" megoldas, hogy miutan beolvastad az egesz sort, ami ugy nez ki, hogy "szo1 szo2\0" akkor az ureshelyet lecsereled \0-ra, es egy *chart beallitasz a szo2 elejere (igy meglesz a ket stringed ket valtozoban, es nem kell masolgatni)
Nem vagyok egoista, csak uborkagyalu!
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- A pápa egyre jobban tart a romlott AI veszélyeitől
- Az USA vizsgálja a RISC-V kínai terjedésének kockázatát
- Milyen processzort vegyek?
- Fujifilm X
- Kerékpársportok
- Bugok, problémák a PROHARDVER lapcsaládon
- BestBuy topik
- Vezetékes FEJhallgatók
- Piacvezető tandem OLED panellel érkezik az iPad Pro
- exHWSW - Értünk mindenhez IS
- További aktív témák...