- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Honor Magic5 Pro - kamerák bűvöletében
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- Samsung Galaxy S21 és S21+ - húszra akartak lapot húzni
- Samsung Galaxy A54 - türelemjáték
- Netfone
- Mobil flották
- Fotók, videók mobillal
- One mobilszolgáltatások
- Yettel topik
Új hozzászólás Aktív témák
-
Gyuri16
senior tag
tomb akarhogy is gyorsabb lesz, mar ha a beolvasasrol van szo. itt egy az egyben masolasrol beszelunk, ennel hogyan akarsz gyorsabban a memoriaba juttatni valamit? lancolt listanal sokszor kell memoriat foglalnod es erteket masolnod.
raadasul ha mar megvan a listad mit kezdesz vele? csak sorjaban tudod olvasni ami nagyon redukalja mit tudsz vele csinalni. a masik topicban irtam egy divide and conquer algoritmust, ilyesmit a listan nem tudsz megcsinalni.
ha annyira zavar, hogy kicsit tobb helyet foglaltal (ha mondjuk nem tudod elore mennyi adat lesz) azt utolag fel lehet szabaditani. ha ugyesen csinalod meg mindig kevesebb memoriad van feleslegesen mint lancolt listaval.
viszont tovabbra is nem ez a lenyegi kerdes, hanem, hogy mit akarsz kezdeni az adatokkal, hogyan szamolod at?
-
Gyuri16
senior tag
tanulj meg debuggert hasznalni. ket printf az nem debuggolas.
mi tortenik ha .-.- a bemenet? nem NULL lesz az eredmeny, mert a fadban van ilyen ag a "." karakter miatt aminek a kodja ".-.-.-" tehat a vegen egy olyan betut fogsz kapni ami abban a structban volt. mivel olyan morze kod nincs, ezert valami veletlent kapsz. innen mar gondolom egyertelmu..
-
Gyuri16
senior tag
válasz
proof88 #2731 üzenetére
a fflush(stdin); se epp a legszebb dolog. idezet a szabvanybol:
#include <stdio.h>
int fflush(FILE *stream);Description
If stream points to an output stream or an update stream in which
the most recent operation was output, the fflush function causes any
unwritten data for that stream to be delivered to the host environment
to be written to the file; otherwise, the behavior is undefined.persze ez nem jelenti, hogy xy fordito nem implementalja, viszont ha forditofuggetlenek szeretnenk lenni, akkor illik nem hasznalni.
a masik dolog, hogy ezt altalaban scanf utan szokas hasznalni, mert az sok esetben otthagy valamit az input streamen. ha viszont egyaltalan nem hasznalunk scanf-et (ami szerintem jo otlet), nem kell a fflush se. -
Gyuri16
senior tag
válasz
bucsupeti #2721 üzenetére
eulert nem ismerem, de ha programozos problemak kellenek akkor:
topcoder: tobb kategoriaban lehet versenyezni, en az algorithm-et probaltam. hetente vannak versenyek ahol 3 peldat kell megoldani ha jol emlekszem masfel ora alatt. ket kategoria van, a nehezebbik eleg durva
meg lehet nezni masok megoldasait, amibol sokat lehet tanulni. lehet a versenyen kivul is megoldani a peldakat, valaszthato nyelvek c++, c# es java
spoj ezt nem ismerem, de szoktak ajanlani, ez nem verseny, hanem kulonbozo nehezsegu feladatok gyujtohelye.
RexpecT: bignum library kell hozza, neten lehet talani, vagy irsz sajatot
-
Gyuri16
senior tag
-
Gyuri16
senior tag
tehat a gond az, hogy forditva irja ki a szavakat. tobbfelekeppen meg lehet oldani tombok es a tobbi nelkul is. legegyszerubb talan az, ha a beolvasott szamot "megforditod" egy masik valtozoba (szamkent). tehat ezzel a modulo/oszto modszerrel egyesevel veszed a szamjegyeit a legkissebbtol, es hozzaadod egy masik valtozohoz (minden lepesben szorozni kell a valtozot 10-zel). ezen a szamon aztan futtathatod a mar megirt algoritmusod.
-
Gyuri16
senior tag
válasz
WonderCSabo #2631 üzenetére
mivel '\0'==0 ezert ez mindegy, bar nem tudom, hogy melyik megoldas a "legszebb".
lasd: [link] -
Gyuri16
senior tag
válasz
CPT.Pirk #2602 üzenetére
megprobalhatnad debuggolni, megnezed melyik tesztnel segfaultol es kitalalod mi a baja
ha azt a kodot hasznalod ami fentebb van, akkor szerintem ez a teszt hal meg:
assert(strcmp(strChomp(""),"")==0);
ha a fuggvenyed ures stringet kap parameterkent, akkor ez az if:
if (buffer && *buffer) {
nem fog teljesulni (a masodik feltetel miatt). ezert a fuggveny nullal ter vissza, es azt adod oda a strcmp-nek. -
Gyuri16
senior tag
válasz
CPT.Pirk #2597 üzenetére
nem. ezek szerint nem erted a pointerek mukodeset.
egy darab stringed van, amit megkapsz a buffer valtozoban. ennek a valtozonak a tartalma egy memoriacim, ami a string elso karakterere mutat. a char *c = buffer; sor annyit csinal, hogy letrehoz egy masik pointert (mutatot), ami ugyan arra a memoriacimre fog mutatni. tehat a ket valtozo ugyanannak a stringnek az elejere mutat. ezutan a c-t hasznalod, hogy megkeresd a veget, visszalepj egyet. eddig a pontig csak a c pointert valtoztattad meg (tehat azt a memoriacimet ami a valtozoban van a stringet nem valtoztattad), a stringnek az utolso nem null karakterere mutat. ezutan a *c='\0'; sorral atirod azt a karaktert amire a c mutat (ezert van ott a csillag a c elott - a dereferencia operator). ezutan pedig a tomb elejere mutato pointerrel kell visszaternie a fuggvenynek, es az pedig a buffer valtozoban van.
-
Gyuri16
senior tag
válasz
CPT.Pirk #2593 üzenetére
ez nem jo:
if (*buffer-- == '\n'){
a -- csak a feltetel kiertekelese utan fog vegrehajtodni, ezert ez az if sose teljesul (mindig 0 lesz a buffer erteke amikor ideer). ezert a fuggvenyed mindig az utolso (nem null) karakterre mutato pointert ad vissza.Ilyenkor a *buffer-t hogyan viszem vissza a kezdeti pozícióba?
ne a buffer pointert vidd vissza, hanem hasznalj egy masikat a mozgasra (ahogy azt.Jester01 mar irta). a fuggvenyed elejen csinalj egy ilyet:char * q = buffer;
es azutan a q-val dolgozz, a vegen petig visszaterhetsz a bufferral
mas:
mikozben ezt probaltam elojott a kovetkezo hiba, miert segfaultol a devcpp erre?
char * a = "abcd";
*a = 'b'; -
Gyuri16
senior tag
válasz
RexpecT #2517 üzenetére
A karaktertömb deklarálásánál mire szolgál *s2 mutató?
ezt az egy sort:
char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323",*s2;
at lehet irni igy is:char s[]="TesZtSzoveg19SzovegTeSZt**éáéáéá43242SzovegszoveGszoVeg323";
char *s2;deklaralsz egy char tombot (s), es egy mutatot charra (s2). utobbi a fuggvenyed visszateresi ertekere kell
Hogyan tudom kiíratni a tömb összes elemét?
gondolom itt az a kerdes, hogy honnan tudod a dinamikus tomb nagysagat. a jo megoldas az, hogy a fuggvenyednek lesz egy pointer parametere ami visszaadja az elemek szamat. (lasd pl getline fv). -
Gyuri16
senior tag
pointerek nem igy mukodnek. ar egy mutato int-re, az erteke egy memoriacim. ha hasznalod a dereferencia operatort, akkor a memoriacimen levo int erteket kapod meg (*ar). mivel te lefoglaltal malloccal 100 int-nyi helyet, ezert a kovetkezo memoriacimekre is biztonsagosan irhatsz a mutato segitsegevel. a c forditoja tudja milyen tipusra mutat a pointer, es hogy az a memoriaban mennyi helyet foglal, ezert probal neked minel jobban segiteni. ha tomb szintaxist hasznalnal akkor az i-edik helyre igy hivatkoznal: ar[i]. ha a pointeres valtozatot hasznalod akkor az elozovel ekvivalens ez: *(ar+i). nem kell a sizeof-fal itt bonyolitani a dolgokat, ezt a fordito megteszi helyetted.
itt egy peldaprogram:
#include <stdlib.h>
#include <stdio.h>
int main(){
int i, *ar;
ar=(int*)malloc(10*sizeof(int));
for (i=0;i<10;i++) {
*(ar+i)=i;
}
for (i=0;i<10;i++) {
printf("%d ", *(ar+i));
}
return 0;
} -
Gyuri16
senior tag
válasz
Korcsii #2380 üzenetére
egesz sor beolvasasara ott van a getline fuggveny, nem jo scanf-fel bohockodni
ez megbirkozik a bemenettel akkor is ha nem tudod elore mekkora lesz.
a str fuggvenyekbol pedig jobb azokat hasznalni ahol a nagysagot is meglehet adni, strcat helyett strncat plszerintem a legjobb megoldas altalanos beolvasasra az, hogy getline-al beolvasol egy egesz sort es aztan szetszeded komponensekre az adott feladat szerint
-
Gyuri16
senior tag
válasz
Geri9159 #2248 üzenetére
nem csak duplan irja ki, hanem rosszul. a baj az, hogy a fscanf hivas utan ottmarad a bemeneten egy ujsor karakter, amit a ciklus kovetkezo iteraciojaban a fgets megeszik, es csak azzal ter vissza. innen pedig az egesz eltolodik. en azt ajanlom egesz fajlt soronkent olvasd be, akkor nem lesz ilyen baj. a fscanf-s reszt helyettesitheted pl igy:
char tmp[30];
fgets(tmp, 30, fbe);
sscanf(tmp,"%d %d %d %d %d %d",&diakok[diakokszam].szovegszerk,&diakok[diakokszam].prezentacio,&diakok[diakokszam].weblap,&diakok[diakokszam].tablazatkezel,&diakok[diakokszam].adatbaziskezel,&diakok[diakokszam].informatika_ism_konyvtar_internet);tovabba a fgets beolvassa az ujsor karaktert is, ezert a nev valtozodban az is ott lesz (feleslegesen) a vegen. ezert van a kimenetedben is egy sorkihagyas a nev alatt. ugyanez igaz az osztaly valtozodra is, de ott mivel limitalod a beolvasast 4 karakterre nem fer bele az ujsor, igy az jol mukodik, ha pontosan 3 karakter lesz a bemenet.
mod: amit fentebb lineltem faq, ott ez is megvan valaszolva: [link]
sok mas gyakori hibara is kiternek benne, erdemes atnezni -
Gyuri16
senior tag
gyorsan neztem csak ra, nem vettem eszre a masik hibat. szoval a misztikus scanf..
itt jobban le van irva mint en tudnam:
[link]roviden: ide nem kell a \n, mert az azt okozza, hogy addig olvas be jeleket stdinrol amig whitespace jeleket kap (az ujsor is az). egy ilyen scanf utan ugyan a \n jel ottmarad a bemeneten, de az itt nem baj, mert a kovetkezo beolvasas is float, ami atugorja ezt. ha chart olvasnal be utana, akkor az mar a \n-t kapna meg. ilyenkor nem art a stdinrol beolvasni mindent az ujsorig.
ajanlom megnezni a faq tobbi ide vonatkozo kerdeset is itt: [link] kulonosen a 12.20asat (miert ne hasznaljunk scanf-et felhasznalotol valo bemenetre)
-
Gyuri16
senior tag
válasz
Carpigabi #2239 üzenetére
ez a pelda:
Britain - Ireland
France - Germany
France - Swiss
Swiss - Germanyha grafnak megrajzolod ket osszefuggo komponense lesz:
1 Britain - Ireland2 Swiss - France - Germany
| |
------------------az elso komponens kromatikus szama 2 a masodiknak 3, ebbol a nagyobb a 3 igy az egesz grafnak is ez lesz a kr. szama.
ez az egesz csak egyszerusites. mivel a fo algoritmus bonyolultsaga exponencialis, ezert jobb, ha minel kisebb grafokon futtatod.
ezen kivul lehet optimalizalni az ismert eseteket is. vannak olyan graf osztalyok amiknek ismert a kromatikus szama. pl:
teljes graf - csucsok szama
csillag graf - 2
korgraf - 2 ha paros szamu csucsa van, 3 ha paratlantovabba azok a grafok amiknek 2 a kromatikus szamuk szinten konnyen felismerhetok, mert ezek pontosan a paros grafok (ha tobb mint 1 csucsuk van..)
ha akarsz kicsit gyorsitani az algoritmuson akar ezeket is be lehet vetni, mivel a fenti osztalyokat polinomialis idoben fel lehet ismerni.
-
Gyuri16
senior tag
válasz
Carpigabi #2237 üzenetére
iskolai feladatot itt helyetted senki nem fogja megcsinalni, viszont segitunk ha elakadsz, es konkret kerdesed van.
a feladathoz:
szetosztod a grafot osszefuggo komponensekre
mindegyiknek kiszamolod a kromatikus szamat es a legnagyobb lesz a megoldas.kromatikus szam egy osszefuggo grafhoz:
binaris keresessel. egy lepesben kibprobalod eleg e m szin (m legyen mondjuk n/2 az elejen, mivel tudjuk, hogy a kromatikus szam maximum n). ezt bruteforce csinalod.
innen a siker fuggvenyeben mindig kizarod a fel intervallumot, es megtalalod a legkisebb erteket amire meg atmegy a szinezes -
Gyuri16
senior tag
válasz
Carpigabi #2235 üzenetére
ez altalanosan egy NP-teljes problema. en nem ismerek semmilyen ertelmes algoritmust, es ugy tudom nincs is ilyen, szoval marad kiprobalni az osszes lehetoseget. kesz programom nincs, de megirni nem nagy feladat.. persze lassu lesz, de jobb nincs.
google talal egy par approximalo algoritmust, esetleg azokat is ki lehet probalni, attol fugg mire kell.
-
Gyuri16
senior tag
válasz
CPT.Pirk #2210 üzenetére
remelem ez segit:
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
int i;
for (i=0; i<argc; i++) {
printf("argv[%d] = ",i);
printf("%s\n", argv[i]);
printf("strlen: %d\n", strlen(argv[i]));
printf("betunkent:\n");
int j = 0;
while (argv[i][j++]) {
printf("%c\n", argv[i][j]);
}
// pointeresen:
char * a = *(argv+i);
while (*a++) {
printf("%c\n", *a);
}
}
return 0;
} -
Gyuri16
senior tag
válasz
!wannabe #2128 üzenetére
az add fuggvenyedben van a hiba a
end->next = new;
sornal. az elso elem hozzaadasanal az end NULL, ezert a segfault.valami ilyet javaslok:
void add( struct node *new ) /* adding to end of list */
{
if( head == NULL ) /* if there are no nodes in list, then */
head = new; /* set head to this new node */
if (end != NULL) // megnezzuk van e mar utolso elem
end->next = new; /* link in the new node to the end of the list */
new->next = NULL; /* set next field to signify the end of list */
end = new; /* adjust end to point to the last node */
} -
Gyuri16
senior tag
eloszor meg kell tanulnod hogyan tudsz halozaton komunikalni c-bol. ehhez a kulcsszo a socket. en eddig csak linuxon programoztam ilyet, de gondolom elegge hasonlo lesz windowson is. kezdetnek par link:
[link]
[link]
winsock (windowsos api):
[link]ha ez megy akkor a http protokolt kell elsajatitani. ebbol neked leginkabb a get method kell. (ezt legjobb ugy tanulni, hogy telnettel csatlakozol a kivant oldal 80-as portjahoz, es elkuldod neki a keresed, es nezed milyen valaszt kapsz)
a program igy fog kinezni:
csatlakozol a kivant weboldal 80-as portjahoz
elkuldod a http requestet, ami kb igy nez ki:GET /index.html HTTP/1.1
Host: www.example.comvalaszkent kapsz egy http headert, ebbol kihamozod a hibakodot. ha ez 200 akkor jo, es a header utan maga a dokumentum van, ha mas akkor valami hiba van (ami nem feltetlenul rossz, "hiba" lehet atiranyitas is, ezeket fel kell dolgozni valahogy)
(ha csak a forraskod kell, akkor ennyi, ha a tobbi fajl is - css, kepek, scriptek - akkor azokat hasonlo modon http-vel lekered)egyelore ennyi, ha gondolod nezz utana ezeknek, es ha valami nem vilagos nyugodtan ird ide a konkret kerdeseket.
-
Gyuri16
senior tag
válasz
peeeeeti #2073 üzenetére
hello, latom uj vagy errefele, szoval egy par eszrevetel:
1. egy masfel eves kerdesre valaszoltal, azota valoszinuleg megoldotta
2. ez nem a c++ topic, ide sima c-t szokas irni
(3. tobbnyire nem szokunk rogton mukodo programot irni valaszban, nem irjuk meg mas helyett a lecket, mert akkor semmi fejlodes nem lesz, csak jon az ujabb feladatokkal)a programodhoz: system("pause")-t hanyagold, rossz szokas egy ilyen egyszeru dolog miatt rendszerhivast hasznalni, nem beszelve arrol, hogy nem platformfuggetlen. a maradek ellenorzesenel te osztasz, pedig oda % jel kell. azon kivul ha jol latom az elso iteracion kivul mindig kiirja, hogy rosszak a szamok. a ciklusod vegen a feltetel se jo, a feladat szerint addig kell beolvasni amig nem kapsz ures sztringet, nalad pedig kilep ha rossz bemenetet kap (ahogy latom vagyot tettel oda, ami kicsit fura, nem ertem mit akartal elerni, igy most akkor lep ki a ciklusbol, ha egyik feltetel se teljesul). meg van par hiba, pl nem ellenorzod, hogy tenyleg beolvastal e 6 szamjegyet, igy ha kevesebbet adsz meg es meghivod az osszeg fuggvenyt, akkor meghal tulcimzessel
-
Gyuri16
senior tag
es a feladat melyik reszevel akadtal el?
beolvasas:
ha ki van hansulyozva hogy biztonsagosan, akkor legjobb ha pl fgets-el beolvasod az egesz sort, leelenorzod, hogy szam-e, es atalakitod (atoi)primszamok:
erre sok algoritmus van, legegyszerubb talan Eratoszthenesz szitaja. vagy vizsgalhatod minden egyes szamot kulon (egy szam prim ha 2tol gyok(szam)-ig nincs osztoja) -
Gyuri16
senior tag
jo, most mar ertem mire gondolsz. fogalmam sincs, hogyan lehetne ezt ertelmesen megtanitani es hogy egyaltalan kell-e. nalam ez ugy volt, hogy egyszer valamiert ramjott, hogy en most programozni akarok, kaptam egy kis segitseget az elejehez, aztan meg egy konyvet, amit olvastam, kodoltam es aztan ment magatol. vannak olyan dolgok amiket nem tanit meg az iskola, egy informatikusnak szabad idejeben is kellene foglalkozni vele, es igy eleg gyorsan kialakulna a fejeben egy modell a programozasrol. mostanaban linkelt valaki ide egy felmerest arrol, hogy az emberek nagy resze nem tud megtanulni programozni, nekik nem biztos, hogy ezt kellene eroltetni (mert ugye sokan mennek mostanaban ugy informatikat tanulni, hogy lovesuk sincs mibe vagnak bele). nekem ez megy, cserebe viszont nem tudok rajzolni, se enekelni es az irodalom sose erdekelt. nem tudom pl miert szebb egy vers a masiknal, miert mondjak egyik festmenyre, hogy mestermu es masikat miert nezik le.
-
Gyuri16
senior tag
hat attol fugg mit ertesz programozason. konkret prograzomozoi allasra szerintem nincs ertelme felkesziteni, hisz az egyetem inkabb az elmeleti tudast adja meg, hogy tudj gondolkozni ilyen modon, aztan a munkahelyen majd kikupalodsz. technologiabol sok van, ezert ezt se erdemes kulon tanitani. programozas tanitasnak szerintem az a celja, hogy az adott problemat (a megoldasat) meg tudd oldani az adott eszkozokkel, ehhez pedig kell egyreszt egy altalanos (nyelvtol fuggetlen) latasmod es egy jo problemamegoldo kepesseg. elsohoz tartozik a most hasznalt prog. paradigmak megertese (strukturalt, oop..), ehhez kapcsolodo tervezes (pl design patterns). nagy szerepuk van ebben az elmeleti tantargyaknak is (formalis nyelvek es automatak, complexity *, algoritmusok, adatstrukturak). problemamegoldo kepesseg pedig az egyetem 5 eve alatt kifejlodik magatol, erre van a sok matek, formalis tantargyak, bizonyitasok. mind ad egy absztrakt modellt, amiben gondolkodni kell, es problemakat amiket ebben meg kell oldani.
ezt mind egy egyetem adja, ezek utan, ha a programozo wannabe nincs olyan szinten, hogy egy cegnel elhelyezkedve barmilyen (ot erdeklo) munkakorbe bele tudjon razodni rovid idon belul, akkor valoszinuleg benne van a hiba.kivancsi vagyok te hogyan gondolod ezt, mit kellene mashogy tanitani. lehet mas az en velemenyen, mert egyre kevesbe akarok egy nagy ceg programozoja lenni, aki heti 40+ oraban irja a kodot mint egy robot. nekem ennel tobb kell. ugy gondolom, hogy a legtobb ilyen programozonak nem is kellene egyetem (legalabbis nem ilyen formaban).
nalunk is probalnak mostanaban beujitani tantargyakat, amik jobban a gyakorlatra keszitenek fel, de egyelore ugy latom, hogy tulmisztifikaljak a dolgok. pl most is volt egy targyam ami elsodlegesen uml modellezest tanitott. elfogadom, hogy ez egy jo dolog, de tanitani egy szemeszteren at azert kicsit megalazo, hisz ezt a par diagramot egy delutan elmagyarazom barkinek aki irt mar 100 sornal hoszabb programot.
* sorry, nem magyarul tanulok, nem tudom mi erre e kifejezes
-
Gyuri16
senior tag
ok, nem szeretnem ujbol megnyitni ezt a vitat, mar kitargyaltuk, de ha visszanezed ezt a topicot lathatod, hogy sok kerdes beolvasassal, sztring kezelessel es pointerekkel (tombokkel) kapcsolatos. ezek mind egyszerubbek imho pascalban. (string mukodnek tombok/pointerek nelkul, beolvasas el van intezve egy readlnvel..), nem beszelve az erthetobb/intuitivabb szintaxisrol (szovakkal kiirt dolgok, for ciklus..)
szoval a te szotarad szerint kezdobaratabb a pascal, en is ezt akartam mondani..
mod: senior tag lettem
tul sokat irok mostanaban ide, pedig tanulnom kellene
-
Gyuri16
senior tag
pawnt nem ismerem, honlapja alapjan c alapu nyelv, szoval nem art az ismerete
ha nem tudsz programozni, akkor eloszor az alapokat kell elsajatitanod valamilyen nyelven, ez akar lehet c is. vannak hozza jo konyvek, itt a forumon is kaphatsz segitseget es sok ma hasznalatos nyelvnek van hozza hasonlo szintaxisa. negativum szerintem a bonyolultsaga (mondjuk pascalhoz viszonyitva), de ha komolyan gondolod akkor hajra. nagyon jo konyv a kernighan es ritchie fele c programozas, ha ezen atragod magad es meg mindig erdekel, akkor mar tudni fogod hogyan allj neki a pawnnak
-
Gyuri16
senior tag
ha a random kiiratas a cel, akkor en a vectort ajanlanam. nem nagy gond megirni, es sokkal elegansabb lesz. lancolt listat sorrendben kiirni egyszeru, de veletlenszeruen nagyon nem effektiv. (lehet ugyeskedni azzal, hogy kiiratsz egy elemet, aztan veletlenszeruen elore vagy hatra mesz egy veletlen mennyiseget, de nem vagyok benne biztos, hogy igy matematikailag ugyanakkora lenne az eselye az osszes permutacionak, nem beszelve arrol, hogy ez kimeriti a ganyolas fogalmat)
-
Gyuri16
senior tag
egyik kerdes, hogy mivel indexeled az adataid, tehat mi szerint akarsz keresni a strukturaban.
masik kerdes, hogy milyen operaciokat akarsz elvegezni a strukturan. tehat az indexeles/kereses legyen gyors, vagy fontos hogy pl ket strukturat gyorsan tudj egyesiteni.
legkezenfekvobb megoldas egy dinamikus tomb a c++-os vector mintajara, ahol te kezeled a memoriat, es ha elfogy akkor lefoglalsz ketszer annyit.
tovabba vannak bonyolultabb strukturak, itt tenyleg az a kerdes mire kell, egy par tipp:
vector: random indexeles gyors, viszont problemas ha elfogy a hely. egyesiteni szinten gond
lancolt lista: talan a legegyszerubb megoldas, viszont lassu a kereses benne.
red black tree: kereses logaritmikus, mivel fastruktura mindig annyi helyet foglalsz le amennyi kell. eleg bonyolult, szoval ha sima c-rol van szo akkor csak tenyleg nagy adatokhoz allnek neki programozni
hash table: kereses eleg gyors, itt is gond lehet a lefoglalt memoria nagysaga, nem art elore tudni kb mennyi adat leszsok megoldas van, szoval nem artana tudni mire fogod hasznalni
-
Gyuri16
senior tag
-
Gyuri16
senior tag
válasz
Gyuri16 #1989 üzenetére
+ ha a tomb1 nincs inicializalva (es miert lenne) akkor a strlen nem jo oda. jobb lesz a sizeof. figyelni kell, hogy az utolso mezot fenntartsd a null bytenak. ez remelem mukodik akkor is, ha nem egyforma meretu a ket tomb (a feladat szerint a tomb a fuggveny parametere, tehat nem bizhatunk benne, hogy eleg nagy):
for(i=j=0; j+1<sizeof(tomb1) && i<strlen(tomb2); i++)
ezutan meg illik a tomb1 vegere rakni egy nulltSk8erPeter: mas kodjat kritizalni konyebb mint megirni
en ezert nem irok altalaban egesz megoldast, hanem inkabb szavakkal korbeirom.
-
Gyuri16
senior tag
válasz
Sk8erPeter #1987 üzenetére
for(i=j=0; i<strlen(tomb1) && i<strlen(tomb2); i++)
helyett inkabb:for(i=j=0; j<strlen(tomb1) && i<strlen(tomb2); i++)
^ -
Gyuri16
senior tag
egyetertek mindkettotokkel, amit mondani akartam az az, hogy ha csak papirra programozol akkor nagy sokk er az elso "igazi" programodnal. nalunk prog1-2 ugy zajlott, hogy volt eloadas amin tanar beszelt az elmeleti reszerol + mutatta a programokat. altalaban az eloadason irta a kodot, es kitert a kulonbozo problemakra. aztan volt gyakorlat ami papiron/tablan zajlott. itt nyilvan nem kellett odafigyelni a reszletekre, inkabb a feladat elvi megoldasara. vizsga pedig szamitogepnel volt, es ott elojott az, hogy az emberek alapvetoen keveset programoznak (mert nem kell), nem tudjak leirni adott nyelven a megoldast. erre mondhatjuk, hogy nem nagy gond, viszont kesobb mar nincs kimondottan programozas targy, hanem algoritmusok, adatstrukturak, oprendszerek... ha prog1 nem adja meg azt a tudast, hogy onalloan tudjon mukodopekes programot megirni, akkor ott nagy baj van. ehhez pedig hozzatartozik az, hogy a tanar elvarja a teljes, futtathato megoldasokat.
termeszetesen ha a diaksag nagy resze foglalkozna vele, nem lenne gond, de mivel a legtobbnek csak az a celja, hogy atmenjen a vizsgan (es ezt nehez megakadalyozni) biztositani kell, hogy ertsenek is hozza.
Ha valaki a programozás során a fordító hibaüzeneteiből nem jön rá, hogy azért nem megy a program, mert valamit nem include-olt, akkor az ne akarjon programozással foglalkozni, ne legyen informatikus.
ha ennek megfelelo emberek jarnanak egyetemre, akkor az itteni forumok nagyresze ures lenne. sokszor latom, hogy oldalas valaszokat irsz alapveto dolgokra, amikre egy "jo" informatikusnak magatol ra kellene jonnie -
Gyuri16
senior tag
válasz
Sk8erPeter #1973 üzenetére
viszont ha prog1rol van szo, akkor szerintem elvarhato az ilyen aprosagok ellenorzese. ez a megfelelo idopont, hogy a fejekbe verjek a jo hibauzeneteket, includolast es sok mas hasonlot is, amire kesobb mar mindenki nyilvanvalokent tekint.
nalunk is papiron programozas ment nagyreszt, aztan vizsgan neztek nagyokat az emberek, mert nem tudtak debuggolni, nem ertettek mi a stack overflow es ilyesmi. egy kezdo prog targynak meg kell adni az alapokat, kesobb pedig lehet mindenfele algoritmusokat tanulni
mindezt mondom ugy, hogy en elmeleti informatikat tanulok, es sokkal fontosabbnak tartom az algoritmikus szemlelet elsajatitasat mint a kulonbozo prognyelvek tanulasat, megis ha elsoben nem tanulja meg ember kifejezni magat az adott eszkozokkel, kesobb csak problemat okoz neki
-
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)
-
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 hangzik -
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]
-
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
-
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 velefoleg debuggolas erdekel vim alol, illetve olyan -nem tudom a nevet- cucc ami odaugrik egy fuggveny kodjara, illetve vissza, ha egy fuggvenyhivasrol megnyomok egy gombot)
-
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.
-
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
-
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-val -
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. -
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 -
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);
} -
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
-
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} -
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.
-
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
-
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
-
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?
-
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: KISSannak 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 csak
Má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 adok -
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;
} -
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
-
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 -
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)
-
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
-
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
-
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("| "); -
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 oda -
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
-
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)
-
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
-
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 ) -
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?
-
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] -
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 szamatol -
Gyuri16
senior tag
-
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) -
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..
-
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
Ú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!
- Hegesztés topic
- Luck Dragon: Asszociációs játék. :)
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Milyen processzort vegyek?
- Argos: Szeretem az ecetfát
- Windows 11
- Bambu Lab 3D nyomtatók
- Spórolós topik
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- The Division 2 (PC, XO, PS4)
- További aktív témák...
- DDR5 GAMER PC: Új RYZEN 7 8700F/9700X/9800X3D +RTX 4060/5060/4070/5070 +16-64GB DDR5! GAR/SZÁMLA!
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook 14" -80% i7-10610U 16/512 FHD
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- Motorola G72 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! Lenovo ThinkPad P50 - i7-HQ I 16GB I 256SSD I Nvidia I 15,6" FHD I Cam I W10 I Gari!
- Honor Magic 7 Pro - Fekete - Új kipróbált készülék! Karcmentes gyárilag független! 512GB Memória!
- KÖZEL FÉLÁR! Apple Magic Keyboard, Mouse, Trackpad, Pencil, Smart Magic Keyboard Folio, Watch szíjak
- Bomba ár! Toshiba Satellite Pro R50-C - i3-6G I 4GB I 128GB SSD I 15,6" I HDMI I Cam I W10 I Gari!
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest