- iPhone topik
- Vodafone mobilszolgáltatások
- Telekom mobilszolgáltatások
- Samsung Galaxy S23 és S23+ - ami belül van, az számít igazán
- Eleglide C1 - a középérték
- Milyen okostelefont vegyek?
- Android szakmai topik
- DIGI Mobil
- Android alkalmazások - szoftver kibeszélő topik
- Xiaomi 13T és 13T Pro - nincs tétlenkedés
Hirdetés
-
Az NVIDIA szerint a partnereik prémium AI PC-ket kínálnak
ph Megkezdődött az NPU-k elleni hadjárat, de egy fontos részletet nem említ a cég.
-
Egyre közelebb a Poco F6 startja
ma Újabb ár/érték csatát nyerhet a Xiaomi almárka.
-
VR játék lesz az Batman: Arkham Shadow (Meta Quest 3)
gp Egyelőre csak egy teaser trailert kaptunk a teljes leleplezésre a Summer Game Festen kerül sor.
Új hozzászólás Aktív témák
-
nagyúr
válasz kicsitomi88 #48 üzenetére
Regen en is igy gondoltam, de nem feltetlen szukseges a matektudas a programozashoz, ez a helyzet. Rengeteg programozasi feladat van, ahol az uzleti tudas joval fontosabb. (uzleti = domen specifikus)
Szerk.: bazz, beneztem a datumot
[ Szerkesztve ]
while (!sleep) sheep++;
-
félisten
Hali!
Na megnéztem a "gyakorlatban". Valóban a CodeBlocks befordítja minden hiba nélkül, még csak warning sincs. Persze ez csak azt jelenti, hogy formailag helyes a kód, de tartalmilag nem.
Szerencsére kék halált nem dobott, de a hibajelentés küldése MS-nek, az befigyelt. Amellett, hogy javítod Jester01 kolléga válaszában található feltárt hibákat, azonkívűl gondoskodsz arról is, hogy ha egy program paraméterezve fut, akkor MINDEN ESETBEN ELLENŐRIZNI KELL A PARAMÉTEREK MEGLÉTÉT!Különben jön a kékhalaál, meg hibajelentés, meg szegmenshatár túllépés, meg még sok sok minden...
Fire.
[ Szerkesztve ]
Mindenki tudja, hogy bizonyos dolgokat nem lehet megvalósítani, mígnem jön valaki, aki erről nem tud, és megvalósítja. (Albert Einstein)
-
blaces
tag
válasz Jester01 #1000 üzenetére
Ezeket modósítottam:
char betu,sz[50]={};
int j,i=0;
int h=strlen(sz);
while( (betu=fgetc(f)) !=EOF)
{
if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
{
if(h>2)
{
fej=beszur(fej,sz);
for(j=0;j<50;j++)
sz[j]='\0';
i=0;
}HOgy kell a fejváltozót inicializálni? mert a jegyzetben nem találok róla leírást... Ezt hogy kell inicializálni?
a fordított while feltétel azt takarta, hogy ehelyett: while(!seg->kov) ezt használjam: while(seg->kov)
-
blaces
tag
válasz Jester01 #1006 üzenetére
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define IGAZ 1
#define HAMIS !IGAZ
typedef struct listaelem{
char szo[50];
struct listaelem *kov;
}LISTAELEM;
int abszolut(int a,int b)
{ int c;
c=(a-b)>=0 ? (a-b):(a-b)*(-1);
return c;
}
int keres(LISTAELEM *fej,char sz[])
{
LISTAELEM *seged;
for(seged=fej;seged;seged=seged->kov)
{
if(strcmp(sz,seged->szo)!=0)
return IGAZ;
}
return HAMIS;
}
LISTAELEM* beszur(LISTAELEM *fej,char szo[])
{
LISTAELEM *ujelem=(LISTAELEM*)malloc(sizeof(LISTAELEM));
strcpy(ujelem->szo,szo);
ujelem->kov=NULL;
if(!fej)
return ujelem;
else
{
LISTAELEM *seg=fej;
while(seg->kov)
seg=seg->kov;
seg->kov=ujelem;
}
return fej;
}
LISTAELEM* feldolgoz(FILE *f,LISTAELEM *fej)
{
char betu,sz[50];
int j,i=0;
int h=strlen(sz);
while( (betu=fgetc(f)) !=EOF)
{
if(betu==' ' || betu==',' || betu=='!' || betu=='?' || betu=='.' || betu=='\n')
{
if(h>2)
{
fej=beszur(fej,sz);
for(j=0;j<50;j++)
sz[j]='\0';
i=0;
}
}
else
{
sz[i]=tolower(betu);
i++;
}
}
return fej;
}
int gyak(LISTAELEM *fej,char sz[])
{
LISTAELEM *seg;
int gyakorisag=0;
for(seg=fej;seg;seg=seg->kov)
{
if(strcmp(seg->szo,sz)==0)
gyakorisag++;
}
return gyakorisag;
}
int main(int argc,char **argv)
{
FILE *f1,*f2;
LISTAELEM *fej1=NULL,*fej2=NULL,*fej3=NULL,*seged=NULL;
int gyak1,gyak2,szavak=0,n;
float hasonlosag=0,eredm;
f1=fopen(argv[1],"r");
f2=fopen(argv[2],"r");
fej1=feldolgoz(f1,fej1);
fej2=feldolgoz(f2,fej2);
for(seged=fej1;seged;seged=seged->kov)
{
if((n=keres(fej3,seged->szo))==0)
{
gyak1=gyak(fej1,seged->szo);
gyak2=gyak(fej2,seged->szo);
hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
szavak++;
}
}
for(seged=fej2;seged;seged=seged->kov)
{
if((n=keres(fej3,seged->szo))==0)
{
gyak1=gyak(fej1,seged->szo);
gyak2=gyak(fej2,seged->szo);
hasonlosag+=(abszolut(gyak1,gyak2))/(gyak1+gyak2);
szavak++;
}
}
eredm=hasonlosag/szavak;
printf("%.5f\n",eredm);
return 0;
}valgrind -v eredmények:
==3173== Memcheck, a memory error detector.
==3173== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
==3173== Using LibVEX rev 1658, a library for dynamic binary translation.
==3173== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==3173== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
==3173== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
==3173==
--3173-- Command line
--3173-- ./elso
--3173-- Startup, with flags:
--3173-- -v
--3173-- Contents of /proc/version:
--3173-- Linux version 2.6.18-6-xen-amd64 (Debian 2.6.18.dfsg.1-23etch1) (dannf@debian.org) (gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)) #1 SMP Fri Dec 12 07:02:03 UTC 2008
--3173-- Arch and hwcaps: AMD64, amd64-sse2
--3173-- Valgrind library directory: /usr/lib/valgrind
--3173-- Reading syms from /home/izgatopasi/Prog1/3/1/elso (0x400000)
--3173-- Reading syms from /lib/ld-2.3.6.so (0x4000000)
--3173-- Reading debug info from /lib/ld-2.3.6.so...
--3173-- ... CRC mismatch (computed 1CBD6C2C wanted 509BB065)
--3173-- object doesn't have a symbol table
--3173-- Reading syms from /usr/lib/valgrind/amd64-linux/memcheck (0x38000000)
--3173-- object doesn't have a dynamic symbol table
--3173-- Reading suppressions file: /usr/lib/valgrind/default.supp
--3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_core.so (0x4918000)
--3173-- Reading syms from /usr/lib/valgrind/amd64-linux/vgpreload_memcheck.so (0x4A19000)
--3173-- Reading syms from /lib/libc-2.3.6.so (0x4B1F000)
--3173-- Reading debug info from /lib/libc-2.3.6.so...
--3173-- ... CRC mismatch (computed AD7708C1 wanted 5D81B887)
--3173-- object doesn't have a symbol table
--3173-- REDIR: 0x4B91980 (rindex) redirected to 0x4A1C450 (rindex)
--3173-- REDIR: 0x4B8D0F0 (malloc) redirected to 0x4A1B7D6 (malloc)
==3173== Syscall param open(filename) points to unaddressable byte(s)
==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
==3173== by 0x4008B9: main (1_feladat.c:94)
==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
--3173-- REDIR: 0x4B8B180 (free) redirected to 0x4A1B3E6 (free)
==3173==
==3173== Conditional jump or move depends on uninitialised value(s)
==3173== at 0x400771: feldolgoz (1_feladat.c:53)
==3173== by 0x4008E3: main (1_feladat.c:96)
==3173==
==3173== Invalid read of size 2
==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
==3173== by 0x400801: feldolgoz (1_feladat.c:54)
==3173== by 0x4008E3: main (1_feladat.c:96)
==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3173==
==3173== Process terminating with default action of signal 11 (SIGSEGV)
==3173== Access not within mapped region at address 0x0
==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
==3173== by 0x400801: feldolgoz (1_feladat.c:54)
==3173== by 0x4008E3: main (1_feladat.c:96)
--3173-- REDIR: 0x4B92830 (memset) redirected to 0x4A1C960 (memset)
==3173==
==3173== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
==3173==
==3173== 1 errors in context 1 of 3:
==3173== Invalid read of size 2
==3173== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
==3173== by 0x400801: feldolgoz (1_feladat.c:54)
==3173== by 0x4008E3: main (1_feladat.c:96)
==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3173==
==3173== 1 errors in context 2 of 3:
==3173== Syscall param open(filename) points to unaddressable byte(s)
==3173== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
==3173== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
==3173== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
==3173== by 0x4B7C053: (within /lib/libc-2.3.6.so)
==3173== by 0x4008B9: main (1_feladat.c:94)
==3173== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3173==
==3173== 4 errors in context 3 of 3:
==3173== Conditional jump or move depends on uninitialised value(s)
==3173== at 0x400771: feldolgoz (1_feladat.c:53)
==3173== by 0x4008E3: main (1_feladat.c:96)
--3173--
--3173-- supp: 8 Debian libc6 (2.3.x) stripped dynamic linker
==3173==
==3173== IN SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
==3173==
==3173== malloc/free: in use at exit: 0 bytes in 0 blocks.
==3173== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
==3173==
==3173== All heap blocks were freed -- no leaks are possible.
--3173-- memcheck: sanity checks: 0 cheap, 1 expensive
--3173-- memcheck: auxmaps: 0 auxmap entries (0k, 0M) in use
--3173-- memcheck: auxmaps: 0 searches, 0 comparisons
--3173-- memcheck: SMs: n_issued = 12 (192k, 0M)
--3173-- memcheck: SMs: n_deissued = 0 (0k, 0M)
--3173-- memcheck: SMs: max_noaccess = 524287 (8388592k, 8191M)
--3173-- memcheck: SMs: max_undefined = 0 (0k, 0M)
--3173-- memcheck: SMs: max_defined = 66 (1056k, 1M)
--3173-- memcheck: SMs: max_non_DSM = 12 (192k, 0M)
--3173-- memcheck: max sec V bit nodes: 0 (0k, 0M)
--3173-- memcheck: set_sec_vbits8 calls: 0 (new: 0, updates: 0)
--3173-- memcheck: max shadow mem size: 4336k, 4M
--3173-- translate: fast SP updates identified: 921 ( 86.7%)
--3173-- translate: generic_known SP updates identified: 90 ( 8.4%)
--3173-- translate: generic_unknown SP updates identified: 51 ( 4.8%)
--3173-- tt/tc: 2,648 tt lookups requiring 2,655 probes
--3173-- tt/tc: 2,648 fast-cache updates, 2 flushes
--3173-- transtab: new 1,324 (31,539 -> 556,589; ratio 176:10) [0 scs]
--3173-- transtab: dumped 0 (0 -> ??)
--3173-- transtab: discarded 0 (0 -> ??)
--3173-- scheduler: 23,425 jumps (bb entries).
--3173-- scheduler: 0/1,389 major/minor sched events.
--3173-- sanity: 1 cheap, 1 expensive checks.
--3173-- exectx: 30,011 lists, 15 contexts (avg 0 per list)
--3173-- exectx: 18 searches, 4 full compares (222 per 1000)
--3173-- exectx: 0 cmp2, 39 cmp4, 0 cmpAllvalgrind eredmény (simán csak valgrind [nev]):
==3298== Memcheck, a memory error detector.
==3298== Copyright (C) 2002-2006, and GNU GPL'd, by Julian Seward et al.
==3298== Using LibVEX rev 1658, a library for dynamic binary translation.
==3298== Copyright (C) 2004-2006, and GNU GPL'd, by OpenWorks LLP.
==3298== Using valgrind-3.2.1-Debian, a dynamic binary instrumentation framework.
==3298== Copyright (C) 2000-2006, and GNU GPL'd, by Julian Seward et al.
==3298== For more details, rerun with: -v
==3298==
==3298== Syscall param open(filename) points to unaddressable byte(s)
==3298== at 0x4BDB152: open (in /lib/libc-2.3.6.so)
==3298== by 0x4B85F52: _IO_file_open (in /lib/libc-2.3.6.so)
==3298== by 0x4B8609B: _IO_file_fopen (in /lib/libc-2.3.6.so)
==3298== by 0x4B7C053: (within /lib/libc-2.3.6.so)
==3298== by 0x4008B9: main (1_feladat.c:94)
==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3298==
==3298== Conditional jump or move depends on uninitialised value(s)
==3298== at 0x400771: feldolgoz (1_feladat.c:53)
==3298== by 0x4008E3: main (1_feladat.c:96)
==3298==
==3298== Invalid read of size 2
==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
==3298== by 0x400801: feldolgoz (1_feladat.c:54)
==3298== by 0x4008E3: main (1_feladat.c:96)
==3298== Address 0x0 is not stack'd, malloc'd or (recently) free'd
==3298==
==3298== Process terminating with default action of signal 11 (SIGSEGV)
==3298== Access not within mapped region at address 0x0
==3298== at 0x4B82DE1: getc (in /lib/libc-2.3.6.so)
==3298== by 0x400801: feldolgoz (1_feladat.c:54)
==3298== by 0x4008E3: main (1_feladat.c:96)
==3298==
==3298== ERROR SUMMARY: 6 errors from 3 contexts (suppressed: 8 from 1)
==3298== malloc/free: in use at exit: 0 bytes in 0 blocks.
==3298== malloc/free: 2 allocs, 2 frees, 1,136 bytes allocated.
==3298== For counts of detected errors, rerun with: -v
==3298== All heap blocks were freed -- no leaks are possible.
Szegmens hiba[ Szerkesztve ]
-
blaces
tag
Közben a harmadikkal is foglalkozom... szinte egésznap, lehet a fáradtságtól nem tudok már oda figyelni rendesen.
Feladat:
[I]Írj programot, amely egy egész számokat tartalmazó szöveges állományból felépít egy bináris fát, és eldönti, hogy a fa inorder és preorder bejárásával ugyanazt a számsorozatot kapja-e! A számokat tartalmazó állomány nevét az első parancssori argumentumként kapja meg a program.A szöveges állomány soronként pontosan egy tízes számrendszerbeli egész számot tartalmaz. A sorokat az újsor karakter (\n) zárja. Az állományt az állomány vége (EOF) jelig kell olvasni.
A bináris fa felépítésében két szabályt kell figyelembe venni. Ha a beszúrandó szám nagyobb, mint az, amelyik a gyökérben van, akkor a gyökértől jobbra kerüljön, ha kisebb vagy egyenlő, akkor a gyökér bal oldalára. Azaz ez a fa nem bináris keresőfa.
A program járja be a fát inorder és preorder módon. Ha a két bejárás ugyanazt a számsorozatot adja eredményül, akkor a program a második parancssori argumentumként megkapott nevű állományba írja az "igen", különben a "nem" szót. [/I]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define HAMIS 0
#define IGAZ (!HAMIS)
typedef struct faelem {
char *adat;
int szamlalas, input;
struct faelem *bal, *jobb;
} FA;
void beszuras(FA **gyok, char *adat, int fajlnev) {
if(*gyok == NULL) {
*gyok = (FA*)malloc(sizeof(FA));
(*gyok)->adat = (char*)malloc((strlen(adat)+1)*sizeof(char));
strcpy((*gyok)->adat, adat);
(*gyok)->szamlalas = 1;
(*gyok)->input = fajlnev;
(*gyok)->bal = (*gyok)->jobb = NULL;
} else if(strcmp((*gyok)->adat, adat) < 0) {
beszuras(&(*gyok)->jobb, adat , fajlnev);
} else if(strcmp((*gyok)->adat, adat) > 0) {
beszuras(&(*gyok)->bal, adat, fajlnev);
} else if((strcmp((*gyok)->adat, adat) == 0) && ((*gyok)->input != fajlnev)) {
(*gyok)->szamlalas++;
(*gyok)->input = fajlnev;
}
return;
}
void bejaras(FA *gyok, int n) {
if(gyok != NULL) {
bejaras(gyok->bal, n);
if(gyok->szamlalas == n) {
printf("%s\n",gyok->adat);
}
bejaras(gyok->jobb, n);
}
return;
}
void torles(FA *gyok) {
if(gyok != NULL) {
free(gyok->adat);
torles(gyok->bal);
torles(gyok->jobb);
free(gyok);
}
return;
}
int atugras(int ch) {
if(ch != (int)' ' && ch != (int)'\n' && ch != (int)'\r' &&
ch != (int)'\t' && ch != (int)'.' && ch != (int)',' && ch != (int)';' &&
ch != (int)EOF) {
return HAMIS;
}
return IGAZ;
}
char *memoriafoglalas(char *szo, int j) {
return (szo == NULL) ?
(char*)malloc(sizeof(char)) : (char*)realloc(szo,(j+1)*sizeof(char));
}
int main(int argc, char **argv) {
FILE **fp = NULL;
char *szo = NULL;
int ch;
FA *gyok = NULL;
int i, j;
if((fp = (FILE**)malloc((argc-1)*sizeof(FILE*)))==NULL)
exit(1);
for(i=1;i<argc;++i)
if((fp[i-1] = fopen(argv[i],"rt+"))==NULL)
exit(1);
for(i=1;i<argc;++i) {
j = 0;
while((ch = fgetc(fp[i-1]))) {
if((szo = memoriafoglalas(szo, j))==NULL)
exit(1);
if(atugras(ch) == HAMIS) {
szo[j++] = tolower(ch);
} else if(j > 0 || ch == (int)EOF) {
szo[j] = '\0';
beszuras(&gyok, szo, i-1);
free(szo);
szo = NULL;
j = 0;
if(ch == (int)EOF) {
break;
}
}
}
fclose(fp[i-1]);
}
free(fp);
bejaras(gyok, argc-1);
torles(gyok);
return 0;
}Ez lefordul, csak hibás kimenetet ad vissza az egyetemi tesztelőn
[ Szerkesztve ]
-
Jester01
veterán
Ez meg nem is hasonlít a feladatkiírásra. Eleve egész számokról van szó. A fa elemeknél nem is értem a mezőket. A két bejárást sehol nem látom, ahogy a kiírandó igen és nem szavakat sem. A beolvasás meg úgy látom tetszőleges számú fájlból akar olvasni és sehová nem ír, pedig a feladat szerint egy darab bemeneti és egy darab kimeneti fájl van.
Biztos, hogy ez a program ehhez a feladathoz tartozik?
Jester
-
blaces
tag
válasz Jester01 #1010 üzenetére
ufff bocs
ez a feladat...
[I]Írj programot, amely parancssori argumentumként megkapja legfeljebb 10 szöveges állomány nevét, és lexikografikus sorrendben a szabványos kimenetre írja azokat a szavakat, amelyek az összes állományban előfordulnak! Minden szót csak egyszer kell kiírni, és a kis- és nagybetűket azonosként kell kezelni (azaz az "alma" és az "alMA" szavakat azonosnak kell tekinteni).
Az állományokban minden sor egy vagy több szót tartalmaz. A sorokat az újsor karakter (\n) zárja. A sorokban a szavak egyetlen szóköz karakterrel vannak elválasztva egymástól. Minden szó legfeljebb 50 karakter hosszú.
A program a szabványos kimeneten minden sorba egyetlen szót írjon! A kimeneten minden szó csupa kisbetűvel szerepeljen! Az implementációhoz használj bináris fát.[/I]
-
Jester01
veterán
Na így már jobban hasonlít, bár a feladatkiírás szerint minden szót pontosan egy szóköz választ el egymástól, te meg mindenféle mást is elválasztójelnek tekintesz. Ez okozhat problémát.
De ami biztos rossz, hogy a fájl végén ha éppen soremelés után vagyunk (ami pedig szokás) akkor beszúrsz egy üres szót is a fába. Ettől eltekintve az általam használt tesztadatra jól működött.
Jester
-
blaces
tag
-
vgergo
aktív tag
Mi ezzel a kóddal a gond?
for (int i = 1421; i <= 3; i=i-5)
{
cout << memblock[i];
}Az a bajom ezzel a kóddal, hogy nem ír ki semmit, miközben a memblock[i] minden i-re egy számot tárol.
Sőt még ez sem működik:
for (int i = 1421; i <= 3; i=i-5)
{
cout << i;
}Ez működik:
for (int i = 0; i < size; i++)
{
cout << memblock[i];
}size sokkal nagyobb, mint 1421
Segítségeteket előre is köszönöm.
[ Szerkesztve ]
-
ArchElf
addikt
Mert amit írsz [for (int i = 1421; i <= 3; i=i-5)], azt azt jelenti:
Fusson a ciklus 1421 -től -5 ösével addig, amíg a ciklusváltozó kisebb vagy egyenlő, mint 3.
Mivel már kezdetben sem kisebb vagy egyenlő, mint három, bele sem ugrik a ciklusba... Amit te szeretnél (gondolom), az ez:for (int i = 1421; i >= 3; i=i-5)
{
cout << memblock[i];
}AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Iolé
csendes tag
Sziasztok!
Szeretném a segítségeteket kérni! Lenne egy program, amit nem egészen értek, főleg utolsó rész nem tiszta. Esetleg valaki tudna egy kis kommentet írni hozzá, hogy hogyan működik, meg mikor mit csinál, nagyon fontos lenne!
Ez volta feladat: A parancs a parancs sorban egy decimális számot (vagy decimális számokszóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja római
szám megfelelőjét az stdout-ra.
Hibásan megadott parancs esetén a programnak rövid diagnosztikai
üzenetben informálnia kell a felhasználót arról, hogy a parancsot
hogyan kell használni. A diagnosztikai üzenetet az stderr-re kell
küldeni.
És a program:
#include <stdio.h>int main(argc, argv)
int argc;
char *argv[];
{
int i = 0, x=0;
int dec;
char rom[50];
if(argc == 1){
fprintf(stderr, "Hianyzik a parameter!");
exit( 1 );
}for(x=1;x<argc;x++){
if(egesze(argv[x])){
dec = atoi(argv[x]);
}else{
fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
exit( 1 );
}while(dec>=1000){
dec -= 1000;
rom[i] = 'M';
i++;
}
if (dec>=900){
dec-=900;
rom[i] = 'C';
i++;
rom[i] = 'M';
i++;
}
if(dec>=500){
dec -= 500;
rom[i] = 'D';
i++;
}
if (dec>=400){
dec -= 400;
rom[i] = 'C';
i++;
rom[i] = 'D';
i++;
}
while(dec>=100){
dec = dec-100;
rom[i] = 'C';
i++;
}
if(dec>=90){
dec -= 90;
rom[i] = 'X';
i++;
rom[i] = 'C';
i++;
}
if(dec>=50){
dec -= 50;
rom[i] = 'L';
i++;
}
if(dec>=40){
dec -= 40;
rom[i] = 'X';
i++;
rom[i] = 'L';
i++;
}
while(dec>=10){
dec -= 10;
rom[i] ='X';
i++;
}
if(dec == 9){
rom[i] = 'I';
i++;
rom[i] = 'X';
i++;
}
else{
if(dec >= 5){
dec -= 5;
rom[i] = 'V';
i++;
}
if(dec == 4){
rom[i] = 'I';
i++;
rom[i] = 'V';
i++;
}
else{
while(dec > 0){
dec -= 1;
rom[i] = 'I';
i++;
}
}
}
rom[i]='\0';
printf(" %s", rom);
}
exit(0);
}int egesze(s)
char *s[];
{
int i=0, kezd;
while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
if(s[i]=='+' || s[i]=='-')++i;
kezd=i;
while(s[i]>='0' && s[i]<='9')++i;
if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
else return 1;
}int atoi(s)
char s[];
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
} -
ArchElf
addikt
Nem akarom modani, de kicsit hibás is a program...
- Negatív számokra nem ír ki semmit (egy hibaüzenet azért elkélne)
- túl hosszú számokra hibát dob (puffer túlcsordulás miatt), ezt is illendő volna lekezelni
- az alábbi sor elé kell egy i = 0;
while(dec>=1000){
mert jelen helyzetben egymás mögé konkatenálja a sztringeket (amiből sok jó nem származik):test.exe 1 2 3
I III IIIIII
test.exe 1 5 7
I IV IVVIIAmúgy nagyvonalakban:
egesze fv: megnézi, hogy az n. argument egész számmá alakítható-e (az argumentum első része csak számokból áll-e)
atoi fv: string integer-ré varázsolása...
belső for ciklus: végigmegy az argumentumokon, kivonásos alapon "legyártja" római karakteres reprezentációt, kiírja a kimenetreAE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Zwiebel
tag
Sziasztok!
Programfejlesztést szeretnék tanulni , ehhez könyvet szeretnék venni és nem tudom , hogy melyikkel lehetne jobb programokat írni C-vel vagy C++-al? Játékokhoz melyik ésszerűbb? Melyiket könyebb tanulni?
És légyszíves ha tudtok ajánljatok nekem egy könyvet C-rő vagy C++-ról amelyik szerintetek egy kezdőnek ésszerűbb és jobb progik
Előre is köszi!
Zwiebel
Egy új fogalmat szeretnék alkotni: ProG(r)a(m)mer
-
gygabor88
tag
válasz Zwiebel #1021 üzenetére
C-hez könyv: Brian Kernighan & Dennis Ritchie A C programozási nyelv
C++ könyv: Bjarne Stroustroup A C++ programozási nyelvEzenkívül rengeteg más a témával kapcsolatos könyvet fogsz találni a boltokban, de mind hulladék. Ezt komolyan mondom. Elég ha a terjdelmeket összehasonlítjuk, már akkor is látszik. A lényeg, hogy ha ezen a vonalon akarsz elindulni, akkor először a C-s könyvet utána a C++ könyvet olvasd ki. Utóbbit nem árt többször is elolvasni. Már csak azért is ezeket vedd meg, mert ha később programozónak tanulsz, akkor egyetemen is ezekből kell majd tanulnod.
-
sghc_toma
senior tag
válasz gygabor88 #1022 üzenetére
maganvelemeny kovetkezik, nem megkovezni erte
annyira nagyon nem ismerem a Stroustroup konyvet (referencianak hasznaltam parszor), de szerintem teljesen kezdonek nem a legmegfelelobb.. tul sok infot tartalmaz elsore.. szerintem sokkal jobban lehet tanulni egy olyan konyvbol, ami kisebb problemak megoldasan keresztul nyujt betekintest a nyelvbe.. amikor meg mar van egy ralatasod a dolgokra (es erdekel is a dolog), ugyis utananezel az apro finomsagoknak..azzal az altalanosan elfogadott nezettel sem ertek egyet, hogy eloszor C, aztan C++.. nem irom le, hogy miert, mert Bartosz Milewski nagyon jol leirja a C++ In Action cimu konyveben, es maximalisan egyetertek vele..
Meg egy konyv van, amit tudok ajanlani C++-hoz: Thinking In C++..
in asm we trust
-
gygabor88
tag
válasz sghc_toma #1023 üzenetére
Anno C++ volt az első programnyelv, amit megtanultam, utána C. Akkor úgy éreztem gyorsabban eljutottam volna ugyanoda, ha C lett volna a kezdőnyelv, ezért ajánlottam így, de nyilván mindenkinek más az ideális. Stroustroup könyv is jó kezdőnek, ha mellette példakódokat is néz a netről minden témakörhöz. A többi könyvvel az a baj, hogy felszínesen átrohannak minden témán , aztán amikor az olvasó belenéz egy open source program forrásába, akkor nem érti, mert alapvető nyelvi elemeket nem ismertetett a könyv.
-
doc
nagyúr
válasz gygabor88 #1024 üzenetére
en forditva csinaltam, C utan jott a C++, aminek megvolt az a hatranya, hogy sokaig kevert C/C++ programokat irtam, nem hasznaltam ki igazan a nyelv adottsagait, mert a C-s megoldast mar ismertem, igy azt hasznaltam (pl. filekezelesnel, input/outputnal)
igazabol ha komolyan akar C++-szal foglalkozni, es "ahhoz valo" feladatokat csinalni (pl. gui, stb) akkor a C-s alap inkabb hatrany mint elony, nagyon mas gondolkodasmod kell a kettohoz -
Zwiebel
tag
Sziasztok!
Köszönöm szépen a válaszokat!
Egy új fogalmat szeretnék alkotni: ProG(r)a(m)mer
-
sghc_toma
senior tag
en is igy latom.. Basic-kel, Pascal-lal kezdtem, es nagyon sokaig tartott, mire felnyilt a szemem, es megtanultam igazan hasznalni a C++ adta lehetosegeket..
gygabor88: Thinking In C++-t ezert szeretem nagyon; alaposan bemutatja a nyelvet, es mindezt jo peldaprogikon keresztul teszi..
in asm we trust
-
kampi_
csendes tag
Sziasztok!
Egy gyors kérdésem lenne. Van egy gépnév mint pl:: computer1234 ebből szeretnék én egy olyat, hogy az utolsó 4 karakter ténylegesen int tipusú legyen ne char. Tudnátok ebben segíteni. Nekem sehogysem jön össze. Nagyon fontos lenne!
Előre is köszönöm a segítséget!
Üdvampi
-
farki001
csendes tag
Sziasztok!
Nem sokára (ha felvesznek) kezdem a győrben a mérnökinfó szakot. S kicsit előre szeretnék tanulni hogy könnyebb dolgom legyen. Az előző hozzá szólásokból megvan milyen könyveket szerezzek be. Köszi. Tudnátok mondani valami fejlesztői környezetet amiben tudnék gyakorolni.
Előre is köszi.
-
gaben
aktív tag
Szaisztok!
Lenne egy .txt fájl,amiben soronként vannak adatok(több ezer sorban).Ezeket az adatokat kellene feldolgozni.
Úgy gondoltam,hogy majd az fgets-el kiszedem soronként az adatokat,ezt beteszem egy tömbbe(ebbe mindig csak az aktuális sor adatai vannak),és utána,ezt besteszem egy másik tömbbe(ide gyűjtöm soronként az adatokat,egy nagy vektor lesz) ,tehát mindegyik soron végig megyek,és az összes adatot egy vektorba teszem.Majd ezen a vektoron végzem el a feldolgozást.De ne makar összejönni,az fgets,csak az utolsó sorral dolgozik.
Próbáltam for ciklusba rakni,de így sem akar összejönni.Hogyan tudnám megoldani,hogy soronként megyek?Vagy lehet az egész elgondolás rossz?
Köszönöm a helpet.
a Próbálkozás egy részlete:while(!feof(filep)){
if (feof(filep)) break;for(i=0;i!='\n';i++){
fgets(sor,1000,filep);
}
} -
gaben
aktív tag
A szövegfájlban megkéne számolni pl: a 25-öt.Ezt hogy tehetném meg?
1-9-ig az ASCII kód alapján megtudnám,de a több jegyűeknek nem tudom az ASCII kódját.
Ha meg csak a karaktere nézem akkor kiírja az összes olyat amiben van Pl: 5-re mint számra keresek kidobja a 15-öt is,stb..
5let? -
ArchElf
addikt
C helyett nem lehet mást használni? RegEx-el elég egyszerűen meg lehetne oldani a problémát.
"25"-el mondjuk a következő:
(^25\W)|(\W25\W)|(\W25$)AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
gygabor88
tag
Ennek működnie kell:
char* line = "25asifh 125 dfis df 25 25 25 dsojg 2525";
const char* pattern = "25";
char* tmp = line;
int count = 0;
do
{
tmp = strstr(tmp,pattern);
if(tmp)
{
char *ch1 = tmp;
char *ch2 = tmp;
ch1--;
ch2 = ch2 + strlen(pattern);
if(((*ch2) == ' ' || (*ch2) == '\0') && (ch1 < line || (*ch1) == ' '))
{
count++;
}
tmp = tmp + strlen(pattern);
}
}while(tmp);[ Szerkesztve ]
Ú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!
- Kihívás a középkategóriában: teszten a Radeon RX 7600 XT
- CASIO órák kedvelők topicja!
- Luck Dragon: Asszociációs játék. :)
- Vicces képek
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Kerékpárosok, bringások ide!
- Rövid előzetesen a S.T.A.L.K.E.R. 2: Heart of Chornobyl
- Milyen NAS-t vegyek?
- Milyen monitort vegyek?
- HP ProLiant MicroServer Gen8
- További aktív témák...