Új hozzászólás Aktív témák
-
Gekkocy
újonc
Sziasztok!
Szeretnék egy kis segítséget kérni a nálam okosabbaktól.
Kaptam egy kötelező programot amivel sajnos nem nagyon tudtam mit kezdeni. Többféle módon próbáltam megírni, de kevés sikerrel.A feladat:
Egy börtönben M börtönőr van és M zárt cella. A következő műveletsor szimulálása a feladat. Az 1.
őr minden ajtót kinyit. A 2. őr minden második ajtót bezár. A 3. őr minden 3. ajtót bezár, ha nyitva volt,
és kinyit, ha zárva volt. A többi őr hasonlóan cselekszik. Kérdés, mely cellák ajtaja van nyitva, miután
az n. őr végigment a cellákon?Bemenet
A bemenet két egész szám: a börtönőrök illetve cellák száma (0 < M � 1000) és a minket érdeklő őr
sorszáma (0<n<M) egy szóközzel elválasztva.
Aki tud kérem segítsen, akár tanácsokkal, kódrészletekkel. bármivel. Minden segítségnek nagyon örülök
A segítségeteket előre is köszönöm! -
axioma
veterán
válasz Gekkocy #5001 üzenetére
Na de ez azert keves, hogy nem sikerult. Hol akadtal el? Beolvasas OK? Van M hosszu tombod? Ket egymasba agyazott ciklusod?
Amugy jo ez a feladat, mert eredetileg matekfeladatkent mind az M o"r vegigmegy (vagy egy o"r M-szer, mind1), es a megoldas a negyzetszamok (azoknak van csak paratlan darab pozitiv osztoja). Felbehagyva viszont az n felettiekre mar nem ennyire egyszeruen mondhato meg, hogy mi marad.[ Szerkesztve ]
-
DrojDtroll
addikt
válasz Ereshkigal #5004 üzenetére
Nekünk, most középsuli másodikban vannak ilyenek.
Természetesen én nem itt tartok, túl unalmasak a programozás órák.
Egyetemeken nagyon nehéz a programozás, pl.: Debrecenben?
-
Gekkocy
újonc
válasz DrojDtroll #5003 üzenetére
Nagyon szépen köszönöm a segítséget!
-
kine
újonc
Sziasztok!
Szeptember óta részképzésre járok az egyetemen informatika tanári szakon. A C programozási nyelvet tanítják.Néhány óra alatt elmondták az egész programozási nyelvet, pár dolgot önállóan kellene mehtanulni, majd feladták a következő beadandó feladatot.Egy művelődési ház nagytermét számos cég szeretné lefoglalni különböző rendezvényekre.
A foglaláskor meg kell adni a kért dátumot (év, hónap, nap) és időintervallumot (órától óráig), illetve a foglaló cég nevét. A cég nevén kívül minden bekért adat egész szám.
Írjunk egy programot, mely kiírja az alábbi választási lehetőségeket és megvalósítja a hozzájuk tartozó műveleteket:
1. Új foglalás
2. Eddigi foglalások kiírása
3. Vége
Amennyiben a felhasználó az 1. vagy 2. menüpontot választja, úgy a megfelelő művelet elvégzése után a fenti menü ismételten megjelenik.
1. Új foglalás művelet leírása
a. A foglalásokat a felhasználó tetszőleges időrendi sorrendben adhatja meg.
b. Minden adatbekéréskor egyértelműen tájékoztatni kell a felhasználót arról, hogy mit, hogyan kell beírnia.
c. Minden foglaláskor ellenőrizni kell, hogy szabad-e a terem a kívánt időintervallumban, és ha nem, akkor jelezni kell a felhasználónak, hogy nem sikerült a foglalás.
d. Minden foglalás után a foglalások kezdőidőpontjuk szerinti növekvő sorrendben kell legyenek eltárolva.
2. Eddigi foglalások kiírása művelet
Kiírja a terem teljes foglaltságát időrendi sorrendben. Ez esetben a hónapot ne számmal, hanem a nevével (pl. "januar") írja ki.
A főmenü három műveletét kötelezőképpen külön függvényekben kell megvalósítani, de természetesen több függvény is használható (sőt ajánlott).
A program semmilyen angol nyelvű, vagy a felhasználó által nem érthető hibajelzést nem írhat ki.Nem azt kérem, hogy írjátok meg helyettem a programot, hanem azt, hogy merre induljak, hogyan gondolkodjam. Komolyabb előismeretekkel nem rendelkezem, nem tanultam még ilyen szintű programozást.
Ha tudtok kérlek segítsetek. Előre is köszönöm! -
DrojDtroll
addikt
Én úgy csinálnám, hogy létrehoznék mindegyik adatnak egy tömböt.
Amikor új időpontot kell felvenni akkor ideiglenesen eltárolnám változókban, majd megkeresném hova kell betenni a tömbbe. A tömböt, az adott megtalált helyről egyel jobbra tolnám. pl::
j=tömb utolsó elemének indexe
t[j]=t[j+1]
j--
Természetesen ez addig míg be nem akarunk szúrni.
Betesszük az adatokat a tömbbe.Kiíratáskor csak végigfutnák tömbökön, egyetlen ciklussal és printf()-el.
-
DrojDtroll
addikt
válasz tototos #5009 üzenetére
A struktura nélküli, több tömbös, megoldás sokkal nehézkesebb?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define foglalasok_max_szama 100
#define cegnev_max_hossza 100
void foglalas();
void kiiras();
void kilep();
char ch, cegnev[foglalasok_max_szama][cegnev_max_hossza];
int ev[foglalasok_max_szama], honap[foglalasok_max_szama], nap[foglalasok_max_szama], kezdo_ora[foglalasok_max_szama], zaro_ora[foglalasok_max_szama];
int ossz_foglalas_szama=0, i;
int main()
{
int lehetoseg;
do{
printf("1\tUj foglalas\n");
printf("2\tMeglevok kiirasa\n");
printf("3\tKilepes\n");
scanf("%d", &lehetoseg);
if(lehetoseg==1){
foglalas();
}
if(lehetoseg==2){
kiiras();
}
}while(lehetoseg!=3);
kilep();
return 0;
}
void foglalas(){
printf("Uj foglalas\n");
}
void kiiras(){
printf("Eddigi foglalasok kiirasa\n");
}
void kilep(){
printf("A kilepeshez nyomja meg az Enter billentyut!\n");
getch(ch);
}Eddig ennyit írtam meg belőle, de nem hiszem hogy többhöz kedvem lesz már ma este.
Ez rossz irány, és elgondolás?
Ezeket azért kérdem, mert én is még csak most tanulok, és szerintem tudni, mit hogy lehet a legjobban megvalósítani.
[ Szerkesztve ]
-
tototos
őstag
válasz DrojDtroll #5010 üzenetére
Hát mekkora méretet gondolsz a tömbnek? A foglalások számát nem közli a feladat így nem tudod mekkora tömbre van szükséged. A struktúra meg sokkal átláthatóbbá teszi a kódot, mint ha külön tömbben tárolod az összes adatot. Tehát ha már tömbbel szeretnéd megoldani akkor is inkább egy struktúra tömb a javasolt szerintem,
-
-
HAX
tag
Sziasztok.
Most ismerkedem a C nyelvvel, előtte nagyon-nagyon kezdő szinten foglalkoztam a C++ -al (Középiskolás szint ).
Sokat gyakorolgatok itthon, most egy olyan programot szeretnék írni ami bekér egy egész számot és megállapítja, hogy páros vagy páratlan vagy nulla. A feladat kiköti, hogy a bekérés és a kiíratás a main függvényben történjék de a működés lényegi része külön függvényben történjen. (És if szerkezettel kell megoldani.)
A programot megírtam, a páros és páratlan számokat jól megállapítja de a nullát megállapítani nem sikerül.
Amit tudni kell, hogy Ubuntu-n gedit szövegszerkesztőben dolgozom és a gcc -Wall -o paranccsal fordítok (terminálban), hibát nem is dob fel, csak a nullás értékre ugyanúgy páros értéket dob mint a páros számokra.
Itt a megoldásom:#include<stdio.h>
int e(int a)
{
if (a%2==0)
{
printf("A szam paros\n");
} else if (a%2!=0)
{
printf("A szam paratlan\n");
} else { printf("A szam nulla\n");
}
return 0;
}
int main()
{
int a;
printf("Adj meg egy szamot: \n");
scanf("%d", &a);
printf("%d", e(a));
return 0;
}Nem tudom mi lehet a hiba, remélem tudtok segíteni.
[ Szerkesztve ]
-
Jester01
veterán
Azért mondja a nullára, hogy páros, mivel az A sorrend a rossz, először a nullát ellenőrizd és csak utána a paritást.
Egyébként a feladatnak nem felel meg a programod, hiszen van kiírás a (csodaszép nevű) e függvényben is. A visszatérési érték pedig mindig nulla.
Annak sem sok értelme van, hogy else if (a%2!=0), hiszen az else már magában is ezt jelenti, tekintve, hogy az előző feltétel if (a%2==0) volt.
Jester
-
HAX
tag
válasz Jester01 #5014 üzenetére
Köszönöm a segítséget, kijavítottam a programot így már jó.
Ez a javított függvény:
int e(int a)
{
if (a==0)
{
printf("A szam nulla\n");
} else if (a%2==0)
{
printf("A szam paros\n");
} else { printf("A szam paratlan\n");
}
return 0;
}Igazad van a kiíratással kapcsolatban is, viszont ezt a függvényes, visszatérési értékes dolgot még nem teljesen tettem magamévá. Ha nem túl nagy teher akkor megtudnád nekem írni (vagy átírni) a feladatnak megfelelő függvényt? Ez valószínűleg jó támpont lenne nekem a többi feladathoz, inkább vizuális típus vagyok így könnyebben feltudnám fogni.
[ Szerkesztve ]
-
-
HAX
tag
válasz bucsupeti #5016 üzenetére
Köszönöm ez nagy segítség volt!
Most már kicsit tisztább is lett a kép közben.
Így gondoltad ugye?#include<stdio.h>
int e(int a)
{
if (a==0)
{
return 0;
} else if (a%2==0)
{
return 1;
} else { return 2;
}
}
int main()
{
int a;
printf("Adj meg egy szamot: \n");
scanf("%d", &a);
if (e(a)==1)
{
printf("A szam paros\n");
} else if (e(a)==2)
{
printf("A szam paratlan\n");
}else
{
printf("A szam nulla\n");
}
return 0;
} -
alapz@j
tag
Ha elfogadsz még egy tanácsot: próbálj meg átláthatóbb forrást írni, mert hosszabb programnál el fogsz veszni a kapcsos zárójelekben
#include<stdio.h>
int e(int a) {
if (a == 0) return 0;
return (a % 2) + 1;
}
int main() {
int a;
printf("Adj meg egy szamot: \n");
scanf("%d", &a);
switch (e(a)) {
case 1:
printf("A szam paros\n");
break;
case 2:
printf("A szam paratlan\n");
break;
case 0:
printf("A szam nulla\n");
break;
}
return 0;
}[ Szerkesztve ]
-
alapz@j
tag
válasz alapz@j #5018 üzenetére
Vagy még jobb:
#include <stdio.h>
int e(int a) {
if (a == 0) return 0;
return (a % 2) + 1;
}
int main() {
char *types[] = {"nulla", "paros", "paratlan"};
int a;
printf("Adj meg egy szamot: \n");
scanf("%d", &a);
printf("A szam %s\n", types[e(a)]);
return 0;
}[ Szerkesztve ]
-
bucsupeti
senior tag
Pontosan erre gondoltam. Azért kérték hogy bekérés és kiiratás a main()-ban legyen és ne a függvényben, mert így csupán az infót adja vissza a függvény csak a lényeget csinálja. Az hoyg azzal mit kezdesz (pl kiiratod) az már a függvénytől független lesz.
Itt már el is lehetne kezdeni az MVC modellről, de szerintem az még nem időszerű
A két kolléga tanácsait fogadd meg! Sokkal olvashatóbbá és egyszerűbbé lehet tenni a kódot ezekkel a módszerekkel.
[ Szerkesztve ]
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
alapz@j
tag
Ma reggel eszembe jutott még egy tömörítési lehetőség, de már csak haladóknak
int e(unsigned int a) {
return a == 0 ? 0 : (a % 2) + 1;
}[ Szerkesztve ]
-
axioma
veterán
-
axioma
veterán
válasz alapz@j #5026 üzenetére
Nem is a ternary a problemas nekem (bar egyes kodolasi szabvanyok tiltjak), hanem az hogy kihasznalod az osszefuggest. Ha ezt irtad volna tomoritesnek:
return a == 0 ? 0 :
a%2==0 ? 1 : 2;
akkor nem szoltam volna, mert tomor, pont ugyanaz mint az if-ek, es barmikor az egeszek kicserelhetoek. Persze meg jobb lenne kulon definialni a konstansokat, es utana
return a == 0 ? RESULT_0 :
a%2==0 ? RESULT_EVEN : RESULT_ODD;[ Szerkesztve ]
-
alapz@j
tag
Persze szubjektív, de számomra a C éppen az ehhez hasonló okos, elegáns, tömör és hatékony megoldásokat jelenti, aminek része az interfész átgondolt felépítése is. Az e() fgv. éppen azért tud ilyen jól működni, mert az általa visszaadott értékek párhuzamban vannak a megoldás matematikai összefüggéseivel.
Ha Javában írnám, tuti én is meghívnék benne 5 Factory-t, 3 Managert-t és 4 Providert, miközben Hibernate-el pakolnám relációs adatbázisba a közben keletkező objektumok százait
[ Szerkesztve ]
-
axioma
veterán
válasz alapz@j #5028 üzenetére
Hat, amint nem magadnak hanem csapatban es/vagy kesobb atadassal dolgozol, ezek a szep megoldasok adjak a karbantarthatatlansagot. Persze jo neked, ha ezzel akarsz kikerulhetetlen lenni a cegnel, de me'g akkor is, mielott azza valnal, velhetoleg egy projvez eszreveszi.
[Az meg hogy lenne mar logikus matematikailag, hogy az 1 a paros jele, 2 a paratlane???]
Persze nem arrol van szo, hogy ezt a ket sort nem kutya kotelessege barmely programozonak megfejteni tudni, hanem arrol, hogy ezt a stilust ha kicsit is nagyobb meretben is megtartod, akkor jon az hogy jol mukodik de egy rossz kod. Es most arrol nem is beszeltunk, hogy beszedesebb konstansoknal kisebb az osszekeveresi lehetoseg (ha meg hiba soran - pl. atkuldod masik gepre - modosulhat is, akkor nem art ne'mi Hamming-tavolsag, nalunk a C-sek kod.szab.-aban benne van hogy minden konstansra azt is alkalmazni kell).
Java-ban meg irtam en mar prog.verseny feladatokat is, egy darab main-nel, nem csak objektum-hegyek eseten alkalmazhato [jo hat nem volt idealis valasztas, de abban voltam a leggyakorlottabb, es kezrealloan telepitett kornyezet is ahhoz volt].[ Szerkesztve ]
-
-
nagyúr
Akinek a ternary operator bántja a szemét, az szerintem menjen el kapálni
while (!sleep) sheep++;
-
DrojDtroll
addikt
Lehetséges C-ben úgy beolvasni egy karaktert, vagy billentyűlenyomást, hogy nem kell hozzá Entert ütni?
-
Jester01
veterán
-
Jester01
veterán
válasz DrojDtroll #5036 üzenetére
Elvileg a SetConsoleMode függvénnyel ki kell kapcsolni az ENABLE_LINE_INPUT beállítást. De nem tudom, nekem linuxom van
Jester
-
Jester01
veterán
-
alapz@j
tag
válasz DrojDtroll #5040 üzenetére
Nem befolyásol semmit, ez a függvény neve:
#include <conio.h>
int _getch( void );
wint_t _getwch( void );[ Szerkesztve ]
-
alapz@j
tag
válasz DrojDtroll #5042 üzenetére
Valaki kijavít, ha tévednék, de szerintem sima getch() (már) nincs. Van a conio.h-s _getch() és van a stdio.h-s getchar().
-
DrojDtroll
addikt
válasz alapz@j #5043 üzenetére
kipróbáltam:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int ch;
ch=getchar();
printf("\n%c", ch);
ch=_getch();
printf("\n%c", ch);
ch=getch();
printf("\n%c", ch);
return 0;
}A getch() és a _getch() ugyan azt csinálta, beolvasta a karakter az Enter lenyomása nélkül, amíg a getchar() csak az Enter lenyomásával.
-
#34322688
törölt tag
Sziasztok.
Code Blocks programot kezdtem használni. Abban kérnék segítséget, hogyan lehet az elkészült program futatását jelző ablakban megjelenő szöveg nagyitását megoldani? Mert eléggé picik valamiért, és ezáltal olvashatatlan. -
kispx
addikt
válasz #34322688 #5047 üzenetére
> "Valaki tudna ezzel kapcsolatos könyvet?"
A parancssorban lévő betűk nagyításával kapcsolatban?Ha C nyelvről szeretnél könyvet akkor a téma összefoglalóban van egy pár felsorolva.
Ha az IDE használatáról keresel akkor arról csak egy wiki tudok mutatni.
-
DrojDtroll
addikt
A soros port kezeléséhez tudtok valami jó anyagot?
-
sssirius
tag
válasz DrojDtroll #5049 üzenetére
A termios.h headerben van definiálva a termios struktúra amin keresztül be tudsz állítani mindenfélét.
Ú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!