- btz: Internet fejlesztés országosan!
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- droidic: YouTube videók és playlistek letöltése GUI-alkalmazással
- sziku69: Fűzzük össze a szavakat :)
- bitpork: MOD Júni 28- Augusztus 2- szombat jelen állás szerint.
- ricshard444: Fényképező ? Telefon helyett
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Hold - SW Heritage - Auto üzemmód
- Magga: PLEX: multimédia az egész lakásban
- Luck Dragon: Asszociációs játék. :)
Új hozzászólás Aktív témák
-
Vasinger!
nagyúr
Sziasztok!
Ma nyúltam először C#-hoz életemben, és el is akadtam a háziban. Már majdnem kész van, de nem tudom kipróbálni, hogy eddig jó e, mert ha futtatom, újraindul.
Emlékszem órán valamit ki kellett törölni, de sehogy sem sikerül.
Ami még szemet szúrt, hogy a sorok megvoltak számozva a suliban, itthon feltettem, de nem látom sehol sem, hogy hol kell bekapcsolni. :\
-
Sk8erPeter
nagyúr
Akkor lehet, hogy valami fogalmi képzavar esete forog fenn nálam, vagy nem vágom,
de az alábbi példaprogram jól szemlélteti a dinamikus memóriafoglalást, amire gondoltam, itt az eredeti tömbből egy új tömbbe gyűjti az eredeti tömbben szereplő, átlag alatti számokat, és pont akkora memóriát foglalunk le az új tömbnek, amennyire szükség van, nem többet, nem kevesebbet:#include <stdio.h>
#include <stdlib.h>
double *atlagalatt(double tomb[], int meret, int *ujmeret){
double *ujtomb;
int i, db, to;
double szum, atlag;
/* mi az atlag */
szum=0;
for (i=0; i<meret; ++i)
szum+=tomb[i];
atlag=szum/meret;
/* hany olyan van */
db=0;
for (i=0; i<meret; ++i)
if (tomb[i]<atlag)
db++;
/* foglalas es paranoia */
ujtomb=(double*)malloc(db*sizeof(double));
if (!ujtomb) {
*ujmeret=0;
return NULL;
}
/* masolas */
to=0;
for (i=0; i<meret; ++i)
if (tomb[i]<atlag)
ujtomb[to++]=tomb[i];
*ujmeret=db;
return ujtomb;
}
int main(){
double eredeti[100];
double *uj;
int ujmeret;
int i;
for (i=0; i<100; ++i)
eredeti[i]=rand()%100/10.0;
uj=atlagalatt(eredeti, 100, &ujmeret);
for (i=0; i<ujmeret; ++i)
printf("%4.2g ", uj[i]);
free(uj);
}Szerk.: Forrás: [link]
Sőt, ha már linkeltem, itt látható a 4-es feladatban a futásidőben történő memóriafoglalás:
#include <stdio.h>
#include <stdlib.h>
char ** darabol(char *s,char *m,int *db){
int n=0,i,last=0;
char **p;
// szavak számolása
for(i=0;s[i]!=0;i++){
int j;
for(j=0; m[j]!=0 && s[i]!=m[j]; j++);
if(m[j]!=0 && i!=last){
n++;
last=i+1;
}
}
p=(char**)malloc(n*sizeof(char*));
if(p==NULL)exit(-1);
for(i=n=last=0;s[i]!=0;i++){
int j;
for(j=0; m[j]!=0 && s[i]!=m[j]; j++);
if(m[j]!=0 && i!=last){
p[n]=(char*)malloc(i-last+1);
if(p[n]==NULL)exit(-1);
for(j=last;j<i;j++)p[n][j-last]=s[j];
p[n][j-last]=0;
n++;
last=i+1;
}
}
*db=n;
return p;
}
int main(int db,char ** par){
FILE * fp;
char sor[1025];
int meret;
if(db<3)return -1;
fp=fopen(par[1],"rt");
if(fp==NULL)return -1;
while(fgets(sor,1025,fp)!=NULL){
char **p=darabol(sor,par[2],&meret);
while(meret--)free(p[meret]);
free(p);
}
} -
cellpeti
nagyúr
Most GNU GCC Compileren van? az jó?
-
bpx
őstag
ja ok, most látom volt előbb is kérdésed
miért intel compiler-t válaszottál? raktál fel külön, kiírta arra is hogy detected?
amikor futtatni próbálod, alul a logban véletlenül nem ezt írja?"***** - Debug" uses an invalid compiler. Skipping...
Nothing to be done.hagyd a GNU compiler-en és azzal megy rendesen
-
cellpeti
nagyúr
A CodeBlocks-ban tudna valaki segíteni? Mert még mindig nem működik!
-
shev7
veterán
válasz
Sk8erPeter #1384 üzenetére
"ezt sem értem, mert dinamikusan is, futásidőben is lehet memóriát foglalni tömbnek, attól függően, hogy mondjuk mekkora egy másik tömb, aminek az elemeit át szeretnénk másolni egy új tömbbe, attól függően módosítjuk a foglalt memóriaméretet."
En ugy tudom, hogy tombre ilyet nem lehet. Ha azt mondom, hogy int x[5] akkor az elete vegeig 5 elemu tomb lesz. Sot en ugy tudom standard C-ben olyan sincs hogy
f(int x){
int array[x];
}Ellenben ha fogsz egy pointert akkor a pointerrel akkora teruletet foglalsz le amekkorat akarsz, es futasi idoben ugy varialod ahogy akarod.
Es a memoriakezelesrol:
Ha a tombodet nem globalis valtozokent deklaralod, akkor a tombnek a helyet a stack-en foglalja le. Ugyan ez igaz a pointer-re is, tehat a pointer altal mutatott cim is a stack-en lesz. Ellenben, ha a pointer-hez allokalsz memoriateruletet, azt mar a heap-en fogja lefoglalni. -
-
cellpeti
nagyúr
Sziasztok!
CodeBlocks-ban nem lehet tenni ]-et???
-
cellpeti
nagyúr
válasz
Sk8erPeter #1384 üzenetére
Az elején muzály választani,mert különben nem enged tovább!
-
Karma
félisten
válasz
Sk8erPeter #1384 üzenetére
A tömbváltozó alatt én az "array"-t értettem, ami gyakorlatilag egy pointer az első elemre. Ez a konstans, nem lehet elállítani onnan, ellentétben egy pointerrel.
Tehát nem lehet olyat mondani, hogy
array = pointer + 1; -
Sk8erPeter
nagyúr
"míg a pointer szabadon módosítható, a tömbváltozó nem, konstans értéke van."
Most ezt nem nagyon értem: a tömbváltozó is módosítható. Mármint a tömbben tárolt érték. Nyilván a pointer átállítható, hogy más elem címére mutasson.
Na de akkor mi a releváns különbség a memóriakezelésben?(#1383) shev7 : ezt sem értem, mert dinamikusan is, futásidőben is lehet memóriát foglalni tömbnek, attól függően, hogy mondjuk mekkora egy másik tömb, aminek az elemeit át szeretnénk másolni egy új tömbbe, attól függően módosítjuk a foglalt memóriaméretet.
_______________________________________________________
(#1380) cellpeti: nem értem, minek állítgattad át? Letöltöd, telepíted, működik. Tök felesleges állítgatni valamit, ha nem tudod, mi az...
-
cellpeti
nagyúr
Na ezzel most nagyon jót kérdeztél.
-
cellpeti
nagyúr
Üdv!
Letöltöttem a Code Blocks-ot.
Intel C/C++ Compiler álítottam be neki.Megnyitottam benne egy C-Free-ben írt programot,ami lefutott ott is és TC-be is. Majd mondom neki,hogy futassa(F9) és meg sem mozdul. Tudna valaki segíteni ebben?
-
Karma
félisten
A pointer mérete is fix
32 bites architektúrán 32 bit például.
Szerintem arra céloztak anno a hasonlósággal, hogy a subscript operátor valójában ekvivalens egy kis pointeraritmetikával.
int array[5];
int* pointer = array;
array[5] === pointer[5] === *(pointer+5) // ekvivalensekDe most hogy nézem, rájöttem a különbségre is: míg a pointer szabadon módosítható, a tömbváltozó nem, konstans értéke van.
-
shev7
veterán
válasz
Sk8erPeter #1377 üzenetére
tomb merete fix
-
Sk8erPeter
nagyúr
Tényleg, ha már pointerek és tömbök hasonlóságáról van szó, kérdeznék: tanultuk, hogy hasonlóság van a kettő között, de van különbség memóriakezelésben. Milyen szempontból?
Ha pointerként hivatkozol (pl. int *p) az elvileg ugyanazt adja, mint a tömb első (nulladik) elemének címe. De akkor mi a jelentős különbség? -
3man
csendes tag
Ez nagyon alapszint, gondolom azert nem valaszolt senki.
Ha mar alapszint. Mikor mutato valami, es mikor char?
Ehhez csak a definiciot kell mindig megnezni.
Az str igy volt definialva
int strlen(char *str)
Ezt fel lehet bontani tobbfelekepp.
char * , str
char , * str
Ebbol mar latszik, mikor mit jelent a kifejezes. Ha csak str-t irok, akkor az char *
ha *str-t, akkor az char.Lehetne ilyen is a definicio
char **str
Ekkor tobb felbontasi lehetoseg kinalkozik. De a definiciobol mindig lehet tudni, mit jelent az adott kifejezes. Az utobbinal **str az char tipust ad, mig *str egy char *-ot.A c nyelvben a mutato egyben egy tomb elso elemere is mutat.
Tehat a char *str megegyezik a char str[] definicioval. Ebbol kovetkezik, hogy minden mutatot indexelhetunk, mint egy tombot, es minden tomb neve egyben mutato, ami egy cimet tarol. -
bama
csendes tag
3man nagyon köszönöm neked a segitséget!!!!
-
cellpeti
nagyúr
Milyen függvénnyel lehet pl *-ból egy kis keretet csinálni,akár az egész ablak köré,de akár egy pár sok köré?
-
3man
csendes tag
Az utolso sor az esetek 99.99 szazalekaban jol mukodik, de..
A cim 32 bites lehet, ahogy az int is, de az int elojeles. Ez problemat okozhat, ha a str joval 0x7fffffff alatt van, mig a karakterlanc vege joval 0x8000000 folott.
Ekkor az int-re konvertalasnal az elso szam pozitiv lesz, mig a masodik negativ., es a kulombseguk is negativ, ha a karakterlanc eleg nagy. Gyakorlatilag nem lehet akkora karakterlancot letrehozni, hogy a hiba elojojjon, de ez akkor is hiba.
A visszateresi erteknek unsigned int-nek kellene lennie.erdemes probalgatni, mikor lesz negativ az eredmeny, es mikor nem.
int a=0xbfffffff;
a-=0x30000000;
printf("%d \n",a); -
3man
csendes tag
Adott a feladat:
int strlen(char*str){
char*tmp=*str;
if(!strt)
return 0;
while(str+#);
return*str-*tmp;
}Eloszor is
1.)tmp egy cim, mig *str egy char
2.)nincs olyan hogy strt
3.4) while(str+#); ebbol a sorbol hianyzik egy * es egy +
5.) a visszateresi ertek int,es nem charint strlen(char *str){
char *tmp=str;
if(!str)
return 0;
while(*str++);
return str-tmp;
}
vagy inkabb
return (int)(str-tmp); -
bama
csendes tag
Sziasztok srácok!!!
Nagyon megköszönnééem a segitségtenétek a c be kezdem programozni 1 ös vagyok egyetemen és a tanárunk felad egy hibás egyszerü C programot amibe van 5 hiba ahány hibát találunk annyi az érdemjegyünk!!Elég kutyaütő vagyok benne segitenétek megkeresni a hibákat benne??Nagyon megköszönném!!!
A program
int strlen(char*str){
char*tmp=*str;
if(!strt)
return 0;
while(str+#);
return*str-*tmp;
}Lehet hogy több hiba vann benne mert a barátom egy lapra irta kézzel aztán elég rondán iirrrr
ide irnátok a teljes programot nekem kijavitvaaaaa !!NAgyon sürgös lenne!!!!!!!!!!!!!!!!!!!!nagyon köszönom
kioto
-
cellpeti
nagyúr
Azt hogy tudnám megcsinálni,hogy a teljesítménynél,ha üres sort adok,akkor lépjen ki?
do
{
ok=1;
printf("Kerem a teljesitmenyet loeroben: ");
getline(loero,10);
ok=nume(loero);
if(ok==0) {printf("\nRossz adatbevitel! Csak szam lehet a bevitt adat!\n\n");}
else {loe=atoi(loero);}
}while(ok!=1); -
Karma
félisten
válasz
cellpeti #1352 üzenetére
Kilépéshez használd az exit(0) függvényt
Egyébként van egy teljesen felesleges rész: a nume-t és az atoi-t simán összevonhatod egy sscanf hívásba, amivel két legyet ütsz egy csapásra: ha nem szám, akkor 0-t ad vissza (megvan a hibadetektálás), ha szám, akkor meg 1-et, és a paraméterben átadott változóban ott lesz az érték. A használatára itt egy egyszerű példa.
-
cellpeti
nagyúr
válasz
cellpeti #1351 üzenetére
Na eddig megvan az,hogyha üres sort adok meg akkor kiírja,illetve csak a számokat fogadja el és akkor is kiírja a hiba üzeneteket!
Olyat szeretnék még kérdezni,hogy mikor üres sort adok meg neki,akkor kilépjen a progi??#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int getline(char s[],int lim){
int i,c;
for (i=0;i<lim && (c=getchar())!=EOF && c!='\n';++i)
s[i]=c;
s[i]='\0';
while (c!=EOF && c!='\n')
c=getchar();
return (i);
}
int nume (char s[])
{
int i;
if(s[0]=='-' || s[0]=='+')i=1; else i=0;
for(; s[i]; ++i)
if (s[i]<'0' || s[i]>'9') return 0;
return 1;
}
void main(void)
{
int ok,loe,kobc;
char loero[10],ccm[10];
do
{
ok=0;
printf("Kerem a teljesitmenyet loeroben: ");
if(!getline(loero,10))
{
printf("Ures sort adott meg!\n");
ok=1;
}
else
{
if(!nume(loero))
{
printf("Nem szam a bekert karakter!\n");
ok=1;
}
else
loe=atoi(loero);
}
}while(ok==1);
do
{
ok=0;
printf("Kerem a motor hengerurtartalmat kobcentiben: ");
getline(ccm,10);
ok=nume(ccm);
kobc=atoi(ccm);
}while(ok!=1);
printf("\nA motor loereje: %dLE\n",loe);
printf("\nA motor hengerurtartalma: %dccm\n\n",kobc);
} -
cellpeti
nagyúr
üdv!
Nekem lenne egy progim,ami bekéri a motor teljesítményét lóerőben,utánna meg be kell kérni a hengerűrtartalmat ccm-be.
Ha a teljesítménynél üres sort adunk be,akkor ki kell lépnie. De ha nem számot adtál be,akkor is dobjon egy hiba üzit,mind a teljesítménynél,mind a hengerűrtartalomnál. Addig meg van,hogy bekéje mind2t.#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int getline(char s[],int lim){
int i,c;
for (i=0;i<lim && (c=getchar())!=EOF && c!='\n';++i)
s[i]=c;
s[i]='\0';
while (c!=EOF && c!='\n')
c=getchar();
return (i);
}
int ell(char s[])
{
int i,h,ok=1;
h=strlen(s);
for(i=0;i<h;i++) { if (!isdigit(s[i])) ok=0;}
return ok;
}
void main(void)
{
int ok,loe,kobc;
char loero[10],ccm[10];
do
{
ok=0;
printf("Kerem a teljesitmenyet loeroben: ");
getline(loero,10);
ok=ell(loero);
loe=0;
loe=atoi(loero);
}while(ok!=1);
do
{
ok=0;
printf("\nKerem a motor hengerurtartalmat kobcentiben: ");
getline(ccm,10);
ok=ell(ccm);
kobc=0;
kobc=atoi(ccm);
}while(ok!=1);
printf("\nA motor loereje: %dLE\n",loe);
printf("\nA motor hengerurtartalma: %dccm\n\n",kobc);
} -
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?
-
cellpeti
nagyúr
Sziasztok!
Írnom kell egy sima átlag függvényt. Az lenne a kérdésem,hogy egy változó kell a számoknak egy pedig az elemek számának?
-
Jester01
veterán
Az fscanf szintaxisa 2 karakter beolvasására: fscanf(bemeneti fájl neve, "%c %c", &a, &b)
Nem a fájl neve kell oda, hanem a megnyitott fájl pointer. Karakter olvasáshoz az fgetc függvényt kell használni ami szintén a fájl pointert kapja és visszaadja a soron következő karaktert. A getchar() ekvivalens egy fgetc(stdin) hívással, vagyis az a standard inputról olvas ezért nem kell neki fájl.
Példa:
#include <stdio.h>
int main(int argc, char* argv[])
{
FILE* f = fopen(argv[1], "rb");
int ch;
while((ch = fgetc(f)) != EOF) putchar(ch);
fclose(f);
return 0;
} -
Zollee
tag
Újra itt, újabb kérdéssel.
Fájlkezelnék. Az fscanf és az fprintf működését értem, használni is tudom. (vagyis műxik a program vele
Viszont a scanf függvénytől óva intenek az oktatóim (és korábban ebben a PH témában is mások) és azt javasolják használjam inkább az getc és getchar-t. Most épp a getchar kell, viszont fájlkezeléshez. Rágoogliztam, de mindenféle érdekességet hoz ki nekem és nem tudom kiszűrni hogy is kéne használjam.Az fscanf szintaxisa 2 karakter beolvasására: fscanf(bemeneti fájl neve, "%c %c", &a, &b)
A getchar-ra létezik fájlkezeléshez az fgetchar függvény, viszont azt nem értem hogy ő honnan tudja majd melyik a bemeneti fájlom, mert találtam minden féle programot, amiben a google megtalálta, de ahány találat, annyiféleképp van használva. Ezért megköszönném, ha valaki ismerné a sima, egyszerű, hétköznapi használatát, és le tudná irni nekem.
-
Karma
félisten
válasz
cellpeti #1341 üzenetére
Az a szitu, hogy a getline, mint olyan, egy nem szabványos függvény. Míg Windowson a környezetedben nem volt benne (mert minek?), az Ubuntuban lévő glib-ben benne van, és ez összeütközik a forráskódodban lévővel. Ezt nem tudod megkerülni, csak ha más nevet adsz neki
Nincs ebben semmi varázslat, csak hackelő tanárok. Ja és tanulj meg angolul. Komolyan.
-
cellpeti
nagyúr
Tudna nekem végre valaki valami okosat mondani és segítő dolgot,hogy miért nem futnak Ubuntu alatt a C programjaim???
-
cellpeti
nagyúr
igen!
Így néz ki a progi:
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int getline(char s[],int lim){
int i,c;
for (i=0;i<lim && (c=getchar())!=EOF && c!='\n';++i)
s[i]=c;
s[i]='\0';
while (c!=EOF && c!='\n')
c=getchar();
return (i);
}
int lebege(char s[]){
int i=0, kezd;
while(isspace(s[i])) ++i;
if(s[i]=='+'||s[i]=='-') ++i;
kezd=i;
while(isdigit(s[i])) ++i;
if(s[i]=='.') ++i;
while(isdigit(s[i])) ++i;
if(i==kezd||kezd+1==i&&s[kezd]=='.') return 0;
if(toupper(s[i])=='E'){
++i;
if(s[i]=='+'||s[i]=='-')++i;
if(!isdigit(s[i])) return 0;
while(isdigit(s[i])) ++i;}
if(isspace(s[i])||!s[i]) return 1;
else return 0;
}
void main (void)
{
float r,T,K;
float pi=3.14;
char s[24];
int ok=1;
do
{
ok=1;
printf("Adja meg a kor sugarat!\n\n");
if(!getline (s,25))
{
printf("Üres sort adtal meg!\n\n");
ok=0;
}
else
{
if(!lebege(s))
{
printf("Nem lebegopontos a megadott szam!\n");
ok=0;
}
else
r=atof(s);
}
}while(ok==0);
K=2*r*pi;
T=r*r*pi;
printf("\nA kor kerulete: %.2f\n\nA kor terulete: %.2f\n\n",K,T);
getch();
} -
cellpeti
nagyúr
Üdv!
Itt leírtakkal lenne gondom Linux rendszer alatt!
-
Karma
félisten
válasz
cellpeti #1330 üzenetére
Mondjuk csinálhatod úgy, ha már do-while-t akarsz használni, hogy az ok változódat használod fel. A többi részhez nem nyúlok:
do
{
int ok = 0;
printf("Kérem az előnevezettek számát: \n");
if(!getline(elonev,25))
{
printf("Üres sort adtal meg!\n");
}
else
{
ok = 1;
}
while (!ok);Magyarán addig teszi fel a kérdést, amíg nem kap egy nem-üres sort. Nem ártana azért 1-be állítás előtt ellenőrizni, hogy számot kapott-e (fontosabb mint az üres sor, nomeg összefügg
).
UI: Mit akarnak ezek tömbbe?!
Nincs ebben semmilyen tömbben tárolható adat
-
cellpeti
nagyúr
Szevasztok!
Nekem lenne egy futóversenyes feladatom(A futóversenyes feladat)
Az lenne a feladat,hogy be kell kérni:
- előnevezettek számát
- helyszínen nevezettek számát
- női nevezők számát(nevezők teljes létszámának függvényében)
-versenyt teljesítő nők számát(női nevezők)
- versenyt teljesítő férfiak számát(férfi nevezők)A számokat tömbbe kell letárolni.
Minimum feladat:
- nevezettek teljes létszáma
- célbaértek teljes létszámaÚgy gondoltam,hogy do-while kellene.
do
{ok=0;
printf("Kérem az előnevezettek számát: \n");
if(!getline(elonev,25))
{
printf("Üres sort adtal meg!\n");Ha jól adta meg az adatot,akkor hogy megyek tovább?
-
Trub
tag
Nálam így már lefut:
/*
C++ nyelven szeretnénk modellt készíteni a következő leírás alapján. Egy óvodás hátizsákjába sok (max. 100) játék fér. Minden játéknak van népszerűségi indexe (egész szám, hány óvodás irigykedik a játék tulajdonosára), és minden játékot meg lehet nyomni (push()), amire minden játék máshogy reagál. Játékból több fajta is van, és a játékfajták száma később csak nőni fog. Játékok jelenleg az alábbiak:
• Macintosh-MACi (index: 15, verziószám: egész). Ha megnyomják, és a verziószám legalább 10, akkor kiírja, hogy „Én is unix vagyok”.
• Linux-pingvin (kezdő index: 500, kernel_verzió: sztring), ha megnyomják, kiírja a kernel verziószámát, és ha az index kisebb, mint 97, akkor 4-gyel megnöveli. Ha megsemmisül, kiírja, hogy „UNIX4EVER”.
• Microsoft-majom (kezdő index: 53, vagyon: long double). ha megnyomják, kiírja, hogy „I! LOVE! THIS! COMPANY!!!”.
A rendszerben a következő funkciókat kell megvalósítani:
• hátizsák átlagos népszerűségi indexének lekérése (getAvgPopularity())
• hátizsákba új játék behelyezése (addToy())
• játék népszerűségének lekérdezése (getPopularity())
• minden játékhoz a megnyomás (push())
• pingvin destruktora.
Feladatok:
• Tervezzen meg egy olyan OO modellt, mely a fenti követelményeket kielégíti! Rajzolja fel a modell osztálydiagramját! (0,5p)
• Deklarálja a Hátizsák, Játék, Maci, Pingvin osztályokat és az elvárt funkciók ellátásához szükséges tagfüggvényeket! Használja a dőlt betűs neveket! (2)
• Implementálja a fenti osztályokat és azok tagfüggvényeit! Az osztályokat olyan módon készítse el, hogy újabb játék-típus felvételekor a már meglevő kódot ne kelljen módosítani! (1,5 pont)
• Írjon egy egyszerű programrészletet, ami készít egy hátizsákot, és elhelyez benne egy pingvint (kernel verzió: 2.6.11) és egy majmot (vagyona $3.5e274). Írassa ki a hátizsák átlagos népszerűségét, majd nyomja meg a pingvint, és így is írja ki a hátizsák népszerűségét! (1 pont)
*/
#include <stdio.h>
#include <iostream>
#include <string>
using namespace std;
class Jatek {
protected:
int index;
public:
Jatek(int i) : index(i) {}
int getPopularity() {
return index;
}
virtual void push() = 0;
virtual ~Jatek() {}
};
class Maci : public Jatek {
int verzio;
public:
Maci(int v) : Jatek(14), verzio(v) {}
void push() {
if (verzio >= 10)
cout << "En is unix vagyok!"
<< endl;
}
};
class Pingvin : public Jatek {
string ker_ver;
public:
Pingvin(string k) : Jatek(43),
ker_ver(k) {}
void push() {
cout << ker_ver << endl;
if (index < 97) index += 4;
}
~Pingvin() {
cout << "UNIX4EVER" << endl;
}
};
class Hatizsak {
Jatek* tar[100];
int n;
public:
Hatizsak() : n(0) {}
~Hatizsak() {
for (int i = 0; i < n; i++) {
delete tar[i];// ha adoptal
}
}
void addToy(Jatek* j) {
if (n < 100) {
tar[n] = j;
n++;
} else {
delete j; // ha adoptal
}
}
int getAvgPopularity() {
int sum = 0;
for (int i = 0; i < n; i++) {
sum +=
tar[i]->getPopularity();
}
return sum/n;
}
};
// a feladat szerint nem kell
class Majom : public Jatek {
long double vagyon;
public:
Majom(long double ld) :
Jatek(43), vagyon(ld) {}
void push() {
cout << "I! LOVE! THIS! COMPANY!!!"
<< endl;
}
};
int main() {
Hatizsak h;
Pingvin* p = new Pingvin("2.6.11");
Majom* m = new Majom(3.5e274);
h.addToy(p);
h.addToy(m);
cout << h.getAvgPopularity() << endl;
p->push();
cout << h.getAvgPopularity() << endl;
return 0;
} -
Badb0y
addikt
Valaki rendbe tudná nekem ezt a programot hozni? Mármint, hogy fusson ?
Iszonyat hálás lennék. Ha esetleg hülyeség vagy fölösleg van benne, akkor az kerüljön eltávolításra
Ma le kell adnom uh. pls help
Köszönöm segítségetek előre is.
/*
C++ nyelven szeretnénk modellt készíteni a következő leírás alapján. Egy óvodás hátizsákjába sok (max. 100) játék fér. Minden játéknak van népszerűségi indexe (egész szám, hány óvodás irigykedik a játék tulajdonosára), és minden játékot meg lehet nyomni (push()), amire minden játék máshogy reagál. Játékból több fajta is van, és a játékfajták száma később csak nőni fog. Játékok jelenleg az alábbiak:
• Macintosh-MACi (index: 15, verziószám: egész). Ha megnyomják, és a verziószám legalább 10, akkor kiírja, hogy „Én is unix vagyok”.
• Linux-pingvin (kezdő index: 500, kernel_verzió: sztring), ha megnyomják, kiírja a kernel verziószámát, és ha az index kisebb, mint 97, akkor 4-gyel megnöveli. Ha megsemmisül, kiírja, hogy „UNIX4EVER”.
• Microsoft-majom (kezdő index: 53, vagyon: long double). ha megnyomják, kiírja, hogy „I! LOVE! THIS! COMPANY!!!”.
A rendszerben a következő funkciókat kell megvalósítani:
• hátizsák átlagos népszerűségi indexének lekérése (getAvgPopularity())
• hátizsákba új játék behelyezése (addToy())
• játék népszerűségének lekérdezése (getPopularity())
• minden játékhoz a megnyomás (push())
• pingvin destruktora.
Feladatok:
• Tervezzen meg egy olyan OO modellt, mely a fenti követelményeket kielégíti! Rajzolja fel a modell osztálydiagramját! (0,5p)
• Deklarálja a Hátizsák, Játék, Maci, Pingvin osztályokat és az elvárt funkciók ellátásához szükséges tagfüggvényeket! Használja a dőlt betűs neveket! (2)
• Implementálja a fenti osztályokat és azok tagfüggvényeit! Az osztályokat olyan módon készítse el, hogy újabb játék-típus felvételekor a már meglevő kódot ne kelljen módosítani! (1,5 pont)
• Írjon egy egyszerű programrészletet, ami készít egy hátizsákot, és elhelyez benne egy pingvint (kernel verzió: 2.6.11) és egy majmot (vagyona $3.5e274). Írassa ki a hátizsák átlagos népszerűségét, majd nyomja meg a pingvint, és így is írja ki a hátizsák népszerűségét! (1 pont)
*/
#include <stdio.h>
#include <iostream.h>
#include <string.h>
class Jatek {
protected:
int index;
public:
Jatek(int i) : index(i) {}
int getPopularity() {
return index;
}
virtual void push() = 0;
virtual ~Jatek() {}
};
class Maci : public Jatek {
int verzio;
public:
Maci(int v) : Jatek(14), verzio(v) {}
void push() {
if (verzio >= 10)
cout << "En is unix vagyok!"
<< endl;
}
};
class Pingvin : public Jatek {
string ker_ver;
public:
Pingvin(string k) : Jatek(43),
ker_ver(k) {}
void push() {
cout << ker_ver << endl;
if (index < 97) index += 4;
}
~Pingvin() {
cout << "UNIX4EVER" << endl;
}
};
class Hatizsak {
Jatek* tar[100];
int n;
public:
Hatizsak() : n(0) {}
~Hatizsak() {
for (int i = 0; i < n; i++) {
delete tar[i];// ha adoptal
}
}
void addToy(Jatek* j) {
if (n < 100) {
tar[n] = j;
n++;
} else {
delete j; // ha adoptal
}
}
int getAvgPopularity() {
int sum = 0;
for (int i = 0; i < n; i++) {
sum +=
tar[i]->getPopularity();
}
return sum/n;
}
};
// a feladat szerint nem kell
class Majom : public Jatek {
long double vagyon;
public:
Majom(long double ld) :
Jatek(43), vagyon(ld) {}
void push() {
cout << "I! LOVE! THIS!\
COMPANY!!!"
<< endl;
}
};
int main() {
Hatizsak h;
Pingvin* p = new Pingvin("2.6.11");
Majom* m = new Majom(3.5e274);
h.addToy(p);
h.addToy(m);
cout << h.getAvgPopularity() << endl;
p->push();
cout << h.getAvgPopularity() << endl;
return 0;
}Ill. még ebben is van valami hiba, mert nem azt írja ki, amit akarok. Valamiért mindig 99-110-ig ír ki, nem azt amit beadok.
/*
Egy meteorológiai állomáson különféle adatokat mérnek (szél, hőmérséklet, csapadék, stb.). A mért adatokat egy OO programmal szeretnénk nyilvántartani, mégpedig úgy, hogy azokat az észlelés sorrendjében egy tárolóba tesszük (add). Az adatok eltérő formátumúak. A szélnek pl. iránya és nagysága is van, míg a hőmérséklet csak egy mennyiség, de a sorrend megtartása miatt közös tárolóban kell azokat tárolnunk. A tároló maximum 1000 adatot tud tárolni, és képes kilistázni (list) a benne levő adatokat a hozzájuk tartozó értékekkel együtt. (pl. szél: É-Ny, 10km/h; hőmérséklet: 12 C).
• Tervezzen OO modellt, mely tartalmaz Wind, Temperature, valamint Store objektumot, és könnyen bővíthető esetleges újabb adatokkal (pl. csapadék). Rajzolja fel a modell osztálydiagramját! Használja a megadott dőltbetűs neveket!
• Implementálja az osztályokat! Ne legyen egy függvénytörzsben sem feleslegest kód! Olyan módon készítse el az osztályokat, hogy bővítéskor ne kelljen a kódot módosítani! A tárolónak legyen olyan művelete is, mellyel az összes adat kitörölhető (clear)!
• Írjon egy egyszerű programrészletet, ami megmutatja 2 különböző típusú meteorológiai adat bevitelét egy tárolóba, majd kiírja a tárolóban tárolt adatokat és a hozzájuk tartozó értékeket!
*/
#include <iostream.h>
//osztalyok
class homerseklet
{
public:
int hom;
char dimenzio[10];
};
class szel
{
public:
int erosseg;
char irany[10];
};
//osztalyok vege
//globalis adatok
struct Adat
{
homerseklet h;
//csapadek cs;
szel sz;
};
Adat adattomb[1000];
//golbalis adatok vege
//globális eljárások függvények
void kiir(int n)
{
for(int i=0;i<n;i++)
{
cout<<adattomb[i].h.hom<<" "<<adattomb[i].h.dimenzio[10]<<" "<<adattomb[i].sz.erosseg<<" "<<adattomb[i].sz.irany[10]<<endl;
}
}
void beolvas(int h,char dim[10],int ero, char irany[10],int i)
{
adattomb[i].h.hom=h;
adattomb[i].h.dimenzio[10]=dim[10];
adattomb[i].sz.erosseg=ero;
adattomb[i].sz.irany[10]=irany[10];
}
//ováááá
void main()
{
int i=0;
int muv;
cout<<"1 add , 2 list"<<endl;
cout<<"elemszam:"<<i<<endl;
int eleg=0;
while (eleg!=1)
{
cin>>muv;
switch (muv)
{
case 1: {
cout<<"Adja meg a homersekletet"<<endl;
int hom;
cin>>hom;
cout<<"Adja meg a homersekletet dimenziojat"<<endl;
char dim[10];
cin>>dim[10];
cout<<"Adja meg a szeleroseget"<<endl;
int ero;
cin>>ero;
cout<<"Adja meg a szeleroseg iranyat"<<endl;
char irany[10];
cin>>irany[10];
beolvas(hom,dim,ero,irany,i);
i++;
cout<<"1 add, 2 list"<<endl;
cout<<"elemszam:"<<i<<endl;
}; break;
case 2:{ kiir(i); eleg=1;} break;
}
}
} -
Karma
félisten
Na ezért jó egy jó IDE
Parancssorban esetleg egy kis gdb-zéssel ki lehetne deríteni. De van egy favágóbb módszer: írj a konzolraEgyébként akkor is szokott segfault jönni (OpenInkpotos tapasztalat), hogyha grafikus programot akarnál futtatni, és nincs jól megadva a DISPLAY környezeti változó, így nem tud az X-hez csatlakozni.
Gyuri16: Pont kiszerkesztettem a hozzászólásomból a strace-et
-
Nunder
őstag
Windows Vista alól Virtual Boxon keresztül futtatok egy rendszeresen frissített Ubuntu 9.04-est. A file-okat egy direkt erre a fajta megjelenítésre specializált Makefile-al fordítom, azzal nem lehet a gond. Az a baj, hogy eddig gond nélkül futott még a warn-okkal együtt is, most elvileg hibátlan, és mégis dobálja a szegmens hibát.
-
Nunder
őstag
Üdv!
Olyan gondom van, hogy OpenGL-ben programozok, és mikor fordítom a valami.c filet akkor warn és hiba nélkül lefordul. Mikor futtatni próbálom csak ennyi jelenik meg: Szegmens hiba. Mi lehet a baj? Ötleteket várok, ha a progi kell elküldöm.
-
Karma
félisten
Ilyesmi. Ha VAGY-nál amint igazat talál, abbahagyja a kiértékelést, ÉS-nél meg amint hamisat. Elvileg ha a & és a | operátorokat használod, akkor nincsen ilyen egyszerűsítés.
A gondolatkísérleted pontosan így zajlik le, ha a második tagban mellékhatással járó utasítás van, akkor az nem fog lefutni. Többek között ezért se illik feltételbe mellékhatást tenni
-
VaZso
senior tag
Köszönöm a választ.
Tehát ha jól értem, balról jobbra haladva értékeli ki a feltételek igazságtartalmát és ha valahol egyértelműsödik a helyzet, dönt a végrehajtásról...Ezesetben érdekes lehet még, hogy ha vagy kapcsolat van közöttük és az első feltétel teljesül, akkor pl. a második feltételben lévő x++ nem lépteti el a pointert...
...mondjuk ez alapján pedig már rég letesztelhettem volna hülyeségek kérdezése helyett...
-
VaZso
senior tag
Sziasztok!
Egy rövid kérdéssel szeretnék zavarni...
if-nél, ha pl. több feltétel és kapcsolatát adom meg és az első feltételnél elbukik a dolog, akkor ugye nem nézi meg a második feltételt is?
Erre gondolok pl.:
if ((c==*pattern) && (strDif(str, pattern, patlen)==-1)) ...
Fölösleges az strDif függvényt meghívnom, ha a másik feltétel úgysem teljesült...
Jól gondolom, hogy ez esetben nem hívja meg? -
Karma
félisten
válasz
rroolleerr #1310 üzenetére
A wikipédia elég jónak tűnik ebben a témában.
-
rroolleerr
csendes tag
Hali,
fat16/32 -ről tudna valaki leírást/linket vagy egyebet adni. Diplomamunkám egyik szoftveres részéhez kellene.
-
Zollee
tag
válasz
Votyesz13 #1303 üzenetére
String-hez sajnos én is hal vagyok.
Nekem is van 2 string-es feladatom, az egyik a korábban már emlitett ASCII kód alapján történő karakter számlálás. (kis betűk, nagy betűk, számok). Az elv megvan ami alapján csináljam, de azt nem tudom hogy értessem meg vele, hogy ASCII kódként nézzen az általam megadott számra. (pl 97 az ugye a kis "a"). Szóval ilyen problémáim nekem is vannak, küzdök vele most is, mert függvényt nem használhatok hozzá, fapadosan kell megoldanom.
Ú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!
- ÚJ AMD Ryzen 5 5600X BOX AM4 6/12 magos CPU - bontatlan
- L14 Gen5 14" FHD+ IPS Ultra 7 155U 16GB 512GB NVMe ujjlolv IR kam gar
- Kezdőknek legjobb választás: 4 GHz AMD 5400U, 4 mag / 8 szál barebone
- Samsung Galaxy A14 64GB Kártyafüggetlen 1Év Garanciával
- Xiaomi Redmi Note 13 256GB Kártyafüggetlen 1Év Garanciával
- Telefon felvásárlás!! Honor 200 Lite, Honor 200, Honor 200 Pro, Honor 200 Smart
- ÁRGARANCIA!Épített KomPhone i7 14700KF 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- Felújított számítógépek/merevlemezek Számlával, garanciával! Ingyen Foxpost!
- LG 32GS95UE - 32" OLED / UHD 4K / 240Hz - 480Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
- Lenovo Thinkpad L14 Gen 4 -14"FHD IPS - i5-1335U - 8GB - 256GB - Win11 - 2 év garancia - MAGYAR
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest