Hirdetés

2024. április 26., péntek

Gyorskeresés

Hozzászólások

(#801) Dirty_Pio


Dirty_Pio
csendes tag

Itt megint problemam van :

#include <stdio.h>
#include <stdlib.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
read_student ( struct student a, int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
pritnf("\n the %i th student is:");
e=getname(p);
a[i].name=malloc(e*sizeof(char));
a[i].name=*p;
printf("\n mark for %s :",a[i].name);
scanf("%i",&a[i].mark);
}
free(p);
}
pritnstudnets(struct student a, int n)
{
int i;
stdnt *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].*name);
}

int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudenst(a,nstdnt);
return(0);
}

NEm tudom hogy hogyan vonatkozzak egy sturkturaban levo pointerre

(#802) Dirty_Pio


Dirty_Pio
csendes tag

Na... kozbe rajottem egy-ket nagyobb hibamra, szoval igy nez ki a javitott kod:

#include <stdio.h>
#include <stdlib.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
read_student ( struct student a[], int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
pritnf("\n the %i th student is:");
e=getname(p);
a[i].name=malloc(e*sizeof(char));
strcpy(a[i].name,p);
printf("\n mark for %s :",a[i].name);
scanf("%i",&a[i].mark);
}
free(p);
}
pritnstudnets(struct student a[], int n)
{
int i;
struct student *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].name);
}

int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudenst(a,nstdnt);
return(0);
}

A forditas elindul, de a lineker problemat talal a pritntf -ben a readstudent fuggvenyen belul, szovla mi a tehendom ?

