- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- Parci: Milyen mosógépet vegyek?
- Elektromos rásegítésű kerékpárok
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Magga: PLEX: multimédia az egész lakásban
- Luck Dragon: Asszociációs játék. :)
- NASsoljunk: ZyXEL NSA-310 és az FFP
- Mr. Y: Motoros sztorik #06
- Napkollektor - csak úgy
Új hozzászólás Aktív témák
-
-
cellpeti
nagyúr
Sziasztok!
Tudnátok segíteni?Hogyan kell letárolni egy karaktersorozatot tömbbe?
-
Gyuri16
senior tag
válasz
nepszter1 #1695 üzenetére
#include <stdio.h>
int main() {
int x;
printf("Add meg a szamot!\n");
scanf("%d", &x);
if (x % 6 == 0)
printf("A szam oszthato kettovel es harommal is\n");
else if (x % 2 == 0)
printf("A szam kettovel oszthato, harommal nem\n");
else if (x % 3 == 0)
printf("A szam oszthato harommal, kettovel nem\n");
else
printf("A szam nem oszthato se kettovel se harommal\n");
return 0;
}meg mindig nem teljesen vilagosan irtad le, de gondolom valami ilyesmi kell. nezd meg, es probald meg megerteni mit csinal (direkt nem irtam legegyertelmubben), ne csak leadd a tanarnak
-
nepszter1
addikt
válasz
Gyuri16 #1694 üzenetére
Na szóval kezdjük ott gimibe járok szóval nem lesz semmilyen vizsga de nem akarok veszekedni . szóval valahogy úgy van hogy megkel adni egy számot pl.: 6 és utána ki adja azt hogy a szám osztható 2vel és 3mal is , és van ugye amikor nem osztható akkor irja hogy a szám nem osztható2vel és 3mal .
Remélem most érthető voltam , elnézést a kellemetlenségekért
#include <iostream>
eddig juttotam
-
Gyuri16
senior tag
válasz
nepszter1 #1693 üzenetére
te meg nem erted, hogy fogalmam sincs mit akarsz?
"...hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen "
ezt hogyan ertelmezzem?? ennyit irtal, probaltam ra valaszolni. abbol amit irtam ha legalabb kicsit is akarod meg tudod irni a programot
{itt egy osztonzo beszed lett volna, hogy nezz utana, tanuld meg. hiszen a vizsgan ugyis tudnod kell majd, de rajottem nem eri meg. ha ennyire nem erdekel a dolog ird le rendesen mit akarsz (hogyan van a beolvasas,...) es megirom} -
Gyuri16
senior tag
miutan beolvastad az adatokat vegzel egy ellenorzest.
egy for ciklussal vegigmesz a string elemein, mindegyiken megnezed, hogy 1 es 6 kozott van-e.
ezt legegyszerubben ugy, hogy a betu '1' es '6' kozott van-e (siman osszehasonlitassal), igy:char k;
/* k-t beolvasod stb.. */
if (k>='1' && k<='6') {
/* a szam 1 es 6 kozott van */
}ez a megoldas nem a legszebb, mivel bizik abban, hogy a kodolasban a szamok novekvo sorrendben vannak egymas utan (altalaban ez igy van). ha ez nem tetszik, akkor az isdigit() fv segithet.
(bar megjegyzem en inkabb eleve szamokkent kezelnem ezeket az adatokat, es ugy is olvasnam be oket)az egesz tesztelest es beolvasast pedig egy ciklusba teszed, amit addig csinalsz, amig nem jo amit bead a felhasznalo
tovabba nem lenne rossz megnezni azt is, hogy a beolvasott dobas valtozod megegyezik-e a beolvasott dobasok szamaval
nepszter1: nem ertem mit kerdezel, olvasd el magad utan a hozzaszolasodat, es gondold ujra. ha egy szam osztoit akarod kiiratni, akkor vegigmesz egy ciklusban 2 tol a szamig, es a mar emlitett % operatorral megnezed osztja e.
-
nepszter1
addikt
Üdv , egy könnyű kérdésel fordulok hozzátok hogyan islehetne megirni azt hogy 2-vel és 3mal is osztható legyen ? köszönöm
-
-
Bero
aktív tag
No megírtam így, eredetileg is így kérték, egy kérdésem van még
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>
void main(){
char str[100];
int dobas;
int i;
int egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;
clrscr();
printf("\nHany kocadobast vegez? ");
scanf("%d", &dobas);
printf("Irja be a kockadobasok eredmenyeit! ");
scanf("%s", str);
for(i=0;i<dobas;i++)
{
if (str[i] =='1')egy++;
else if (str[i] == '2')ket++;
else if (str[i] == '3')ha++;
else if (str[i] == '4')negy++;
else if (str[i] == '5')ot++;
else if (str[i] == '6')hat++;
}
printf("1: %d db\n", egy);
printf("2: %d db\n", ket);
printf("3: %d db\n", ha);
printf("4: %d db\n", negy);
printf("5: %d db\n", ot);
printf("6: %d db\n", hat);
getch();
}Hogy tudom a bekért számsor formai helyességét ellenőrizni egyszerűen? Ebben az esetben azt hogy szám-e, illetve hogy 1 és 6 között van.
Előre is nagyon köszönöm a segítséget! -
Gyuri16
senior tag
válasz
Jester01 #1681 üzenetére
koszonom, ertem.
igy viszont nem igazan vilagos mire is volt jo az, hogy beallitotta SIG_IGN-ra az elejen, hiszen ez a default ertek, es ha jol ertem akkor ezzel csak azt erte el, hogy a waitpid() az osszes gyerekre var (viszont itt mindig csak egy lesz egyszerre). tehat ha az elejen nem teszi oda a SIG_IGN-t, es a fork() utan tesz egy wait()-et, akkor nem ugyanez az eredmeny?
a program ezen kivul nem hoz letre processzeket (kiveve, hogy a foprogram demonkent fut)mindenesetre majd holnap kiprobalom, hogy is mukodik ez
-
Jester01
veterán
válasz
Gyuri16 #1680 üzenetére
man waitpid
POSIX.1-2001 specifies that if the disposition of SIGCHLD is set to SIG_IGN or the SA_NOCLDWAIT flag is set for
SIGCHLD (see sigaction(2)), then children that terminate do not become zombies and a call to wait() or waitpid() will
block until all children have terminated, and then fail with errno set to ECHILD. (The original POSIX standard left
the behavior of setting SIGCHLD to SIG_IGN unspecified. Note that even though the default disposition of SIGCHLD is
"ignore", explicitly setting the disposition to SIG_IGN results in different treatment of zombie process children.)Tehát a 2001-es POSIX szabvány szerint a signal miatt nem lesznek zombik, a waitpid pedig az összes gyereket bevárja és aztán hibát dob (vagyis nem adja vissza a status-t). Más szabványú implementáció esetén még a signal ellenére is szükséges lehet a waitpid a zombik elkerülésére.
-
Gyuri16
senior tag
válasz
Jester01 #1678 üzenetére
koszonom, igy mar ertheto.
kozben tovabb olvasva talaltam meg egy erdekeset:
program elejen van egy ilyen:
signal(SIGCHLD, SIG_IGN);
(ha jol tudom ez a default beallitas..)aztan kesobb ez:
int pid = fork();
if (!pid) {
/* ... */
exit(1);
}
/*
* Yeah, we set CSIGCHLD to SIG_IGN, so this should
* never even succeed reliably anyway, but at least
* we'll wait for the child to exit, and not have
* potentially lots of children outstanding.
*/
if (pid > 0) {
int status;
waitpid(pid, &status, 0);
}itt ismet a kommentar amit nem ertek.
azt tudom, hogy ha fork()-kal egy uj processzt letrehozunk, akkor az addig el (zombikent) amig a szulo (vagy ha mar az nincs akkor az init) meg nem hivja a wait()-et. ez itt megtortenik, nem ertem mi a gond a szerzo szerintmod: miert lettem en is OFF? en nem akartam
-
Jester01
veterán
válasz
Gyuri16 #1677 üzenetére
Valószínűleg ez fájl felülírás, tehát már lehet valami ott. Ha feltételezzük, hogy az olvasás a fájl végéig megy, akkor 0 byte hatására még ha van is utána szemét az C stringként már nem fog látszani.
Pl. ha a fájlban most az van, hogy "makvirag" és azzal akarod felülírni, hogy "rozsa" akkor a 0 byte nélkül az lenne ott átmenetileg, hogy "rozsarag". Ha egy másik program épp ilyenkor olvasná ki akkor hibás adatot kapna. Ha viszont a lezáró nulla byte is bekerül, akkor azt fogja kapni, hogy "rozsa<0>ag". De mivel a C logika szerint a string csak a 0 byteig tart, ezért ez a helyes "rozsa" értékkel egyenértékű. Ezután persze az ftruncate le fogja vágni a fölösleges byteokat, szóval csak egy nagyon rövid ideig fordulhat elő.
-
Gyuri16
senior tag
egy kis program forraskodjat neztem, ennel megakadtam:
n = snprintf(buffer, sizeof(buffer),"...",... );
/*
* We write it with the final '\0' and then truncate it.
* This way, even if somebody were to read it concurrently,
* the data should always be valid as a string.
*/
write(fd, buffer, n+1);
ftruncate(fd, n);mit akar jelenteni ez a komment? es miert is jo ez igy?
-
sorath
csendes tag
régen c++ ban sokat programoztam igaz ijen alap szinten aztán most ojan fura c ben h ijen fügvénymegadások villamosmérnöknek tanulok és ijent kérnek főleg h magas feszen mert vannak akik kisfeszen vannak azoknak ok nekik kell plc ket meg mikro procikat stb stb na mind1 még 1 szer kösz szépen
-
sorath
csendes tag
válasz
Sk8erPeter #1674 üzenetére
beírtam neki a pauset most nem fut le egyből viszont totalból indítottam még és elfogadja h akarmi.exe 10 50 mondjuk de kiírásnál a számokat nem adja ki csak végig léptet annyiszor amennyi prim szam van megnézem dos alatt mit csin most
-
sorath
csendes tag
válasz
Sk8erPeter #1670 üzenetére
Meg köszöntem volna am nagyon rendes volt és tényleg nagyon sokat segített!!
Köszönöm! -
shev7
veterán
válasz
Sk8erPeter #1671 üzenetére
"Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem?"
Mit koszonjon meg? Nem latod, hogy nem mukodik neki
lepj tul ezen
te vagy azon keves lelkesek egyike akik jofejsegbol ingyen megcsinaljak mas hazijat. Majd megunod, en is meguntam. De addig meg ne hagyd hogy ilyenek eltantoritsanak, ha jol tudom te is meg csak tanulod a dolgokat, jo gyakorlas ez. Mi meg majd szetszedjuk, es abbol is tanul mindenki aki a topicot latogatja. Savazas nem lesz, abban biztos lehetsz!
-
Sk8erPeter
nagyúr
válasz
Gyuri16 #1669 üzenetére
Ebben teljesen igazad van, függvénynek nem I/O művelet a dolga, csakis annak elvégzése, amiért meghívták. A főprogram írogasson ki. Tehát ilyen egyetértek veled, de ha kicsit több energiát fektettem volna a dologba, akkor biztos feltűnt volna.
(#1668) shev7: OK, igaz, végül is nekem is jó, ha szóltok, hogy valahol lehetett volna jobban. Csak azt hittem, most jön a saváradat, ami miatt aztán szégyellhetem a pofám, hogy hogy írhattam ilyen sz@rt.
Amúgy igazatok van abban, amiket írtatok.
Mondjuk azt bírom, hogy a srác, aki annyit kérdezősködött, és akinek megírtam, még csak annyit se mondott, hogy "kösz vaze"...Így próbáljon segíteni az ember másnak. Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem?
-
Sk8erPeter
nagyúr
Honnan indítod el így? Ha mondjuk Total Commanderben adod be neki így a két paramétert, akkor gyorsan lefut, aztán kilép a fenébe. Az MS-DOS parancssorról kell beadni neki. Vagy akkor tegyél a return elé egy várakoztatást, mondjuk Windows alatt beteheted akár a system("PAUSE"); sort is, de ez alapból kerülendő: Things to Avoid in C/C++ -- system("pause"), de egy ilyen full egyszerű programnál nem lesz bajod belőle.
Kipróbáltam a programot, mielőtt bemásoltam volna, működik, "a hiba az Ön gépében van". Amúgy szívesen... -
Gyuri16
senior tag
válasz
Sk8erPeter #1663 üzenetére
igazad van, megzavartak a kommentek
Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható.
egy szo: KISSannak a fuggvenynek az a dolga hogy megmondja prim-e vagy nem. lehet nekem mas a velemenyem a fuggvenyek tervezeserol (es nem feltetlenul jo), ezert irtam csak
Már kezdem bánni, hogy megcsináltam a programot a srác helyett.
sorry, nem ezt akartam elerni.
szerintem egy ilyen forumon van helye errol beszelni, hiszen van itt jopar szakember, akiknek a velemenyere adok -
shev7
veterán
válasz
Sk8erPeter #1666 üzenetére
"Már kezdem bánni, hogy megcsináltam a programot a srác helyett... "
azt sose band. Es a kritikat se vedd szemelyes sertesnek. A cel nem az, hogy megmutassuk rossz amit irtal, egyaltalan nem. A cel az, hogy mas is tanuljon belole.
-
Bero
aktív tag
Köszönöm, így már működik.
Még egy kérdés, hogy tudom elintézni azt, hogy az elején a program rákérdezzen hány dobást fogunk végezni, és addig kérje be?
Ha egy int-be scanf-el bekérek egy számot, akkor a getline nem is fut le.Nagyon szégyelem magam, túlságosan is kezdő vagyok hozzá, de remélem azért érthetően fogalmaztam a kérdést.
Iskolai sablon a getline, tanárok szerint minden programhoz használnunk kell, de az igazság az hogy jobbat én nem is tudok varázsolni.
-
Sk8erPeter
nagyúr
Pedig direkt sokat kommenteztem, azt hittem, attól lesz egyértelmű.
De akkor nem. De mondjuk nem tudom, minek mentegetőzzek, mondtam, hogy nem a legtökéletesebb program, de elég gyorsan írtam, így nem foglalkoztam olyanokkal, mint a "függvény neve", "van-e felesleges változó, és ki lehet-e váltani valamivel, minimalizálni a kódot"... Már kezdem bánni, hogy megcsináltam a programot a srác helyett...
-
sorath
csendes tag
válasz
Sk8erPeter #1658 üzenetére
annyi kérdésem lenne hogy ugye a min és max értékét úgy adom meg
hogy pl: akarmi.exe 10 50 de így indítom lefut de semmi más nem történik -
shev7
veterán
válasz
Sk8erPeter #1663 üzenetére
teny, hogy feleslegesen nem fut a ciklusod de a divider valtozo behozasa a kepbe csak feleslegesen bonyolitja az algoritmust, es rontja az olvashatosagot, (nekem legalabbis beletelt par percbe mig felfogtam, hogy mi van, es miert is mukodik jol) Ha valami uzenetet akar kiirni, ahhoz nem kell ez a varazslas, megy az a return elott is.
-
Sk8erPeter
nagyúr
válasz
Gyuri16 #1659 üzenetére
A névvel kapcsolatban igazad van, dehát a feladat megvalósítása szempontjából kb. az volt az, amit a legjobban lesz@rtam.
Amúgy sem gondolkodtam olyan túl sokat a feladat megoldásán, nem épp ezen kell leakadni.
"viszont foloslegesen mesz vegig az osszes oszton"
Már miért mennék végig az összes osztón?
A for ciklusból szerintem nem vettél észre egy részletet:
(i<max && divider<2)
(A zárójelezés szándékos, bár nem lenne kötelező, hogy jobban látható legyen, hogy összetartozik.)
Tehát eleve ha már divider mondjuk elérte a 2-t, akkor nem is fut tovább a ciklus.
Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható. Legfeljebb abban az esetben csak kiírja, hogy prím vagy sem, aztán végzi tovább a dolgát, ahogy akarja.
Ezek fényében nem nagyon értem a kritikát. -
-
Karma
félisten
Egyszerű: nem törődsz a beolvasott szöveg hosszával, mindig 100 elemig fut a ciklusod. Feltéve, hogy a getline függvény jól működik (elég sok helyen írták ugyanezt a topikban, gondolom valami órai sablon), akkor a visszatérési értéke a beolvasott karakterek száma, használd ezt a ciklus végértékének.
-
Bero
aktív tag
Üdvözletem!
Segítséget szeretnék kérni, hogy miért nem működik ez ebben a formában:#include <stdio.h>
#include <conio.h>
#define MAX 100
int getline(char s[],int lim)
{
int i;
char 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;
}
void main(void)
{
char str[MAX];
int i;
int egyeb=0, egy=0, ket=0, ha=0, negy=0, ot=0, hat=0;
clrscr();
printf("K‚rek egy sort:");
getline(str,MAX);
for(i=0; i<MAX; i++)
{
if (str[i] == '1')egy++;
else if(str[i] == '2')ket++;
else if(str[i] == '3')ha++;
else if(str[i] == '4')negy++;
else if(str[i] == '5')ot++;
else if(str[i] == '6')hat++;
else egyeb++;
}
printf("%s", str);
printf("\n1 = %d", egy);
printf("\n2 = %d", ket);
printf("\n3 = %d", ha);
printf("\n4 = %d", negy);
printf("\n5 = %d", ot);
printf("\n6 = %d", hat);
getch();
}kockadobásokat kér be, max 100-at, és utána egyszerűen megszámolja.
Előre is köszönöm! -
Gyuri16
senior tag
válasz
Sk8erPeter #1658 üzenetére
szerintem a prime_or_not nagyon szerencsetlen fuggvenynev, hiszen a "prim vagy nem" mindig igaz, nem egyertelmu mit csinal a fuggveny. inkabb is_prime vagy hasonlo javasolt.
igen, szeretem mas kodjat kritizalnite mar a jobb verziot csinaltad, ami csak a gyokeig keresi az osztokat. viszont foloslegesen mesz vegig az osszes oszton, ha mar megtalaltad, hogy valami osztja (divider valtozod), ott mar ki tudod jelenteni, hogy nem prim
itt az en verziom (tiedet felhasznalva), ami jobban koveti az eredeti kiirast (ezert aztan butabb is, viszont lehet kicsit egyszerubb):
#include <stdio.h>
#include <ctype.h> /* isdigit() miatt */
#include <stdlib.h> /* atoi miatt */
int prim(int i);
int main(int argc, char *argv[]) {
/* beolvasas, ugyanaz.. */
int i;
for (i=min; i<=max; i++) {
if (prim(i))
printf("%d\n",i);
}
}
int prim (int i) {
if (i<2)
return 0;
int j;
for (j=2; j<i; j++) // itt eleg lenne sqrt(i)-ig
if (i%j==0)
return 0;
return 1;
} -
Sk8erPeter
nagyúr
Na, közben rohangásztam, meg kajáltam, de végül sikerült megírni, jól telepakoltam neked kommentekkel, hogy értsd, mit miért csináltam.
#include <stdio.h>
#include <math.h> /* gyökvonás miatt */
#include <ctype.h> /* isdigit() miatt */
#include <stdlib.h> /* atoi miatt */
int prime_or_not(int number); /* deklaráljuk, hogy van ilyen fv.-ünk. Most nem a feladatban meghatározott legrosszabb algoritmust fogom használni. */
int main(int argc, char *argv[])
{
int min, max, temp;
if(argc<3){
/* hibaüzenetek, kilépés hibával */
fputs("Tul keves a parameter!\n", stderr);
return -1;
}
if( isdigit(*argv[1]) )
min = atoi(argv[1]);
else{
fputs("Az elso parameter nem szam!\n", stderr);
return -1;
}
if( isdigit(*argv[2]) )
max = atoi(argv[2]);
else{
fputs("A masodik parameter nem szam!\n", stderr);
return -1;
}
if(min>max){ /* ezt egy fv.-be is lehetne írni [swap(min,max);], most nem tököltem vele */
temp=min; /* átmenetileg eltároljuk min értékét, aztán átadjuk max-nak */
min=max;
max=temp;
}
printf("A %d es %d kozotti primszamok:\n",min,max);
/* jöhet a prímtesztelés, prímek kiírása */
for(;min<=max;++min)
if(prime_or_not(min))
printf("%d\n",min);
return 0; /* VÉGE */
}
/***** Prímtesztelő függvény *****/
int prime_or_not(int number){
int i, divider, max;
if(number==0 || number==1) return 0; /* ezek nem prímek! */
max=(int)(sqrt(number)+1); /* "Csak a p≤(négyzetgyök n) -ig szükséges próbálkozni." lásd pl. Wikipédia. Itt: cast-olás. */
for(divider=1,i=2;(i<max && divider<2);++i)
/* divider<2-nek az az oka, hogy meghatároztuk a max-ot, és az semmiképp nem érheti el magát a számot, így jelen esetben önmaga nem lesz osztója (mint a szabály szerint), így a divider 2-re se mehet fel a prímeknél sem */
{
if(number%i==0) /* ha maradék nélkül megvan a számban az i aktuális értéke */
divider=i;
}
if(divider>1) return 0; /* nem prím */
return 1; /*egyébként prím */
} -
Sk8erPeter
nagyúr
Láttad a korábbi hsz.-emet?
Mert amit ide leírtál, az alapján tényleg nem vágod, mire való az argc, argv, pedig azt hittem, egyértelműen leírtam (leírtuk).
De nem is látom az eredeti feladatspecifikációdban, hogy egyáltalán szükség lenne file-kezelésre, file-ba írásra.Na, de most gyakorlásképp mindjárt megcsinálom neked kompletten a feladatot.
-
Gyuri16
senior tag
egyaltalan nem ertem mit csinaltal. az eleje (majdnem) jo, igy kellene kineznie:
if (argc < 3) {
/* keves parametert adtal meg, irass ki valami hibauzenetet,
es hogy hogyan kell hasznalni a programodat,
aztan lepj ki hibakoddal */
}
min = atoi(argv[1]);
max = atoi(argv[2]);
ekkor a ket parameter amit a programod utan irtal futtataskor a min es max valtozokban lesz. tovabb nincs miert foglalkoznod az argv-vel. a feladatod szerint igy kellene folytatni:
if (min>max) {
/* csere: min <--> max */
}
int i;
for (i=min; i<=max; i++) {
// vegignezzuk az osszes szamot min es max kozott
/* ha i primszam akkor kiirod ahova kell */
}ott ahol /* kommentar */ van, kell irni meg par sornyi kodot
-
sorath
csendes tag
ezt hoztam össze de nem megy vmi megoldás?
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{
int min, a, max;
FILE* pFile;
if(argc<3)
min = atoi(argv[1]);
max = atoi(argv[2]);
for(min=0;min<=max;min++)
argv[min]=2*min+3;a=-1;
pFile=fopen("prim.txt","w");while(a<max){
while(!argv[++a]);
min=a;
while((min+=argv[a])<max)argv[min]=0;
fprintf(pFile,"%d\n",argv[a]);
}fclose(pFile);
free(argv);
system("PAUSE");
return 0;}
-
Sk8erPeter
nagyúr
Szerintem eleve félreérted az argc, argv szerepét: itt nem kell scanf, mivel a program neve mögött szereplő paraméterekre vagy kíváncsi, abból tudod meg azt, amit Te a scanf-fel akarnál megtudni.
Ha Windows-t használsz, akkor nyiss egy Start- Futtatás- cmd -t, navigálj el arra a könyvtárra, ahol a lefordított programod van az exe-fájllal. Ha a korábban említett "akarmi.exe" a programod neve, akkor írd be ezt a cmd-nél parancsnak:
akarmi.exe 10 50
Aztán Enter, és a programodnak mennie kell a megadott paraméterekkel.
De ezt már írtam korábban is. Ekkor a 10 lesz a min, 50 a max, ha jól csináltad. -
Gyuri16
senior tag
ez a progam igy nem korrekt. egyreszt szintaktikailag se jo (eredet(i) helyett eredet[i]). masreszt a beolvasasod se jo, mivel a valtozodat mindig felulirod, igy csak az utolso betut jegyzed meg
hogy az eredeti kerdesre valaszoljak: isalpha() fuggveny segithet, ez megnezi, hogy a char amit adsz neki betu e, ha csak kisbetuk erdekelnek akkor islower()
#1650:
Sk8erPeter szepen osszefoglalta pedig. probald meg a programot a hsz-e vegerol lemasolni. irj hozza annyit, hogy kiirasd a ket valtozot. ezutan forditsd le, es futtasd a ket parameterrel -
sorath
csendes tag
vagy lenne még 1 feladat amit félig megtudtam csinálni ezzel csak annyi a baj hogy lekellene korlátozni hogy csak betüket fogadjon el lényege h kisbetüt nagybetüvé konvertáljak
valaki ki tudná úgy egészíteni h csak a betüket fogadja el?
#include <stdio.h>
#include <string.h>
#include <ctype.h>int main() {
int meret=5;
int i;
int beolvas=0;
char akt;printf("Hany karaktert konvertaljunk at?");
scanf("%d", &meret);char eredet[meret];
printf("Kerem a betuket!");
for (i=0;i<meret;i++)
{
scanf("%s", &eredet);
}for (i=0;i<meret;i++)
{
eredet(i)=toupper(eredet(i));
}
/* vagy a toupper nelkulfor (i=0;i<meret;i++)
{
char atmenet = eredet(i)-32;
eredet(i)=atmenet;
}
for (i=0;i<meret;i++)
{
printf("%c", eredet(i));
}getchar();
return 0;}
-
sorath
csendes tag
válasz
Sk8erPeter #1648 üzenetére
Nagyon szépen köszönöm holnap neki is esek
-
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 */
} -
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()
-
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
-
Oliverda
titán
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?
-
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 lennie -
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. -
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
-
Retekegér
MODERÁTOR
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.
-
Retekegér
MODERÁTOR
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!
-
Retekegér
MODERÁTOR
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;
} -
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]);
} -
Retekegér
MODERÁTOR
Hogyan tudom kiíratni egy tömb elemeit sorbarendezés után?
-
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);
} -
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.)
-
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;
} -
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
-
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.
-
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.
-
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 -
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)
-
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 #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
-
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?
-
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. -
Gyuri16
senior tag
válasz
Dead_slow #1613 üzenetére
de a te megoldasod nalam "|"-t ir ki "| " helyett az elso sorokban, azon kivul nem korrekt (ha beadando akkor pontlevonas).
kicsit jatszottam vele es sikerult rossz helyzetet eloidezni. a kododba raktam egy masik tombot ami pont akkora hogy a tabla[32][32](ami a tabla[' '][' ']) cim benne legyen, es arra a cimre raktam egy 'x' jelet. itt a forraskod reszlete (abban nem vagyok biztos, hogy ez most nalad is mukodni fog e igy, nem tudom pontosan hogyan foglalja le a memoriat, eloszor az en tombomet a tabla ele rakta, vegul sikerult ravennem, hogy utana tegye):char tabla[10][10];
char kuk2[225];
int sor,oszlop,lep;
char imp[3];
void init(){
for(sor=0;sor<9;sor++){
for(oszlop=0;oszlop<9;oszlop++)
tabla[sor][oszlop]=' ';
}
kuk2[224]='x';
}ezen kivul minden olyan mint amit te irtal. itt a kimenet:
gyuri@TGyuri:~/phprogs$ gcc -o sakk sakk.c && ./sakk
Kerem a babut es a poziciojat pl.:(Ha1): Ha1
Kerem a babut es a poziciojat pl.:(Ha1): *
A B C D E F G H
1 |H| | | | | | | |
2 | | | | | | | | |
3 | | | | | | | | |
4 | | | | | | | | |
5 | | | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |
lepeszsam:4
A B C D E F G H
1 |x|x|x|x|x|x|x|x|
2 |x|x|x|x|x|x|x|x|
3 |x|x|x|x|x|x|x|x|
4 |x|x|x|x|x|x|x|x|
5 |H| | | | | | | |
6 | | | | | | | | |
7 | | | | | | | | |
8 | | | | | | | | |amint latod kiirta az x-et a masik tombbol. ez egy nagyobb projektnel ahol tobb valtozod van elofordulhat ilyen ugyeskedes nelkul is
-
Gyuri16
senior tag
válasz
Dead_slow #1611 üzenetére
eleg erdekes dolgot irtal, nem egeszen ertem mit akartal ezzel a sorral:
printf("|%c",tabla[' '][' ']);
ha jol gondolom (ha nem akkor valaki javitson ki) az tortenik hogy a ' ' atvaltozik szamra (32) es azzal indexeled a tombot, es kiirsz valamit, rosszabb esetben megfagy a program mert olyan helyre nyulkalsz ahova nem szabadna.
en siman kiiratnak egy "| "-t igy:
printf("| "); -
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 #1609 üzenetére
ebben a sorban van a hiba:
printf("|%c", tabla[j][i-k]);
ha k>i akkor nem lesz jo. ha pl j=2, i=2, k=3 akkor tabla[2][-1] lesz az eredmeny ami a tabla[1][9] re fog mutatni, ezert lehet hogy mas oszlopba lep at. tehat eleg ele tenni egy ifet, es ha k>i akkor ures helyet rajzolni oda -
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;
} -
TrakToros
tag
Sziasztok!
Volna 1 feladat amit meg kellene oldanom, de sajnos nem vágom a C-t és a bash-t se nagyon3 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)
-
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!
-
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.
-
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;
}
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Autós topik
- Milyen billentyűzetet vegyek?
- Haditechnika, harcászat
- Azonnali alaplapos kérdések órája
- E-roller topik
- Stellar Blade
- Counter-Strike: Global Offensive (CS:GO) / Counter-Strike 2 (CS2)
- Azonnali informatikai kérdések órája
- Vezetékes FEJhallgatók
- India felől közelít egy 7550 mAh-s Redmi
- További aktív témák...
- ELADÓ TELJES GAMER SETUP!
- Lenovo ThinkPad T14 Gen 3:i5 1250P(12mag),16GB,512GB,14"matt TOUCH,vil.HU bill,Lenovo gari 2026.6.25
- Amazfit Gtr 3 Pro okosóra dobozával újszerű állapotban
- i3-8100 + ASUS H310M alaplap + 8GB RAM egyben (félkonfig)
- Asztali PC , R5 5500 , RX 6700 XT , 32GB RAM , 512GB NVME , 1TB HDD
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged