Új hozzászólás Aktív témák
-
VaZso
senior tag
válasz Jester01 #1601 üzenetére
Értem, ill. jól gondoltam...
Azért nem tudom előre a hosszát, mert egy fileból olvasom ki az értékeket.Annak sem lenne sok értelme, ha globális szinten tárolnám egy változóba, mert listák közül is lehet akármennyi.
Ez lett belőle:
int ptLen(char **data) {
if (!data)
return 0;
int i=0;
while (data[++i])
;
return i-1;
} -
3man
csendes tag
Ezt fejtettem ki lentebb, csak valami miatt nem erti, miert akarunk mi raeroltetni struct-ot, mikor o csak egy char * -ot akar hasznalni.
Ezert jobb lenne c++ ban kezdeni, mert kisse mas es celravezetobb gondolkodasmod alakul ki.
Ott letrehozhatsz egy olyan osztalyt, amit te a "char *" helyett fogsz MINDENUTT hasznalni. Ez letarolhatja az aktualis meretet a stringnek, lehet operatorokat letrehozni, amelyek segitsegevel ugyan ugy kezelheted a valtozot, mintha char * lenne. Amikor a program a data [index] utasitashoz er, akkor meghivodik az osztaly [] operatora, amit te barhogy megirhatsz. Ellenorizheted, hogy az index nem negativ, es az eppen aktualis string mereten belul van vagy nem. Messze hatekonyabb lesz a program, es biztonsagosabb.De mar megint OFF voltam.
[ Szerkesztve ]
-
Echo2211
csendes tag
Sziasztok!
ANSI C-ben kellene megírnom egy kezdő szintű programot, de ehhez túl szerények az ismereteim. Itt kicsit hosszadalmas lenne leírni a feladatot, így inkább privátban küldeném el egy hozzáértőnek.
Ha valaki tudna nekem segíteni, nagyon hálás lennék! (Életmentés esete forog fenn! )
Köszi előre is!
-
TrakToros
csendes tag
Sziasztok!
Volna 1 feladat amit meg kellene oldanom, de sajnos nem vágom a C-t és a bash-t se nagyon 3 napja kínlódom vele, de nem jutottam sokra google-val sem Hosszúnak tűnik, de aki ért hozzá nem hiszem, hogy nehéz lenne, ezért könyörgöm valaki csinálja meg nekem, fontos lenne."Írjon C programot, amely elvégez egy muveletet több szálon, üzenetsoron keresztüli IPC segítségével.
A program dolgozza fel a bemeno paramétereket és a "-t" opcióval megadott számot tárolja el, mint a
létrehozandó szálak számát.
A szülo processzbol inditsunk annyi szálat amennyit a -t kapcsolóval megadtunk. Tartsuk nyilván a szálak indexét, amit 1-tol számoljunk. Készítsünk egy üzenetsort IPC_PRIVATE kulccsal.A szülo processz a következo feladatokat lássa el:
Olvasson be két egész számot a standard inputról és küldje el azokat az üzenetsorra az összes szál számára. (Minden számot külön sorban kérjen be.) A szülo ezek után várja meg a szálak muveleteinek eredményét (amik bool értékek lesznek) majd keresse meg a legmagasabb szál-indexu igaz értéket, és ezt az indexet írja ki a standard outputra.A szálak a következo muveletet hajtsák végre:
Minden szál olvassa ki a szülotol kapott két számot az üzenetsorrol, és ossza el mindekettot a saját szál indexével (1-tol számozódik).
Ha az eredmény maradék nélkül osztható mindkét szám esetében, az eredmény legyen igaz, különben hamis.
Az eredményt küldjük el a szölo processz számára az üzenetsoron keresztül.
Ne felejtsük el a szálakat összevárni a gyerek processzben (pthread_join használatával).A kommunikációhoz az üzenetsort használjunk és küldjünk annyi üzenetet amennyi szükséges. Az üzenet soron kívül más IPC módszert ne használjunk. Az üzenetsor kulcsa IPC_PRIVATE legyen.
A program paraméterei:
A program ellenorizze a paramétereket és ha a paraméterek között
szerepel "-h", akkor írja ki a program m.ködését. Ha a paraméterek
között szerepel a "-t" kapcsoló, akkor a következ. paramétert
alakítsa számmá, ez lesz létrehozandó a szálak száma. (használat
pl: run.sh -t 3)
(A program számolja ki a standard inputon megadott 2 szám legnagyobb közös osztóját a megadott határig.) "Előre is köszönöm szépen! (szerencsére csak most az 1x kaptam ilyen feladatot)
Vasárnap reggelre kellene. Még1x köszönöm előre is. (És bocs, hogy az egész "karotokat" akarom )[ Szerkesztve ]
A traktorosok,kombájnosok jó emberek:)
-
Dead_slow
tag
Üdv!
Elég kezdő vagyok programozás témában, az alábbi feladat megoldásában kellene segítség, csak egy feltétel kell bele, de már fáradt vagyok és nagyon tompa, valszeg rettenet triviális a megoldás, ezért ne röhögjetek ki
Szóval a feladat: Egy sakktbálára bábokat helyezünk el. Programunk kirajzolja a táblát, majd bekér egy lépésszámot. Ezután minden bábot a lépésszámnak megfelelő számú mezővel előre léptet(nagyobb sorszámú sorok felé), majd újra kirajzolja a táblát. A tábláról lelépő figurák természetesen nem kell kirajzoli.
Nekem ezzel van gondom, ha túl nagy lépésszámot adok meg akkor átlép egy következő oszlopba.
Eddig jutottam
#include<stdio.h>
#include<stdlib.h>
char tabla[10][10];
int sor,oszlop,lep;
char imp[3];
void init(){
for(sor=0;sor<9;sor++){
for(oszlop=0;oszlop<9;oszlop++)
tabla[sor][oszlop]=' ';
}
}
void lerak(){
char babu;
do{
printf("Kerem a babut es a poziciojat pl.:(Ha1): ");
scanf("%s",imp);
babu=imp[0];
oszlop=imp[1]-'a';
sor=imp[2]-1-'0';
if(imp[0]!='*')
tabla[oszlop][sor]=babu;
}while(imp[0]!='*');
}
void rajzol(){
int i,j;
printf("\n ");
for(i=0;i<8;i++)
printf("%c ", 'A'+i);
printf("\n");
for(i=0;i<8;i++){
printf("%d ", i+1);
for(j=0;j<8;j++)
printf("|%c", tabla[j][i]);
printf("|\n");
}
}
void leptet(){
int i,j,k;
k=0;
printf("lepeszsam:");
scanf("%d",&k);
printf("\n ");
for(i=0;i<8;i++)
printf("%c ", 'A'+i);
printf("\n");
for(i=0;i<8;i++){
printf("%d ", i+1);
for(j=0;j<8;j++)
printf("|%c", tabla[j][i-k]);
printf("|\n");
}
}
int main(){
init();
lerak();
rajzol();
leptet();
system("PAUSE");
return 0;
}[ Szerkesztve ]
-
Gyuri16
senior tag
válasz Dead_slow #1609 üzenetére
ebben a sorban van a hiba:
printf("|%c", tabla[j][i-k]);
ha k>i akkor nem lesz jo. ha pl j=2, i=2, k=3 akkor tabla[2][-1] lesz az eredmeny ami a tabla[1][9] re fog mutatni, ezert lehet hogy mas oszlopba lep at. tehat eleg ele tenni egy ifet, es ha k>i akkor ures helyet rajzolni odaNem vagyok egoista, csak uborkagyalu!
-
Dead_slow
tag
válasz Gyuri16 #1610 üzenetére
Köszönöm, a fáradtság úgy néz ki legyőzött. Így már minden szép és jó.
void leptet(){
int i,j,k;
k=0;
printf("lepeszsam:");
scanf("%d",&k);
printf("\n ");
for(i=0;i<8;i++)
printf("%c ", 'A'+i);
printf("\n");
for(i=0;i<8;i++){
printf("%d ", i+1);
for(j=0;j<8;j++){
if(k>i)
printf("|%c",tabla[' '][' ']);
else
printf("|%c",tabla[j][i-k]);
}
printf("|\n");
}
} -
Gyuri16
senior tag
válasz Dead_slow #1611 üzenetére
eleg erdekes dolgot irtal, nem egeszen ertem mit akartal ezzel a sorral:
printf("|%c",tabla[' '][' ']);
ha jol gondolom (ha nem akkor valaki javitson ki) az tortenik hogy a ' ' atvaltozik szamra (32) es azzal indexeled a tombot, es kiirsz valamit, rosszabb esetben megfagy a program mert olyan helyre nyulkalsz ahova nem szabadna.
en siman kiiratnak egy "| "-t igy:
printf("| ");Nem vagyok egoista, csak uborkagyalu!
-
Gyuri16
senior tag
válasz Dead_slow #1613 üzenetére
de a te megoldasod nalam "|"-t ir ki "| " helyett az elso sorokban, azon kivul nem korrekt (ha beadando akkor pontlevonas).
kicsit jatszottam vele es sikerult rossz helyzetet eloidezni. a kododba raktam egy masik tombot ami pont akkora hogy a tabla[32][32](ami a tabla[' '][' ']) cim benne legyen, es arra a cimre raktam egy 'x' jelet. itt a forraskod reszlete (abban nem vagyok biztos, hogy ez most nalad is mukodni fog e igy, nem tudom pontosan hogyan foglalja le a memoriat, eloszor az en tombomet a tabla ele rakta, vegul sikerult ravennem, hogy utana tegye):char tabla[10][10];
char kuk2[225];
int sor,oszlop,lep;
char imp[3];
void init(){
for(sor=0;sor<9;sor++){
for(oszlop=0;oszlop<9;oszlop++)
tabla[sor][oszlop]=' ';
}
kuk2[224]='x';
}ezen kivul minden olyan mint amit te irtal. itt a kimenet:
gyuri@TGyuri:~/phprogs$ gcc -o sakk sakk.c && ./sakk
Kerem a babut es a poziciojat pl.:(Ha1): Ha1
Kerem a babut es a poziciojat pl.:(Ha1): *
A B C D E F G H
1 |H| | | | | | | |
2 | | | | | | | | |
3 | | | | | | | | |
4 | | | | | | | | |
5 | | | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |
lepeszsam:4
A B C D E F G H
1 |x|x|x|x|x|x|x|x|
2 |x|x|x|x|x|x|x|x|
3 |x|x|x|x|x|x|x|x|
4 |x|x|x|x|x|x|x|x|
5 |H| | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |amint latod kiirta az x-et a masik tombbol. ez egy nagyobb projektnel ahol tobb valtozod van elofordulhat ilyen ugyeskedes nelkul is
Nem vagyok egoista, csak uborkagyalu!
-
Dead_slow
tag
válasz Gyuri16 #1614 üzenetére
Köszönöm, a kiegészítést/magyarázatot!
Már az előző hozzászólás után módosítottam a kódot, nem rég kezdtem el foglalkozni a dologgal, mármint nem a C nyelvvel, hanem az egész programozás témával remélem azért később jobban fog menni és nem okoz majd ekkora nehézséget egy ilyen egyszerűbb program megírása. -
Dead_slow
tag
Üdv!
Újabb problémám lenne, ezúttal a feladat a következő:
Egy NxN-es méretű négyzetrácsos táblára bábokat helyezünk el, egy mezőre maximum egyet. A program bekéri a tábla méretét, majd egyenként a bábok pozicioját (pl.3). Az utolsó báb után egy x karaktert ütünk.
A program ezután kijelzi a táblát, valamint minden sorhoz és oszlophoz kijelzi az ott található bábok számát (a nullát nem kell kiírni).#include<stdio.h>
int i,j,sorszum,oszlopszum,meret;
char tabla[40][40];
char imp[2];
void init(){
for(i=0;i<meret;i++){
for(j=0;j<meret;j++){
tabla[i][j]=' ';
}
}
}
void beker(){
do{
printf("Kerem a tabla meretet: ");
scanf("%d",&meret);
printf("Kerem a babu poziciojat:");
scanf("%s",imp);
if(imp[0]!='x')tabla[imp[1]-'1'][imp[0]-'A']='x';
}while(imp[0]!='x');
}
void rajzol(){
printf("\n ");
for(i=0;i<meret;i++)
printf("%c ", 'A'+i);
printf("\n");
for(i=0;i<meret;i++){
printf("%2d", i+1);
for(j=0;j<meret;j++){
if(tabla[i][j]==' ')
printf("| ");
else{
sorszum++;
printf("|%c",tabla[i][j]);
}
}
printf("|");
if(sorszum>0) printf(" %d",sorszum);
sorszum=0;
printf("\n");
}
printf("\n ");
for(j=0;j<meret;j++){
oszlopszum=0;
for(i=0;i<meret;i++){
if(tabla[i][j]=='x'){
oszlopszum++;
}
}
if(oszlopszum>0) printf("%d ", oszlopszum);
else printf(" ");
}
printf("\n");
}
int main(){
init();
beker();
rajzol();
system("PAUSE");
return 0;
}Akármit csinálok az sorok végén mindig a bekért tábla méret jelenik meg az x-ek száma helyett. Mi lehet a gond?
-
Gyuri16
senior tag
válasz Dead_slow #1616 üzenetére
1, initet akkor hivd meg, amikor mar beolvastad a meretet (beker()-ben a scanf(...meret) utan, es aztan a mainbol kikell venni az initet)
2, beker()-ben a do ciklus eleg ha a printf("Kerem a babu poziciojat:"); elott kezdodik (meretet eleg egyszer beolvasni)ezeket kijavitva nalam mukodik
Nem vagyok egoista, csak uborkagyalu!
-
Dead_slow
tag
Üdv!
Újabb problémával jelentkezem, feladat következő:
Írjon cenzúrázó programot. A program beolvas egy mondatot, majd egy tiltott karaktersorozatot. A mondatban kicseréli a karaktersorozat minden előfordulását 3 csillag karakterre(cenzúrázott szó helyett 3 csillagot rajzol). Végül kiírja a cenzúrázott mondatot.A feladat megoldása során csak gets, scanf, és a printf függvények használhatók. NEM szabad előre megírt stringkezelő függvényeket használni.
Szokás szerint elkezdtem megírni , de ezt a részt hogy a beolvasott tiltott szó helyére 3 csillagot tegyen nem tudom megcsinálni, megírtam úgy hogy minden karakterét a szónak csillagra cseréli, de ez ugye így nem jó.
#include <stdio.h>
int main(){
int i,j,szohossz,mondathossz;
char szo[20],mondat[100];
printf("mondat:");
gets(mondat);
printf("szo:");
scanf("%s", szo);
i=0;
while(szo[i]!=0){
i++;
}
szohossz=i;
i=0;
while(mondat[i]!=0){
i++;
}
mondathossz=i;
for(i=0;i<=mondathossz-szohossz;i++){
for(j=0;j<szohossz;j++){
if(szo[j]!=mondat[i+j])
break;
}
if(j==szohossz){
for(j=0;j<szohossz;j++){
mondat[i+j]='*';
}
i=i+szohossz-1;
}
}
printf("%s\n", mondat);
system("PAUSE");
return 0;
}Köszönöm
-
Gyuri16
senior tag
válasz Dead_slow #1619 üzenetére
azon a ponton amikor mar tudod, hogy cenzurazni kell, kovetkezot csinalod:
-ha szohossz < 3 akkor odebbtolod* a string tobbi reszet annyi hellyel jobbra, hogy beferjen a 3 csillag
-ha szohossz >= 3 akkor odairsz 3 csillagot es szohossz-3al balra tolod a maradek szoveget* odebbtolas azt jelenti, hogy minden egyes betut x hellyel odebb masolsz. vigyazni kell, hogy a string eleg nagy legyen. mivel tobb hellyel kell mozgatni hatulrol kezdenem, tehat ha pl jobbra kell eltolni, akkor eloszor az utolso elemet tennem x hellyel jobbra, aztan az utolso elottit, stb. ha pedig ballra akkor eloszor az elsot.. meg nem art odafigyelni, hogy a string veget jelzo 0at is masold. (ajanlom fuggvenykent megirni, hogy tudd egyszeruen kulon tesztelni)
Nem vagyok egoista, csak uborkagyalu!
-
Gabessss
csendes tag
Sziasztok!
Én segítséget kérnék C programozáshoz,nem nagyon értek hozzá és be kell adnom egy megírt c programot a suliba nagyon örülnék ha valaki tudna nekem ebben segíteni.
az msn címem:gabeeee1@hotmail.com
előre is köszönöm -
Dirty_Pio
csendes tag
Sziasztok, van egy kis problemam a listakkal c -ben. Nem a hagyomanyos pointeres modon szeretnem megoldani a feladatot, azaz letrehozni egy listat es kivenni, beletenni elemeket es kiiratni, hanem a kurzoros megoldassal, amikor egy listat vektor segitsegevel szimulalsz. Itt jon a kod:
#include <stdio.h>
#include <stdlib.h>
#define maxlen 100
typedef char tipcursor;
typedef int tipnod;
typedef struct tipelem{
tipnod element;
tipcursor next;
}tipelement;
typedef tipcursor tiplista;
void init(tipelement z[maxlen])
{
int i;
for (i=0;i<maxlen-1;i++)
z[i].next=i+1;
z[maxlen].next=-1;
}
tiplista add(tiplista *d,tiplista p,tipelement z[maxlen],tipnod e)
{
if (p==-1) {
p=*d;
z[*d].element=e;
*d=z[*d].next;
z[p].next=-1;
}
else{
tipcursor k=p;
while ((z[k].element<e)&&(k!=-1)&&(z[k].next!=-1))
{
k=z[k].next;
}
tipnod temp;
while (k!=-1)
{
temp=z[k].element;
z[k].element=e;
e=temp;
if(-1==(k=z[k].next)) z[k].next=*d;
}
z[*d].element=e;
temp=*d;
*d=z[*d].next;
z[temp].next=-1;
}
return p;
}
void list(tiplista s,tipelement z[maxlen])
{
while (s!=-1)
{
printf("%i ",z[s].element);
printf("%i ",z[s].next);
s=z[s].next;
}
}
int main(void)
{
tipelement zona[maxlen];
tiplista l=-1,m=-1,*disp;
disp=(tiplista*)malloc(sizeof(tiplista));
*disp=0;
init(zona);
l=add(disp,l,zona,16);
l=add(disp,l,zona,5);
list(l,zona);
l=add(disp,l,zona,41);
list(l,zona);
return 0;
}Nos a problemam az, hogy a program nem helyezi jol be az elemeket a helyukre, azaz miutan betettem a 16-ost utana az o helyere teszi az 5-t, de nem tolja arrebb a 16-t, pedig az add fuggvenybe minden jol megy, csak kiirataskor mar nem oks a lista.
Elore is koszonom.
[ Szerkesztve ]
-
Jester01
veterán
válasz Dirty_Pio #1622 üzenetére
Már az init függvényedben is van egy túlcímzés z[maxlen].next=-1; .
Az add függvényben sem "megy minden jól": if(-1==(k=z[k].next)) z[k].next=*d; Továbbá a temp változót két típusként is használod, egyszer tipnod egyszer meg tiplista. Ezeket javítva látszólag működik a kód, bár a typedef char tipcursor; igen szerencsétlen választás mivel nem tudhatod előjeles vagy nem. Márpedig ha nem az, akkor -1 sose lesz és végtelen ciklusba kerül a program.Láncolt listába beszúráskor amúgy nem kellene az elemeket másolgatni.
Jester
-
Agger
csendes tag
Üdv mindenkinek! Segítség kellene, sajnos még csak kezdő vagyok. Ez lenne a feladat: Billentyűzetről bekért tankörlétszám és zárthelyi eredmények ismeretében meg kell határozni, hogy a különféle osztályzatokból hány darab született, valamint a tankörátlagot. Az eredményeket írassa ki! Ez egy zh feladat, addig eljutottam, hogy bekérem a jegyeket, de sehogy se akar összejönni a különböző jegyek megszámolása, ez lenne a kérdésem, hogy ezt, hogy kell csinálni? Előre is kösz a segítséget
-
Dead_slow
tag
Üdv!
Ismét kérdéssel fordulnék a topik olvasóihoz, a feladat a következő lenne:
Egy egyszerű teleknyilvántartó programot készítünk téglalap alakú telkek kezelésére. A program bekéri a telkek számát, majd bekéri és eltárolja a telkek helyrajzi számát, a tulaj nevét, telek hosszát és szélességét. Ezután a program kiírja azon telek vagy telkek adatait, amelyeknél a legnagyobb a hossz és a szélesség különbsége.
Eddig jutottam, meghatározza a legnagyobb szélesség-hosszúságú és hosszúság-szélességű tel(ke)ket, csak nem tudom, hogy tudnám rávenni, hogy ahhoz/azokhoz az érték(ek)hez tartozozó mezőket írja ki.
#include<stdio.h>
#include<stdlib.h>
struct telek{
char nev[41];
char hely[41];
int hossz, szeles, kulonb;
};
struct telektar{
int db;
struct telek *telkek;
};
void lefoglal(struct telektar *ft){
printf("Kerem a telkek szamat:");
scanf("%d",&(*ft).db);
(*ft).telkek=(struct telek*)malloc(sizeof(struct telek)*(*ft).db);
}
void beker_telek(struct telek *t){
printf("Tulaj neve: \n");
scanf("%s",(*t).nev);
printf("Helyrajziszam: \n");
scanf("%s",(*t).hely);
printf("Hosszusag: \n");
scanf("%d",&(*t).hossz);
printf("Szelesseg: \n");
scanf("%d",&(*t).szeles);
}
void beker_telektar(struct telektar *tt){
int i;
for(i=0;i<(*tt).db;i++){
beker_telek(&(*tt).telkek[i]);
}
}
void listaz(struct telektar *lt){
int i,j,max;
for(i=0;i<(*lt).db;i++){
if((*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles>0){
(*lt).telkek[i].kulonb=(*lt).telkek[i].hossz-(*lt).telkek[i].szeles;
printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
}
else{
(*lt).telkek[i].kulonb=(*lt).telkek[i].szeles-(*lt).telkek[i].hossz;
printf("kulonbseg: %d\n",(*lt).telkek[i].kulonb);
}
}
max=0;
for(j=0;j<(*lt).db;j++){
if(max<(*lt).telkek[j].kulonb){
max=(*lt).telkek[j].kulonb;
}
}
printf("legtorzabb telek: %d",max);
}
void felszabadit(struct telektar *ft){
free((*ft).telkek);
(*ft).telkek=NULL;
}
int main(){
struct telektar b;
lefoglal (&b);
beker_telektar (&b);
listaz (&b);
felszabadit (&b);
return 0;
}[ Szerkesztve ]
-
Jester01
veterán
válasz Dead_slow #1626 üzenetére
Mivel a legnagyobb különbséget már megtaláltad így semmi más dolgod nincs mint mégegyszer végigmenni a telkeken és kiírni azon telkek jellemzőit amiknél a különbség megegyezik a maximummal. (A feladatkiírás szerint több is lehet, különben elég lenne az első ciklusban egyszerűen megjegyezni az elem indexet is.)
Jester
-
Dead_slow
tag
válasz Jester01 #1627 üzenetére
Köszönöm, ezzel a kiegészítéssel a listaz függvény végére már tökéletesen működik:
int k;
for(k=0;k<(*lt).db;k++){
if(max==(*lt).telkek[k].kulonb){
printf("legtorzabb tel(k)ek:\nHelyrajziszam:%s\nTulajdononsa:%s\n Szelessege:%d\n Hosszusaga:%d\n ",(*lt).telkek[k].hely,(*lt).telkek[k].nev,(*lt).telkek[k].hossz,(*lt).telkek[k].szeles);
} -
Retekegér
HARDVERAPRÓD
Hogyan tudom kiíratni egy tömb elemeit sorbarendezés után?
<< Heimdal >>
-
Karma
félisten
válasz Retekegér #1631 üzenetére
Arra meg ott a printf függvény, első paraméterében megadhatod a kiírás formátumát (én pl. semmit se tudok jelenleg a tömböt elemeinek típusáról ), utána pedig a többi paraméterben a változókat adhatod meg.
Pl. egy egészeket tartalmazó array nevű tömbre (l elemű), soronként egy érték:
int i;
...
for (i = 0; i < l; i++)
{
printf("%d\n", array[i]);
}“All nothings are not equal.”
-
Retekegér
HARDVERAPRÓD
Akkor talán máshol lesz a bibi, ennek a tömbnek az elemeit szeretném kiíratni:
#include <stdio.h>
#include <stdlib.h>
#define SZAM 12
main ()
{
int i, x;
int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
int ismetles=1;
printf("12 elemu tomb rendezese\n");
while (ismetles)
{
ismetles=0;
for (i=0; i<SZAM-1; i++)
{
if (tomb[i]>tomb[i+1])
{
x=tomb[i];
tomb[i]=tomb[i+1];
tomb[i+1]=x;
ismetles=1;
}
}
}
printf("A sorba rendezett tomb: %d\n", tomb[i]);
system("pause");
return 0;
}<< Heimdal >>
-
Retekegér
HARDVERAPRÓD
Okés, kicsit figyelmetlen voltam és rossz helyre raktam be a return-t, így már műxik:
#include <stdio.h>
#include <stdlib.h>
#define SZAM 12
main ()
{
int i, x;
int tomb[SZAM]={4,3,6,7,1,0,9,2,4,8,5,7};
int ismetles=1;
printf("12 elemu tomb rendezese\n");
while (ismetles)
{
ismetles=0;
for (i=0; i<SZAM-1; i++)
{
if (tomb[i]>tomb[i+1])
{
x=tomb[i];
tomb[i]=tomb[i+1];
tomb[i+1]=x;
ismetles=1;
}
}
}
for (i=0; i<SZAM; i++)
{
printf("A sorba rendezett tomb: %d\n", tomb[i]);
}
printf("\n");
system("pause");
return 0;
}Thx a segítségért!
<< Heimdal >>
-
Retekegér
HARDVERAPRÓD
válasz Sk8erPeter #1637 üzenetére
Azon már túlléptem, viszont a ciklus beiktatása után így nézett ki a program:
for (i=0; i<SZAM; i++)
{
printf("A sorba rendezett tomb: %d\n", tomb[i]);
system("pause");
return 0;
}
}Ezért még nem működött megfelelően.
<< Heimdal >>
-
gakoska
tag
Sziasztok!
Van egy sürgős feladatom C-ben. Ehhez kétszeresen láncolt listában kellene elemeket létrehozni a többi elemhez képest bárhol, keresni a listában, kiírni és törölni őket.
Ha van valakinek ilyen kódja, ami alapvetően ezeket csinálja meg, legyen szíves küldje el nekem. Nagyjából tudom hogyan kellene, de sokat segítene egy működő kód, helyes szintaktikával, és mindenképpen C-ben, ne C++ban.
Köszönöm előre is
-
Scroll Lock
tag
Sziasztok!
A felhasználó által definiált méretű tömböt szeretnék létrehozni C nyelvben, de a fordító hibát jelez:
int main (void)
{
double f[2][2]={{3,5},{5,3}};
int n;
scanf("%d",&n);
double x[n][2]};Másik kérdésem, hogy az "int (*p2)[10];" kifejezés pontosan azt jelenti, hogy van egy pointerem, amely egy olyan tömbre mutat, amely 10 db elemmel rendelkezik? Azt én szabom meg, hogy az a tömb amire mutat hány dimenziós? Tehát a lényeg az, hogy végső soron 10 db elem legyen benne?
Előre is köszönöm a segítséget.[ Szerkesztve ]
-
Jester01
veterán
válasz Scroll Lock #1640 üzenetére
1) C-ben így nem tudsz dinamikus tömböt csinálni. Pointerekkel és malloc-kal kell játszani.
2) Nem, annak a tömbnek pontosan 1 dimenziósnak kell lennieJester
-
Oliverda
félisten
Hello!
Nem vagyok biztos abban hogy jó helyen kopogtatok de valaki esetleg meg tudnád itt mondani hogy ebből hogyan lehetne win alatt futtatható exe fájlt csinálni?
"Minden negyedik-ötödik magyar funkcionális analfabéta – derült ki a nemzetközi felmérésekből."
-
doc
nagyúr
válasz Oliverda #1642 üzenetére
elvileg egy C forditoval, de nem tudom hogy ezek az include-ok mennyire elerhetoek windows alatt... (gyanitom hogy mint minden mas, ez is eleg vert izzados melo, de legalabbis rakas vackot fel kell tenni hozza)
esetleg felrakhatsz egy Cygwin-t, ami egy Linux-szeru kornyezetet biztosit a gepen, ami alatt mar le tudod forditani a 'hagyomanyos' modon
-
sorath
csendes tag
Üdvözletem mindenkinek
A következő problémám vanadott ez a feladat amit megtudok írni csak alap feltétele h:
A programok a kapott paramétereket kizárólg a main függvény argc, argv[] változóin keresztül vehetik át. Semmiféle getchar, scanf és egyéb felhasználói input nem elfogadható!
És argc,argv változókkal nem tudom megcsinálni esetleg vki tud segíteni hogyan essek neki? Előre is nagyon köszönöm!!Írjon egy programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a primszámokat.
Tipp: Paraméterek ellenőrzése: legalább 2 (min,max), számok legyenek. Ha min > max akkor swap(min,max).
A primszámok csak önmagukkal és egyel oszthatók. Algoritmus keresése erre a szabályra.
For ciklus min-max értékikg, majd a fenti algoritmus alkalmazása a ciklusváltozóra.Primszám tesztelő algoritmus:
pl.: ciklus futtatésa 1-től a szam-1-ig, ha szám % ciklusváltozó == 0 akkor nem prim, kilépés!
Ha kiér a ciklusból, akkor a kapott szám prim.
Ez szándékosan a LEGROSSZABB(!) hatásfokú algoritmus, lehet sokkal jobbat találni!Szükséges libc függvények: printf()
-
Sk8erPeter
nagyúr
argc, argv:
Vegyük azt, hogy a main függvényednek így néz ki a fejléce:
int main(int argc, char *argv[])
{
/* blabla */
}Itt az argc azt határozza meg, hány paramétered van+1. Azért +1, mert ebben a számban benne van magának a futtatandó programodnak a neve is (pl. akarmi.exe a futtatandó fájlod; de NEM maga a programnév, mint string van benne, hanem csak plusz egy "paraméter").
Az argv pedig sztringre mutató mutatók tömbje, azért char * argv[] (ez ekvivalens ezzel: char **argv); ez megmondja, hány string szerepel a parancssorban. A 0. index maga a program neve (a korábban említett akarmi.exe), mint string, az 1. index (és az azt követő indexek) pedig az(ok), ami(ke)t a fájl neve mögé írtál: akarmi.exe parameter1 (parameter2 parameter3...)Eszerint ellenőrizgethetsz: pl. azt is csekkolhatod ilyen módon, hogy a program neve után pontosan annyi paramétert adtak-e meg, mint amennyit elvártál, és/vagy a paraméter(ek) neve megegyezik-e valamilyen értékkel, amitől függően hajtasz végre mondjuk egy műveletet, stb...
A Te esetedben ("min és max érték között kikeresi és listázza a primszámokat") pl. így hívod meg a programot a parancssorból:
akarmi.exe 10 50Még az elején include-old az stdlib-et, és akkor átalakíthatod a paraméterként kapott sztringet egész számmá az atoi függvénnyel:
#include <stdlib.h>Végezz egy ellenőrzést, hogy a paraméterek száma nem kisebb-e a szükségesnél (kell a min és a max is):
if(argc<3)
/* hibaüzenetek, kilépés hibával */;A korábban int-ként deklarált min és max változóknak pedig add át a megfelelő értékeket:
min = atoi(argv[1]);
max = atoi(argv[2]);Ezt követően pedig végezd el a prímtesztelést.
Összefoglalva (a konkrét kiegészítés már a Te dolgod):
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{
int min, max;
if(argc<3)
/* hibaüzenetek, kilépés hibával */;
min = atoi(argv[1]);
max = atoi(argv[2]);
/* ide jöhet a prímtesztelés */
}Sk8erPeter
-
sorath
csendes tag
válasz Sk8erPeter #1648 üzenetére
Nagyon szépen köszönöm holnap neki is esek
Ú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!
- AKCIÓ Új Dobozos Macbook Pro dokkoló új ára 70.000 forint
- ThinkPad Hybrid USB -C USB -A Dock 40AF Új ára 80.000 Forint Ingyen szállítás
- Xiaomi Redmi Note 9s 128/6 GB 34.9E !!!
- Új Hp Pavilion 15-eh Fémházas Szuper Laptop 15,6" -30% AMD Ryzen 7 5700U 8Mag 16/1TB FHD MATT
- ATI RADEON RX 480 -8 gb DDR5 256 bit videokártya