(#803) gygabor88 válasza Dirty_Pio (#802) üzenetére


gygabor88
tag

// pritnf("\n the %i th student is:") helyett
printf("\n the %d th student is:",i);

(#804) Dirty_Pio válasza gygabor88 (#803) üzenetére


Dirty_Pio
csendes tag

Annak a printfnek semmi baja... amugy az ANSIC ben lehet hasznalni %i -t az integerek kiirasara, nem szukseges feltetlenul a %d (decimal) placeholder hasznalata. A masik printf -fel van baj: azzal amelyikben az a[i].name szerepel, es nem tudom hogy miert :az error igy hangzik: undefined reference to printf es a masodik a printstudentben is ugyanez az error jelentkezik. Es axitcode 1 el kilep a fordito.

(#805) gygabor88 válasza Dirty_Pio (#804) üzenetére


gygabor88
tag

Most pici jobban ránéztem a kódra. A fordító azért is szólni fog, amit fentebb írtam. Nem az a lényeg, hogy %i vagy %d, hanem, hogy kell a printf-nek következő paraméter is. Az is probléma viszont, hogy pár dolgot elírtál, pl printf helyett pritnf -t írtál, printstudents nevű függvényed pedig nincs, szintén elírás miatt, emiatt nem találja ezeket a függvényeket. Strcpy-t sem fogja felismerni, mert nincs betolva a megfelelő header fájl. Így már megeszi a fordító:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXST 20
#define MAXNL 50
struct student {
char *name;
float mark;
} ;
int getname(char *p)
{
int i=0;
char *q,c;
q=p;
while ( (c=getchar()!='\n') && i<MAXNL)
{
q[i]=c;
i++;
}
q[i]='\0';
return (i);
}
void read_student ( struct student a[], int n)
{
char *p;
int i,e;
p=malloc(sizeof(char)*MAXST);
for (i=0;i<n;i++)
{
printf("\n the %d th student is:",i);
e=getname(p);
a[i].name=malloc(e*sizeof(char));
strcpy(a[i].name,p);
printf("\n mark for %s :",a[i].name);
scanf("%f",&a[i].mark);
}
free(p);
}
void printstudents(struct student a[], int n)
{
int i;
struct student *p;
p=a;
for (i=0;i<n;i++)
printf("%s\n",a[i].name);
}

int main(void){
struct student a[MAXST];
int nstdnt;
printf("students nr is:");
scanf("%i",&nstdnt);
read_student(a,nstdnt);
printstudents(a,nstdnt);
return(0);
}

[ Szerkesztve ]

(#806) blaces


blaces
tag

Sziasztok!

Most hardcore szinten belefogtam a C tanulásába magamtól (könyv alapján) eldöntöttem, hogy ideje normálisan megtanulni programozni ,persze közben a félévben is tanulni kell az egyetemen :DDD

A könyv azt írja, hogy a ?: operátor jobbról balra típusú... egy fél nap alatt a többire rájöttem, hogy miért olyan asszociativitással rendelkezik. A könyv két példát hozz fel erre az operátorra:

x < y ? (min1 = x) : (min1 = y);
min2 = x < y ? x : y;

az utóbbinál értem, mert ez olyan mint egy értékadás :)) , de az első verziónál nem látom, hogy mitől lenne ez jobbról balra... nekem balról jobbra félének látszik.

(#807) gygabor88 válasza blaces (#806) üzenetére


gygabor88
tag

Hát nem lehet túl jó a könyv, mert ebből a két példából pont nem érted meg a jobbasszociativitást. :N Erről van szó:

expr1 ? expr2 : expr3 ? expr4 : expr5
ezzel ekvivalens
( expr1 ? expr2 : ( expr3 ? expr4 : expr5 ) )

(#808) blaces válasza gygabor88 (#807) üzenetére


blaces
tag

Kösz, vágom az elméletét. Olyan mintha egy egymásba ágyazott IF utasítás lenne.

(#809) nemmegyaC válasza blaces (#808) üzenetére


nemmegyaC
csendes tag

Haliho mindenkinek!

Nekem lenne 4 (rövidebb...állitolag... :F ) prog házim. És nem boldogulok vele. C-ben kéne megirni, ömmm...holnapra :O És futnia kell, csak ugy fogadják el :O

Tudna nekem ebben segiteni vki okos-lelkes programozo?

A feladatok:
1.,Írjon és deklaráljon C függvényt, amely egy nullavégű sztringben
kicseréli az angol abécé kisbetűit a nekik megfelelő nagybetűkre.
Használjátok a isupper, toupper, islower, tolower függvényeket.

int islower(c): TRUE if c is any lowercase char
int isupper(c): TRUE if c is any uppercase char
int tolower(c): convert c to a lowercase
int toupper(c): convert c to uppercase

2., Írjon és deklaráljon C függvényt, amely összefűz két, paraméterként
kapott NULL terminált sztringet! Az eredményt ne visszatérési értékként adja
vissza, válasszon más módszert! (Nem használhatjátok a string.h-t.)

3., Írjon és deklaráljon C függvényt, amely egy nullavégű sztringben, amely
egyes karaktereket ('1') és nullákat ('0') tartalmaz, minden EGYMÁST KÖVETŐ
ötödik egyes után beír egy nullát ('0')! Az eredmény számára a függvény
foglal helyet. (Ez kicsit hasonlít ez első házi 3., feladatához, de muszáj
gyakorolni, szóval rágjátok át rendesen.)

4., Amit az órán lediktáltam: void reverse(char* str,char* rev); A fv. a
rev-t állítja elő a str megfordításával (Pl.: str "Hello" rev "olleH").
Vigyázzatok, hogy a rev nullterminált legyen, és ebben a feladatban hívó
foglal helyet a rev-nek. Írjatok teszt main-t is.

Elöre is nagyon köszönöm! ;)

Szép napot mindenkinek

(#810) cellpeti


cellpeti
veterán

Sziasztok!

Nekem van egy olyan feladatom,hogy írassam ki EOF értékét,de nem teljesen vágom mit és hogyan kéne :O

Tigris, tigris, csóvafény...

(#811) cellpeti válasza cellpeti (#810) üzenetére


cellpeti
veterán

Sziasztok!

Az előző feladatot sikerült megcsinálnom Fire segítségével.

Itt lenne egy másik feladat:

Írjunk progit,amely megszámolja a bemenetre adott szövegben lévő szóközöket,tabulátorokat és új sor karaktereket.

Amit megírtam,de nem is bizti,hogy jó,meg lehet valaki tud valami okos tanácsot adni,hogy lehetne kicsit tömörebben. A forráskódot belinkelem,ha lehet ne szapuljatok,mert kezdő vagyok.

#include<stdio.h>

void main(void)
{
int c,tab,ujsor,space;

tab = 0;
ujsor =
space = 0;

while (( c = getchar()) != EOF)
if (c == ' ' || c == '\n' || c=='\t')
++tab;
++ujsor;
++space;
printf("%d\n",space);
printf("%d\n",ujsor);
printf("%d\n",tab);
}

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#812) Jester01 válasza cellpeti (#811) üzenetére


Jester01
veterán

Egyes számú okos tanács: próbáld ki :K
Kettes számú okos tanács: mindig használj kapcsos zárójelet ciklusokban és feltételekben
Hármas számú okos tanács: a main úgy illik, hogy int-et adjon vissza

Ha a kapcsos zárójeleket betesszük úgy, ahogy a fordító értelmezi a te kódod, akkor ez lesz:

while (( c = getchar()) != EOF) {
if (c == ' ' || c == '\n' || c=='\t') {
++tab;
}
}
++ujsor;
++space;

Látható, hogy az utolsó két sor nem hogy az if-ben, de még a while-ban sincs benne. Tehát azok mindig 1-et fognak kapni. A tab változó pedig önmagában számolja mind a 3 típust, vagyis azok összege lesz benne. A 3 karaktert külön-külön feltétellel (vagy switch szerkezettel ha már azt ismered) kell ellenőrizni, és persze mindet a cikluson belül.

Jester

(#813) cellpeti válasza cellpeti (#811) üzenetére


cellpeti
veterán

Köszönöm a segítséget! :R
Így tényleg jó! THX! :C
Még lehet sokat fogok ide linkelgetni,mert még van 2 feladat ehhez a fejezethez!

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#814) cellpeti


cellpeti
veterán

1. Írjunk programot,ami a bemenetre adott szöveget,úgy másolja át a kimenetre,hogy közben az egy vagy több szóközből álló karaktersorozatokat egyetlen szóközzel helyettesítse. :F

2. Írjunk programot,ami a bemenetre adott szöveget úgy másolja át a kimenetre,hogy közben a tabulátorjeleket \t, a visszaléptetéskaraktereket \b és a fordított törtvonalkaraktereket(backslash) \\ karakterrel helyettesíti! :Y

Tigris, tigris, csóvafény...

(#815) Fire/SOUL/CD válasza cellpeti (#814) üzenetére


Fire/SOUL/CD
félisten

Hali!

A második feladattal kezdeném

kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM \t, \b karakter akkor simán kiiratod
ha IGEN akkor nem iratod ki, hanem helyette a dupla backslash-t =>printf("\\\\")
C-ben a backslash karaktert "duplázni" kell kiiratáskor(többekközt), erre azért van szükség mert a backslash vezeti be a vezérlőkaraktereket is \t,\n,\b stb

Az első példa

kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
kell egy "szőközjelző" integer pl _IS_SPACE, ezt a progi elején nullázd
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM SZÓKÖZ KARAKTER, akkor kiiratod és az _IS_SPACE-t ALACSONYRA(0) állítod
ha a string[n] SZÓKÖZ KARAKTER, akkor megvizsgálod, hogy az _IS_SPACE alacsony(0) vagy magas(1)
ha az _IS_SPACE ALACSONY(előtte nem szóköz volt) akkor kiirod a szóközt, és MAGASRA(1) állitod az _IS_SPACE-t
ha _IS_SPACE MAGAS(elötte szóköz volt) akkor nem iratsz ki semmit

Leírva bonyolultabb mint a kész progi... :DDD

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)

(#816) cellpeti válasza Jester01 (#812) üzenetére


cellpeti
veterán

Köszönöm a helpet mindenkinek! Még jövök! :P

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#817) cellpeti válasza Fire/SOUL/CD (#815) üzenetére


cellpeti
veterán

"kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig..."

Nem értem,hogy ez milyen ciklus is lenne? Talán while? :U

Mi az a hisztogram? :F

Tigris, tigris, csóvafény...

(#818) Fire/SOUL/CD válasza cellpeti (#817) üzenetére


Fire/SOUL/CD
félisten

Hali!

Semmi komolyra ne gondolj, "bármely" ciklus utasítást használhatod, mondjuk nagy variáció nincs, mert van a FOR, a WHILE, meg a DO-WHILE. A bármely szót azért tettem idézőjelbe, mert míg a FOR és WHILE előtesztelős ciklus utasítások(azaz a ciklusfeltétel kiértékelése a ciklusmag futattása elött történik), addig a DO-WHILE utótesztelős(ebben az esetben a ciklusmagban lévő programkód egyszer mindenképp lefut, és csak azután kerül kiértékelésre a ciklusfeltétel) ezért ezt körültekintően kell alkalmazni.

A hisztogramokat meg nagy általánosságban úgy lehetne meghatározni, hogy különbözö adatok, folyamatok, információk stb vizuális megjelenítése...
Egy oszlop diagram is hisztogram. De egy program működéséről is lehet hisztogramot készíteni, csak ott úgy nevezik hogy folyamatábra...
És persze számtalan különféle hisztogram létezik, amit felsorolni sem lehet, de Te is nap mint nap találkozol rengeteggel....

Fire.

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)

(#819) Devdi


Devdi
aktív tag

Sziasztok írtam a programozás fórumba is, de eleht hogy itt jobb helye van. Van ez a programom aminek annyi a lényege hogy kiírja a begépelt karakterek számát.
#include<stdio.h>
main()
{
double nc;
for(nc=0;getchar()!=EOF;++nc)
;
printf("%.0f\n",nc);
}
ezután gépelek gépelek és az a baj hogy nem tudom leállítani szóval nem tudom elérni azt hogy kiírja mennyi karaktert gépeltem be. Netbeanst használok ha ez segít. Valaki tudja a megoldást?

(#820) doc válasza Devdi (#819) üzenetére


doc
nagyúr

latom kozben megoldodott ;)

(#821) cellpeti válasza Devdi (#819) üzenetére


cellpeti
veterán

Windows alatt bármilyen C programot a Ctrl+Z kombinációval tudsz kikapcsolni/befejezni!

Ha ezt megtetted a program utánna kiírja,hogy mennyi a begépelt karakterek száma :U

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#822) djdemi


djdemi
csendes tag

sziasztok!

Kaptam egy beadandó feladatot, nem is tudom hogy kezdjek neki...ha valaki tudna segíteni megköszönném! Egy grafika feladtaról lenne szó...Íme:

Rajzolja meg és számolja ki egy m tömegű anyagi pont v0 kezdősebességű, φ0
emelkedési szögű ferde hajítás során befutott röppályát!

ha valaki tud segíteni ezzel kapcsolatban, írjon
Előre is köszi
hali!

(#823) cellpeti válasza djdemi (#822) üzenetére


cellpeti
veterán

Ez a feladat engem is érdekelne...
Hát mindenképp kellenek hozzá a matematika dolgok,ezért a header-eket úgy kell felvenni,ami a math.h-ba van benne,ha jól tudom. Valszeg kell majd valami,ahhoz is,hogy ki tud rajzolni a képernyőre ezt a görbét.

Bennem ne bízz,kezdő vagyok.

Fel kell venni m-et,v0-t és az emelkedési szöget,mivel a szög lehet tizedes,ezért a lebegőpontosan(float) kell felveni a változókat.

Ehhez persze nem árt ismerni,hogy alapba,hogyan lehet kiszámolni és tudni a képletet. Persze azt is megteheted/jük,hogy a képletet egy fv-be beírod és a főprogramba csak meghívod.

Ennyit tudok én segíteni. Ha baromságot írtam,akkor valaki javítson ki kérem!

Jó éjszakát mindenkinek!

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#824) cellpeti válasza djdemi (#822) üzenetére


cellpeti
veterán

Ezt lehet megint én értelemezem félre,hogy itt valamely mennyiséggel kell számolni,vagy csak a "sima" képeletet kell behelyettesíteni? :U
Mert én megtaláltam, a Ferde hajítás képleteit,a függvénytáblába,de ez nagyon nem egyszerű...és még finom voltam :W
Itt van egy feladat ferde hajításról,de ez Delphi-be van
A ferde hajítás képlete
Ferde hajításnál az ideális szög,ugye 45°

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#825) Fire/SOUL/CD válasza djdemi (#822) üzenetére


Fire/SOUL/CD
félisten

Hali!

Megoldható, nem olyan bonyolult aminek tűnik.
Engem viszont először az érdekelne, hogy milyen C környezetben dolgozol??? :DDD
(mi a program neve, amivel dolgozol, a grafikus megjelenítés szempontjából nem mindegy)

CellPeti
Amit adtál linkeket, azt ne használd, mert az egyik az egy "herélt" egyenletet tartalmaz, a másik meg(delphi), az meg hibás kódot...

Fire.

UI: mondjuk azt nem értem, hogy a tömeget minek adták meg... :F , nincs rá szükség a parabola kirajzolásához :N

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)

(#826) cellpeti válasza Fire/SOUL/CD (#825) üzenetére


cellpeti
veterán

:O :O

Milyen progival kéne neki állni Fire?
Az egyenletet be kell írni mindenképp vagy nem? :U

Tigris, tigris, csóvafény...

(#827) djdemi


djdemi
csendes tag

A ferdehajításos programot BorlandC környezetben kellene megcsinálni...
Sziasztok

(#828) djdemi


djdemi
csendes tag

sikerült a programot megírni, ha valakit érdekel...:)

#include <graphics.h>
#include <conio.h>
#include <math.h>

double pi =3.141592654;

double G =9.81;

int graph_open(void);

void main(void){

double v0,v0x,v0y; // *** a hajítás paraméterei
double alfa;
double y0;
double tt,tb,bx,by,tx,ty;
clrscr();
printf("Tesztadatok (100 [m/s],30 [fok], 20 [m]");
printf("\nKérem a kezdősebesség nagyságát! [m/s] >");
scanf("%lf",&v0);
printf("\nKérem a hajítás szögét! [fok] >");
scanf("%lf",&alfa);
printf("\nKérem a pont kezdőmagasságát! [m] >");
scanf("%lf",&y0);

printf("\n\nPress any key to continue:");
getch();

v0x=v0*cos(alfa*pi/180);
v0y=v0*sin(alfa*pi/180);

// A becsapodás adatai: idő, koordináták
tb=(v0y + sqrt( v0y*v0y + 2 * G * y0 ) ) /G;
bx=v0x*tb;
by=0;

// A tetopont elérésének adatai: idő, koordináták
tt=v0y/G;
tx=v0x*tt;
ty=(-G/2 * tt*tt + v0y * tt + y0);
printf("\n\nA becsapódás adatai:\n");
printf(" Ideje [tb] :%lf s\n",tb);
printf(" Távolsága [bx] :%lf m\n",bx);
printf("\n\nA tetőpont elérésének adatai:\n");
printf(" Ideje [tt] :%lf s\n",tt);
printf(" Koordinátái [tx,ty]:(%.4lf, %.4lf) m\n",tx,ty);

printf("\n\nPress any key to continue:");

getch();
if ( !(graph_open()) ) {
int i,j;
double t,lp;

if (bx/getmaxx()>ty/getmaxy())
lp=bx/getmaxx();
else
lp=ty/getmaxy();

// Az idő paramétereként fejezzük ki az x(t) és y(t) koordinátákat:
for (t=0;t<=tb;t+=tb/getmaxx()) {

// Pályaadatok:
i=floor(v0x*t/lp);
j=floor((-G/2*t*t+v0y*t+y0)/lp);

// Pályagörbe
putpixel(i,getmaxy()-j,YELLOW);

delay(20);
}

getch();
closegraph();
} else {
printf("BGI ERROR! >%i \n");
printf("\n\nPress any key to continue:");
getch();
}
}

int graph_open(void) {
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\borlandc\\bgi");
return(graphresult());
}

(#829) cellpeti válasza djdemi (#828) üzenetére


cellpeti
veterán

Hirtelen??? :U
Ha jó csak gartulálni tudok, nálam mondjuk nem fut le :W

Egy kis magyarázat jó lenne hozzá... :U

Tigris, tigris, csóvafény...

(#830) celeron


celeron
senior tag

Üdv mindenkinek!
OLyan problémám lenne, hogy Fedora 10-em van feltettem rá a Netbeans 6.1-et. C-ben akarok programozni és nem tudom használni az Atl billentyűt . Szal semmi írásjelet nem tudok írni. Valaki segítsen a problémán!!

(#831) Fire/SOUL/CD válasza djdemi (#828) üzenetére


Fire/SOUL/CD
félisten

Hali!

Hát nem tudom, honnan szedted ezt a progit, de ha működik akkor gratula! :(
Ha ezt a progit elfogadják, akkor remek suliba járhatsz.... :Y

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)

(#832) cellpeti


cellpeti
veterán

Sziasztok!

Létezik 64bites fejlesztő környezet C-hez? :U

Tigris, tigris, csóvafény...

(#833) blaces válasza celeron (#830) üzenetére


blaces
tag

Celeron: Pasz, én nem tudok segíteni ez ügyben, esetleg próbálkozz mással [CodeBlocks] ez Linuxon is elérhető.

Csak nem Debreceni Egyetem?

Cellpeti a fenti linken 64-bites linux változatot találsz a CodeBlocks-ból :))

[ Szerkesztve ]

(#834) Fire/SOUL/CD válasza cellpeti (#832) üzenetére


Fire/SOUL/CD
félisten

Hali!

Amiben biztosan lehet írn x64(meg még speciális x64) kódot, az a VisualStudio például.
[link]

Fire.

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)

(#835) cellpeti válasza Fire/SOUL/CD (#834) üzenetére


cellpeti
veterán

:R

Mind1 ám,mert a driverek,meg a viruskereső 64bites a notin,oszt az elég,de köszönöm!

Tigris, tigris, csóvafény...

(#836) celeron válasza blaces (#833) üzenetére


celeron
senior tag

De Debreceni Egyetem... :DDD

(#837) Dirty_Pio


Dirty_Pio
csendes tag

Sziasztok, volna egy problemam a kovetkezo feladatban :

#include <stdio.h>
#include <stdlib.h>
enum star_type{ MA,BIN,VAR};
typedef struct s{
char name[51];
enum star_type tp;
union star{
struct mai{
unsigned char type:2;
unsigned char age:2;
char color[11];
}m;

struct bin{
float r1;
float r2;
unsigned char t1:2;
unsigned char t2:2;
}b;
struct var{
float lowlmn;
float highlmn;
float period;
}v;
}u;
}stars;
int main(void){
enum star_type a;
int n,i;
stars *x=malloc(sizeof(stars)*10);
printf("which type of definition would you like to use for the stars?\n");
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
for (i=0;i<n;i++){
switch (a){
MA:
scanf("%50s",x.name);
x.tp=a;
scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
for (i=0;i<n;i++)
switch (x.tp){
MA:
printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
system("pause");
return(0);
}

nos, azt az errort adja, hogy name is not a struct or union. Probaltam siman csak egy valtozoba beolvasni az elemeket de ugy meg amikor a unionba akarok olvasni akkor szepen elmegy vegtelenbe, szoval nem igazan tudom mihez kezdjek.

(#838) Dirty_Pio válasza Dirty_Pio (#837) üzenetére


Dirty_Pio
csendes tag

Kozbe reajottem egy-ket hibara szoval az uj kod mar igy nez ki

#include <stdio.h>
#include <stdlib.h>
enum star_type{ MA,BIN,VAR};
typedef struct {
char name[51];
enum star_type tp;
union star{
struct mai{
unsigned char type:2;
unsigned char age:2;
char color[11];
}m;
struct bin{
float r1;
float r2;
unsigned char t1:2;
unsigned char t2:2;
}b;
struct var{
float lowlmn;
float highlmn;
float period;
}v;
}u;
}stars;
int main(void){
enum star_type a;
int n,i;
stars *x=(stars *)malloc(sizeof(stars)*10);
printf("which type of definition would you like to use for the stars?\n");
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
for (i=0;i<n;i++){
switch (a){
MA:
scanf("%50s",x.name);
x.tp=a;
scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
scanf("%50s",x.name);
x.tp=a;
scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
for (i=0;i<n;i++)
switch (x.tp){
MA:
printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
break;
BIN:
printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
break;
VAR:
printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
break;
default break;
};
system("pause");
return(0);
}

de meg mindig nem megy :)

(#839) Jester01 válasza Dirty_Pio (#838) üzenetére


Jester01
veterán

1) Nem tudom, hogy az [ i ] indexeket a fórum nyelte-e be, de ha nem akkor hiányzanak ;)
2) ha ragaszkodsz a bitmezőkhöz, az megbonyolítja a beolvasást. Én inkább kidobtam őket
3) a switch-ben kimaradtak a case kulcsszavak.
4) a default után is kell kettőspont, de a default: break konstrukciónak nincs sok értelme, olyan mintha ott sem lenne
5) becsúszott egy bezáratlan kapcsos zárójel
6) a %c formátum nem ugorja át a szóközt (whitespace) ilyenkor explicit kell egy szóköz
7) a scanf-nek pointer kell, hiányzik egy pár & jel

Ez itt patch, hogy jobban látszódjon a módosítás.

--- t.c.orig 2009-03-11 22:10:54.000000000 +0100
+++ t.c 2009-03-11 22:37:13.000000000 +0100
@@ -7,15 +7,15 @@
enum star_type tp;
union star{
struct mai{
- unsigned char type:2;
- unsigned char age:2;
+ unsigned char type;
+ unsigned char age;
char color[11];
}m;
struct bin{
float r1;
float r2;
- unsigned char t1:2;
- unsigned char t2:2;
+ unsigned char t1;
+ unsigned char t2;
}b;
struct var{
float lowlmn;
@@ -32,37 +32,35 @@
scanf("%d",&a);
printf("How many stars?(max 10)\n");
scanf("%d",&n);
- for (i=0;i<n;i++){
+ for (i=0;i<n;i++)
switch (a){
- MA:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%c %c %s",x.u.m.type, x.u.m.age, x.u.m.color);
- break;
- BIN:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%f %f %c %c",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
- break;
- VAR:
- scanf("%50s",x.name);
- x.tp=a;
- scanf("%f %f %f",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
+ case MA:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf(" %c %c %s",&x[i].u.m.type, &x[i].u.m.age, x[i].u.m.color);
+ break;
+ case BIN:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf("%f %f %c %c",&x[i].u.b.r1,&x[i].u.b.r2,&x[i].u.b.t1,&x[i].u.b.t2);
+ break;
+ case VAR:
+ scanf("%50s",x[i].name);
+ x[i].tp=a;
+ scanf("%f %f %f",&x[i].u.v.lowlmn,&x[i].u.v.highlmn,&x[i].u.v.period);
break;
- default break;
};
for (i=0;i<n;i++)
- switch (x.tp){
- MA:
- printf("%c %c %s\n",x.u.m.type, x.u.m.age, x.u.m.color);
+ switch (x[i].tp){
+ case MA:
+ printf("%c %c %s\n",x[i].u.m.type, x[i].u.m.age, x[i].u.m.color);
break;
- BIN:
- printf("%f %f %c %c\n",x.u.b.r1,x.u.b.r2,x.u.b.t1,x.u.b.t2);
+ case BIN:
+ printf("%f %f %c %c\n",x[i].u.b.r1,x[i].u.b.r2,x[i].u.b.t1,x[i].u.b.t2);
break;
- VAR:
- printff("%f %f %f\n",x.u.v.lowlmn,x.u.v.highlmn,x.u.v.period);
+ case VAR:
+ printf("%f %f %f\n",x[i].u.v.lowlmn,x[i].u.v.highlmn,x[i].u.v.period);
break;
- default break;
};
system("pause");
return(0);

Jester

(#840) Dirty_Pio válasza Jester01 (#839) üzenetére


Dirty_Pio
csendes tag

Koszi. Meg volna egy kerdesem : mivel olvassam be az adatokat, mert a scanf elcseszi nekem eleg rendesen, mivel a buffert szepen betologatja az adatok helyere es nincs igazan semmi 5letem mit hasznaljak helyette, mar azon kivutl johu irok egy fuggvenyt ami szepen beolvassa a getchar() ral a neveket meg a kulonbozo szovegeket. Akkor mukodne ha csak a scanf() -el a szamokat olvasnam be?

(#841) Jester01 válasza Dirty_Pio (#840) üzenetére


Jester01
veterán

Tudsz mutatni konkrét példát? Biztos, hogy nem a 6)-os pont miatt van?

Jester

(#842) Davey7


Davey7
senior tag

Valaki tudna nekem segíteni?

Most kezdtük a C-t tanulni és van pár beadandó és hát még nem igazán értek a programozáshoz...

Itt vannak a feladatok. Az első 3at megoldottam,de a 4.-5.el nem bírok. Igazából az algoritmussal van a gondom,hogy hogyan kéne nekilátni és mit miután csinálni.
Az első 3nál egy kis segítséggel és sok fejtöréssel rájöttem,de ezek nem mennek.

[ Szerkesztve ]

(#843) cellpeti válasza Davey7 (#842) üzenetére


cellpeti
veterán

látom,sehol nem kímélik a diákot... :U

Tigris, tigris, csóvafény...

(#844) Jester01 válasza Davey7 (#842) üzenetére


Jester01
veterán

4) például bevezetsz index, max és lépés változókat. Az index mutatja, hol állsz az abcben, a max, hogy meddig, az irány pedig, hogy éppen merre (le/fel=-1/+1). Csinálsz egy külső ciklust, ami a kívánt kiírandó karakterszámig fut. A cikluson belül kiírod az aktuális karaktert, majd a lépés hozzáadásával mész a következőre. Ellenőrzöd nem ütköztél-e az intervallum alsó vagy felső határába és ha igen, akkor a lépést megfordítod és az aktuális indexet korrigálod. A betűk kiírásához felhasználhatod, hogy az ascii kód éppen az angol abc szerint van sorban, vagy alkalmazhatsz egy konstans stringet amiből kinézed a betűket.

5) ezzel nem tudom mi a probléma, elég szájbarágósan le van írva. Csinálsz egy függvényt, ami ellenőrzi, hogy a szám prím-e. Erre az egyszerű favágó megoldás gondolom teljesen jó lesz, miszerint végignézed osztható-e valamivel. A főprogram pedig a feladatkiírásnak megfelelően jár el.

Jester

(#845) kokogab


kokogab
csendes tag

Sziasztok nekem is lenne egy beadandó házim és nem nagyon boldogulok vele.
Ha tudnátok benne segíteni az nagyon jó lenne. Köszi

Egy gépalkatrész, mint merev test mozgását három, koordinátáival adott pontja mozgásával szemléltetjük. Mutassa be e háromszög adott forgáspont körüli forgásának helyzeteit 15º-os eltérésekkel! A három pont és a forgáspont koordinátáit előzetesen billentyűzetről adjuk meg!

(#846) MadBlade


MadBlade
tag

Sziasztok !

Nem tudom jó helyen érdeklődöm e , de megpróbálom :D ...
Az lenne a problémám , hogy szerettem volna készíteni egy toolbar-t a ToolbarStudio nevű programmal , és mikor elkészítette a telepítő csomagot , csinált egy .exe illetve egy .cab filet ... namármost az exe felteszi az alapprogramot (ami maga a szinte üres sablon) , de a tartalmát a .cab file nélkül (amiben az összes változást és alkotóelemet tárolja) nem teszi fel ...
Van valami sejtésetek hogy az önkicsomagoló exe filba (amelybe a license fájl viszont beletette) miért nem ágyazta be vajon a .cab filet illetve annak tartalmát ?

Előre is köszönöm a segítő hozzászólásokat !

Üdvözlettel: Mad

Ha azért vagyunk hogy segítsünk másokon , akkor minek vannak mások?! :0 )

(#847) Tv válasza kokogab (#845) üzenetére


Tv
senior tag

Üdv! Másold be a forráskódot, ami eddig készen van, úgy könnyebben tud segíteni, aki ért a témához :K

(#848) vassgaby89


vassgaby89
csendes tag

nekem csak 1 egyszerű probémám van egyelőre (még csak most kezdtem a C-t)

hogy tudok beolvastatni 2 változót úgy,h köztük szóköz van ? (házifeladat,és beadás után a tesztprogram standard input-t ad,amihez aklakmazkodnia kell a proginak)

mert " scanf("%d %d", &szam1, &szam2); " -re szegmentálási hibát kapok
(tom vmi olyasmi a gond,h a scanf csak whitespace-ig olvas,v mi)

előre is köszi

(#849) vassgaby89


vassgaby89
csendes tag

és itt van 1 kis progi prím megállapításáról,mégsem műxik jól :S

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int szam,i,osztok;

scanf("%d", &szam);

for (i = 1; i <= szam; i +=1)
if (szam % i == 0) (osztok += 1);

printf("%d\n", osztok);

if (osztok == 2) printf("%d\n",szam);
else printf("nem prim\n");

return EXIT_SUCCESS;
}

(#850) doc válasza vassgaby89 (#849) üzenetére


doc
nagyúr

az osztok inicializatlan, igy az erteke veletlenszeru, vagyis a megoldas:

int szam,i,osztok=0;

amugy a program jo, bar felesleges 1-tol a szamig menni, eleg ha elindulsz hogy 2-tol sqrt(szam)-ig, es ha addig nem talalsz osztot, akkor prim, ha igen, akkor nem az (es abba is lehet hagyni a tovabbi szamolgatast)

[ Szerkesztve ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.