Hirdetés

2024. április 30., kedd

Gyorskeresés

Hozzászólások

(#1651) sorath válasza sorath (#1650) üzenetére


sorath
csendes tag

valaki segítsen ebből vizsgázok hétfőn :W

(#1652) sorath


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 nelkul

for (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;

}

(#1653) Gyuri16 válasza sorath (#1652) üzenetére


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

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1654) Sk8erPeter válasza sorath (#1650) üzenetére


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.

Sk8erPeter

(#1655) sorath


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;

}

(#1656) Gyuri16 válasza sorath (#1655) üzenetére


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

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1657) Sk8erPeter válasza sorath (#1655) üzenetére


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). :D
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. :D

Na, de most gyakorlásképp mindjárt megcsinálom neked kompletten a feladatot.

Sk8erPeter

(#1658) Sk8erPeter válasza sorath (#1655) üzenetére


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. :D

#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

(#1659) Gyuri16 válasza Sk8erPeter (#1658) üzenetére


Gyuri16
senior tag

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 kritizalni ;]

te 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;
}

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1660) Bero


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!

(#1661) Karma válasza Bero (#1660) üzenetére


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.

“All nothings are not equal.”

(#1662) shev7 válasza Bero (#1660) üzenetére


shev7
veterán

egyreszt ez nem ertem miert kell:
while(c!=EOF && c!='\n')
c=getchar();

Masreszt hiaba csa 10-et olvasol be ha a vizsgalat a main-ben 100-ig megy. Ott mar nem vizsgalod, hogy eljutottal-e a \0-ig

Masreszt ez talan problemat fog okozni, ha i erteke 100

s[i]='\0';

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1663) Sk8erPeter válasza Gyuri16 (#1659) üzenetére


Sk8erPeter
nagyúr

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. :D

"viszont foloslegesen mesz vegig az osszes oszton"
Már miért mennék végig az összes osztón? :Y
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. :U
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.

Sk8erPeter

(#1664) shev7 válasza Sk8erPeter (#1663) üzenetére


shev7
veterán

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.

[ Szerkesztve ]

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1665) sorath válasza Sk8erPeter (#1658) üzenetére


sorath
csendes tag

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

(#1666) Sk8erPeter válasza shev7 (#1664) üzenetére


Sk8erPeter
nagyúr

Pedig direkt sokat kommenteztem, azt hittem, attól lesz egyértelmű. :D 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... :U

Sk8erPeter

(#1667) Bero válasza Karma (#1661) üzenetére


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.

(#1668) shev7 válasza Sk8erPeter (#1666) üzenetére


shev7
veterán

"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.

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1669) Gyuri16 válasza Sk8erPeter (#1663) üzenetére


Gyuri16
senior tag

igazad van, megzavartak a kommentek :B

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: KISS :) annak 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

Nem vagyok egoista, csak uborkagyalu!

(#1670) Sk8erPeter válasza sorath (#1665) üzenetére


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...

Sk8erPeter

(#1671) Sk8erPeter válasza Gyuri16 (#1669) üzenetére


Sk8erPeter
nagyúr

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. :) :R

(#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. :DDD Amúgy igazatok van abban, amiket írtatok. :K
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"... :D Í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? :D

[ Szerkesztve ]

Sk8erPeter

(#1672) shev7 válasza Sk8erPeter (#1671) üzenetére


shev7
veterán

"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 :DD :DD

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!

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1673) sorath válasza Sk8erPeter (#1670) üzenetére


sorath
csendes tag

Meg köszöntem volna am nagyon rendes volt és tényleg nagyon sokat segített!!
Köszönöm!

(#1674) Sk8erPeter válasza shev7 (#1672) üzenetére


Sk8erPeter
nagyúr

OK, túlléptem. :D Azért amikor energiám van, még majd lelkesen írogatok programokat, és akkor széjjel lehet szedni. :D :R

(#1673) sorath: szívesen. :) Sikerült működésre bírni a progit? Vágod már a parancssoros dolgot?

Sk8erPeter

(#1675) sorath válasza Sk8erPeter (#1674) üzenetére


sorath
csendes tag

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

(#1676) sorath válasza sorath (#1675) üzenetére


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:)

(#1677) Gyuri16


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?

Nem vagyok egoista, csak uborkagyalu!

(#1678) Jester01 válasza Gyuri16 (#1677) üzenetére


Jester01
veterán

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ő.

Jester

(#1679) Sk8erPeter válasza sorath (#1676) üzenetére


Sk8erPeter
nagyúr

Az "ilyen" és "olyan" szavakat szándékosan írtad következetesen pontos j-vel? :U Mondták már neked, hogy a fórum nem chat, és ezért itt illik tagolni és helyesen írni a mondataidat?

Sk8erPeter

(#1680) Gyuri16 válasza Jester01 (#1678) üzenetére


Gyuri16
senior tag

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 szerint

mod: miert lettem en is OFF? en nem akartam

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1681) Jester01 válasza Gyuri16 (#1680) üzenetére


Jester01
veterán

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.

Jester

(#1682) Gyuri16 válasza Jester01 (#1681) üzenetére


Gyuri16
senior tag

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

Nem vagyok egoista, csak uborkagyalu!

(#1683) Bero


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!

[ Szerkesztve ]

(#1684) Bero válasza Bero (#1683) üzenetére


Bero
aktív tag

illetve ha nem jó formailag, akkor újból kérjen adatot

(#1685) shev7 válasza Bero (#1684) üzenetére


shev7
veterán

mivel egyszerre kered be az osszes kockadobas eredmenyet, igy az ujra bekeres azt jelenti, hogy az egesz sorozatot ujra be kell kerned. Ha mar bekeresnel is ellenorizni akarsz, akkor celszeru karakterenkent beolvasni, es csak az adott karaktert kerni ujra

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1686) nepszter1


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

(#1687) Karma válasza nepszter1 (#1686) üzenetére


Karma
félisten

Ha egy A szám osztható egy B számmal, akkor a A-t osztva B-vel a maradék 0.
A C nyelvben a modulus művelet (A % B) adja meg az osztás maradékát.

Ha az a kérdés, hogy 2-vel is és 3-mal is, akkor egy modulus elég :)
shev7 meg lelőtte :P

[ Szerkesztve ]

“All nothings are not equal.”

(#1688) shev7 válasza nepszter1 (#1686) üzenetére


shev7
veterán

oszthato 6-tal? vagy en nem ertem mit szeretnel tudni... :F

MOD: Karma: bocsi... azt hittem hogy akik C-ben programoznak, vagy akarmiben is programoznak, azoknak a matekhoz legalabb valami kozuk van... anelkul...

[ Szerkesztve ]

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1689) Bero válasza shev7 (#1685) üzenetére


Bero
aktív tag

Bőven megfelelne ha a sorozatot egybe kezelné, és ha egy hiba is van közte, az egészet újból bekérné. Szerintem se túl logikus, de így kérték.

(#1690) Bero válasza Bero (#1689) üzenetére


Bero
aktív tag

Nagyon nem szeretek ilyet kérni, de most mégis megtenném :)
Ha valaki tudna segíteni nekem a fentebbi kérdésben, hogy gyakorlatban hogy kell kivitelezni nagyon megköszönném.

(#1691) nepszter1 válasza Karma (#1687) üzenetére


nepszter1
addikt

De pontosan hogy van mert fingom sincs:D mert ez a házim .. :DDD

azt hogy : kérem a számot: 6
a szám osztható 2vel és 3mal is .

[ Szerkesztve ]

(#1692) Gyuri16 válasza Bero (#1683) üzenetére


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.

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1693) nepszter1 válasza Gyuri16 (#1692) üzenetére


nepszter1
addikt

nem érted hogy nekem fogalmam sincs a c++ ról ez a házi feladatom és szeretném ha valaki leírná . ennyit kérek remélem nem nagy kérés.

(#1694) Gyuri16 válasza nepszter1 (#1693) üzenetére


Gyuri16
senior tag

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}

[ Szerkesztve ]

Nem vagyok egoista, csak uborkagyalu!

(#1695) nepszter1 válasza Gyuri16 (#1694) üzenetére


nepszter1
addikt

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 :DDD

[ Szerkesztve ]

(#1696) shev7 válasza nepszter1 (#1693) üzenetére


shev7
veterán

pedig hidd el, sokkal segitokeszebbek az emberek, ha nem azt kered, hogy hello ird meg az egeszet, hanem ha azt mondod, hogy idaig jutottam, ez hianyzik meg...

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1697) Gyuri16 válasza nepszter1 (#1695) üzenetére


Gyuri16
senior tag

#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

Nem vagyok egoista, csak uborkagyalu!

(#1698) cellpeti


cellpeti
veterán

Sziasztok!

Tudnátok segíteni?Hogyan kell letárolni egy karaktersorozatot tömbbe? :U

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

(#1699) shev7 válasza cellpeti (#1698) üzenetére


shev7
veterán

karaktersorozatot ugy alapbol char* valtozoba olvasol be. Korabban volt egy hosszabb eszmefuttatas a topikban arrol hogy milyen korulmenyek kozott igaz az hogy pointer = tomb. De a lenyeg, ha letaroltad char*-ba akkor azzal dolgozhatsz ugy mint tombbel.

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1700) cellpeti válasza shev7 (#1699) üzenetére


cellpeti
veterán

De hogy tárolom el char-ba? :U

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

Copyright © 2000-2024 PROHARDVER Informatikai Kft.