- Házimozi belépő szinten
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Sony MILC fényképezőgépcsalád
- Meglepően árazta az AMD a Ryzen AI Halo minigépet
- VR topik
- AMD FX
- Milyen ÚJ notebookot vegyek?
- Napokon belül váratlan versenyzővel bővül a VGA-piac
- Milyen TV-t vegyek?
- HiFi műszaki szemmel - sztereó hangrendszerek
-
6000 - 5901
6397 - 6301 6300 - 6201 6200 - 6101 6100 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 2001 2000 - 1
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
-
Frissítve: 2014-04-25 14:12 Téma összefoglaló
Új hozzászólás Aktív témák
-
elistvan
őstag
Ebben a programban jelenleg elég sok hiba van. Hirtelen néhány: A tartalmazza() függvényben a tomb címét hasonlítod a szam-hoz, nem a tomb egy elemét, itt tomb[i] kellene. Végig a kódban keverednek az íves (függvényhívás) és a szögletes (tömb eleme) zárójelek, ez így le sem tud fordulni. Mint pl. itt:
tippeltszamok(i) = szam;
vagy itt:
if(tippeltszamok(i) == nyeroszamok[j]){
A nyeroszamok-at fölöslegesen rakod át az emelkedo-be, mert már helyben rendezted azokat (ezért kiírni is fölösleges mindkettőt).
Függvényekkel rövidíteni akkor tudod, ha több ismétlődő feladatot hajt végre a programod. Itt maximum a számok kiírása az ilyen, tehát sok rövidítésre nincs lehetőség, így gondolom inkább arról lenne szó, hogy függvényekkel struktúráld a programod (ettől nem rövidebb, hanem olvashatóbb lesz). Be kell azonosítanod az egyes blokkokat a programodban, amik egy önálló részfeladatot hajtanak végre, és ezeket ki tudod emelni egy-egy önálló függvénybe. Most kb. ezeket csinálja a programod:
- tippek bekérése
- tippek kiírása
- nyerőszámok húzása
- találatok megkeresése
- nyerőszámok rendezése
- nyerőszámok kiírása (elég 1x)
- találatok kiírásaEzekre írhatsz függvényeket, amik megkapják bemenő paraméterben tömbö(ke)t, amivel dolgozniuk kell, hasonlóan a tartalmazza() függvényedhez. De ezek a függvények nem adnak semmilyen értéket vissza, void lesz a visszatérési típusuk és nem lesz bennük return.
Szia!
Köszi. Pont azt szerettem volna elérni, hogy átláthatóbb legyen. Rosszul fejeztem ki magam.
A dupla kiírás eredeti célja az lett volna, hogy előbb simán kiírja a ciklus ahogy megtalálta a számot aztán emelkedő sorrendben. (Mint a tv-s sorsoláson.)
A konkrét programon egy ilyen tömbös rövidítést meg tudnál mutatni? Mert ezt a részt nem igazán értem.
-
kovisoft
őstag
Az alábbi programomat, hogyan tudnám lerövidíteni függvényekkel? Tudom a tartalmazza az, de hogyan tudom, a találatokat és tippeket fügvényekkel megoldani?
/*Kenorsolás program találatok számát irja ki, és a nyerőszámokat emelkedő sorrendben*/
#include <stdlib.h>
#include <time.h>
#include <stdio.h>int tartalmazza(int tomb[], int hossz, int szam){
for(int i=0;i<hossz;i++){
if(tomb == szam){
return 1;
}
}
return 0;
}int main(){
int tippeltszamok[10] = {0};for(int i=0;i<10;i++){
int talalat(i);
int szam;
printf("%d. szám: ", i+1);
scanf("%d",&szam);
if(szam >= 1 && szam <= 80 && !tartalmazza(tippeltszamok,10,szam)){
tippeltszamok(i) = szam;
}else{
printf("Már tippelt vagy nem 1-80 közötti szám\n");
i--;
}
}printf("A játékba küldött számok:\n");
for(int i=0;i<10;i++){
printf("%d ", tippeltszamok(i));
}int nyeroszamok[20] = {0};
for(int i=0;i<20;i++){
int num = (rand() % (80 - 1 + 1)) + 1;
if(num >= 1 && num <= 80 && !tartalmazza(nyeroszamok,20,num)){
nyeroszamok(i) = num;
}else{
i--;
}
}int talalat[10] = {0};
int tIndex = 0;
for(int i=0;i<10;i++){
for(int j=0;j<20;j++){
if(tippeltszamok(i) == nyeroszamok[j]){
talalat[tIndex++] = nyeroszamok[j];
}
}
}
int tmp;
int j =0;
int emelkedo[20] = {0};
for( int i=0; i<10; i++)
{
for( int j=0; j<20; j++)
{
if(nyeroszamok[j] > nyeroszamok(i)) /*Ha a nyerőszámok tömb 1 eleme nagyobb mint a második*/
{
tmp = nyeroszamok(i); /*Az első elemet kitesszük a tmp változóba*/
nyeroszamok(i) = nyeroszamok[j]; /*A második elem átkerül az első helyre a sorban*/
nyeroszamok[j] = tmp; /*a tmp-ben tárolt 2. elem, átkerül a második helyre.*/
}
}
}
printf("\nAz e heti nyerőszámok növekvő sorrendben:\n");
for(int i=0;i<20;i++)
{
emelkedo(i) = nyeroszamok(i);
printf("%d ", emelkedo(i));
}
printf("\n\n");
printf("\nA heti nyerőszámok pedig:\n");
{
for(int i=0;i<20;i++)
{
printf("%d ", nyeroszamok(i));
}printf("\n%d találat:\n", tIndex);
for(int i=0;i<tIndex;i++){
printf("%d ", talalat(i));
}
}
return 0;
}Ebben a programban jelenleg elég sok hiba van. Hirtelen néhány: A tartalmazza() függvényben a tomb címét hasonlítod a szam-hoz, nem a tomb egy elemét, itt tomb[i] kellene. Végig a kódban keverednek az íves (függvényhívás) és a szögletes (tömb eleme) zárójelek, ez így le sem tud fordulni. Mint pl. itt:
tippeltszamok(i) = szam;
vagy itt:
if(tippeltszamok(i) == nyeroszamok[j]){
A nyeroszamok-at fölöslegesen rakod át az emelkedo-be, mert már helyben rendezted azokat (ezért kiírni is fölösleges mindkettőt).
Függvényekkel rövidíteni akkor tudod, ha több ismétlődő feladatot hajt végre a programod. Itt maximum a számok kiírása az ilyen, tehát sok rövidítésre nincs lehetőség, így gondolom inkább arról lenne szó, hogy függvényekkel struktúráld a programod (ettől nem rövidebb, hanem olvashatóbb lesz). Be kell azonosítanod az egyes blokkokat a programodban, amik egy önálló részfeladatot hajtanak végre, és ezeket ki tudod emelni egy-egy önálló függvénybe. Most kb. ezeket csinálja a programod:
- tippek bekérése
- tippek kiírása
- nyerőszámok húzása
- találatok megkeresése
- nyerőszámok rendezése
- nyerőszámok kiírása (elég 1x)
- találatok kiírásaEzekre írhatsz függvényeket, amik megkapják bemenő paraméterben tömbö(ke)t, amivel dolgozniuk kell, hasonlóan a tartalmazza() függvényedhez. De ezek a függvények nem adnak semmilyen értéket vissza, void lesz a visszatérési típusuk és nem lesz bennük return.
-
elistvan
őstag
Az alábbi programomat, hogyan tudnám lerövidíteni függvényekkel? Tudom a tartalmazza az, de hogyan tudom, a találatokat és tippeket fügvényekkel megoldani?
/*Kenorsolás program találatok számát irja ki, és a nyerőszámokat emelkedő sorrendben*/
#include <stdlib.h>
#include <time.h>
#include <stdio.h>int tartalmazza(int tomb[], int hossz, int szam){
for(int i=0;i<hossz;i++){
if(tomb == szam){
return 1;
}
}
return 0;
}int main(){
int tippeltszamok[10] = {0};for(int i=0;i<10;i++){
int talalat(i);
int szam;
printf("%d. szám: ", i+1);
scanf("%d",&szam);
if(szam >= 1 && szam <= 80 && !tartalmazza(tippeltszamok,10,szam)){
tippeltszamok(i) = szam;
}else{
printf("Már tippelt vagy nem 1-80 közötti szám\n");
i--;
}
}printf("A játékba küldött számok:\n");
for(int i=0;i<10;i++){
printf("%d ", tippeltszamok(i));
}int nyeroszamok[20] = {0};
for(int i=0;i<20;i++){
int num = (rand() % (80 - 1 + 1)) + 1;
if(num >= 1 && num <= 80 && !tartalmazza(nyeroszamok,20,num)){
nyeroszamok(i) = num;
}else{
i--;
}
}int talalat[10] = {0};
int tIndex = 0;
for(int i=0;i<10;i++){
for(int j=0;j<20;j++){
if(tippeltszamok(i) == nyeroszamok[j]){
talalat[tIndex++] = nyeroszamok[j];
}
}
}
int tmp;
int j =0;
int emelkedo[20] = {0};
for( int i=0; i<10; i++)
{
for( int j=0; j<20; j++)
{
if(nyeroszamok[j] > nyeroszamok(i)) /*Ha a nyerőszámok tömb 1 eleme nagyobb mint a második*/
{
tmp = nyeroszamok(i); /*Az első elemet kitesszük a tmp változóba*/
nyeroszamok(i) = nyeroszamok[j]; /*A második elem átkerül az első helyre a sorban*/
nyeroszamok[j] = tmp; /*a tmp-ben tárolt 2. elem, átkerül a második helyre.*/
}
}
}
printf("\nAz e heti nyerőszámok növekvő sorrendben:\n");
for(int i=0;i<20;i++)
{
emelkedo(i) = nyeroszamok(i);
printf("%d ", emelkedo(i));
}
printf("\n\n");
printf("\nA heti nyerőszámok pedig:\n");
{
for(int i=0;i<20;i++)
{
printf("%d ", nyeroszamok(i));
}printf("\n%d találat:\n", tIndex);
for(int i=0;i<tIndex;i++){
printf("%d ", talalat(i));
}
}
return 0;
} -
kovisoft
őstag
Köszi a segítséget!
Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:
#include <stdio.h>typedef struct{unsigned int tomb[50];unsigned int szam, db;unsigned int meret, meret2;} Nehez;Nehez meret(){Nehez hazi;hazi.meret2=0;hazi.db=0;scanf("%u", &hazi.meret);return hazi;}Nehez beker(){Nehez hazi;unsigned int h, a;for(h=0; h<hazi.meret; h++){scanf("%u", &hazi.szam);a=0;while(a<h && hazi.szam!=hazi.tomb[a]){a++;}if(a==h){hazi.tomb[hazi.meret2]=hazi.szam;hazi.meret2++;}}return hazi;}Nehez rendez(Nehez hazi){unsigned int h, a;for(h=0; h<hazi.meret2; h++){for(a=h+1; a<hazi.meret2; a++){if(hazi.tomb[h]>hazi.tomb[a]){hazi.szam=hazi.tomb[a];hazi.tomb[a]=hazi.tomb[h];hazi.tomb[h]=hazi.szam;}}}return hazi;}Nehez szamol(Nehez hazi){unsigned int h, a, z, i;for(h=0; h<hazi.meret2; h++){for(a=h+1; a<hazi.meret2; a++){for(z=a+1; z<hazi.meret2; z++){for(i=z+1; i<hazi.meret2; i++){if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z]){hazi.db++;}}}}}return hazi;}void kiir(Nehez hazi){printf("%u", hazi.db);}int main(){Nehez hazi;hazi=meret();hazi=beker();hazi=rendez(hazi);hazi=szamol(hazi);kiir(hazi);return 0;}
Remek! Még annyit lehet egyszerűsíteni, hogy a beolvasásnál egy füst alatt el lehet intézni a rendezést is és az egyező számok kiszűrését is:
Beolvasod a következő számot, megkeresed az első olyan szám indexét a (rendezett) tömbödben, aminél nem nagyobb. Ha megegyezik vele, akkor eldobod, mert van már ilyen szám. Ha pedig kisebb nála, akkor ettől az indextől kezdve eggyel hátrébb pakolod a számokat a tömbben, és beszúrod ide a beolvasott számot.
És ne feledkezz meg az adatok ellenőrzéséről sem, pl. mi van, ha 50-nél nagyobb számot adnak meg méretnek? Ekkor ki fogsz címezni a tömbödből.
-
DEV_NULL
őstag
Szerintem a gond még azzal a résszel van, ahol kiszűröd az azonos számokat és csak a különbözőket pakolod át a hazi.cim-ből a hazi.cim2-be (ahol az ominózus ++ is van). Nem elég átrakni a ++-t a végére, hanem kicsit át kell alakítani magát a ciklust is, hiszen így most a 0-dik cim2 elembe belerakod a 0-dik és az 1-ső cim elemet is (a legelső elvész). Mivel a hazi.csere=0 elemet már a ciklus előtt átraktad, ezért a ciklust hazi.csere=1 értékről kellene indítani.
Sokat segíthet, ha debug kiíratásokat helyezel el a kódban az egyes lépések után. Pl. kiírod a rendezett elemeket, az azonos elemek kiszűrése után maradtakat, ill. azokat a számnégyeseket, amikre egyeznek a megkívánt összegek. Ezekből látni fogod, hogy melyik lépésnél romlik el valami.
Köszi a segítséget!
Mivel sehogy sem akart működni egy teljesen új, sokkal egyszerűbb megközelítésből oldottam meg végül:
#include <stdio.h>typedef struct{unsigned int tomb[50];unsigned int szam, db;unsigned int meret, meret2;} Nehez;Nehez meret(){Nehez hazi;hazi.meret2=0;hazi.db=0;scanf("%u", &hazi.meret);return hazi;}Nehez beker(){Nehez hazi;unsigned int h, a;for(h=0; h<hazi.meret; h++){scanf("%u", &hazi.szam);a=0;while(a<h && hazi.szam!=hazi.tomb[a]){a++;}if(a==h){hazi.tomb[hazi.meret2]=hazi.szam;hazi.meret2++;}}return hazi;}Nehez rendez(Nehez hazi){unsigned int h, a;for(h=0; h<hazi.meret2; h++){for(a=h+1; a<hazi.meret2; a++){if(hazi.tomb[h]>hazi.tomb[a]){hazi.szam=hazi.tomb[a];hazi.tomb[a]=hazi.tomb[h];hazi.tomb[h]=hazi.szam;}}}return hazi;}Nehez szamol(Nehez hazi){unsigned int h, a, z, i;for(h=0; h<hazi.meret2; h++){for(a=h+1; a<hazi.meret2; a++){for(z=a+1; z<hazi.meret2; z++){for(i=z+1; i<hazi.meret2; i++){if(hazi.tomb[h]+hazi.tomb[i]==hazi.tomb[a]+hazi.tomb[z]){hazi.db++;}}}}}return hazi;}void kiir(Nehez hazi){printf("%u", hazi.db);}int main(){Nehez hazi;hazi=meret();hazi=beker();hazi=rendez(hazi);hazi=szamol(hazi);kiir(hazi);return 0;}
-
kovisoft
őstag
Szerintem a gond még azzal a résszel van, ahol kiszűröd az azonos számokat és csak a különbözőket pakolod át a hazi.cim-ből a hazi.cim2-be (ahol az ominózus ++ is van). Nem elég átrakni a ++-t a végére, hanem kicsit át kell alakítani magát a ciklust is, hiszen így most a 0-dik cim2 elembe belerakod a 0-dik és az 1-ső cim elemet is (a legelső elvész). Mivel a hazi.csere=0 elemet már a ciklus előtt átraktad, ezért a ciklust hazi.csere=1 értékről kellene indítani.
Sokat segíthet, ha debug kiíratásokat helyezel el a kódban az egyes lépések után. Pl. kiírod a rendezett elemeket, az azonos elemek kiszűrése után maradtakat, ill. azokat a számnégyeseket, amikre egyeznek a megkívánt összegek. Ezekből látni fogod, hogy melyik lépésnél romlik el valami.
-
DEV_NULL
őstag
Csak tipp, de szerintem a lenti sorban kicímzel a hazi.cim2 tömbből, ugyanis amikor hazi.csere=hazi.meret2-1, akkor a ++ miatt hazi.cim2[hazi.meret2] lesz felülírva, de az már az allokált tömb után van:
hazi.cim2[++hazi.csere]=hazi.cim[h];Elképzelhető, hogy elég lenne a ++-t hátulra tenni (hazi.csere++), de mondom ezt úgy, hogy nem értelmeztem, mit csinál pontosan a programod.
Szia!
Köszi a választ. A ++t áttéve megszűnik a malloc hiba, viszont a kimeneten a darabszám, sajnos nem jó. Valamiért vagy több, vagy kevesebb, mint amennyinek lennie kellene...
-
kovisoft
őstag
Sziasztok!
A problémám amire tőletek várnék megoldást; a feladat egy C program ami először bekér egy számot, majd bekér ennyi de maximum 50 számot. Ezeket megszűri, hogy ne legyen benne ismétlődés, majd olyan ismétlődés nélküli számnégyeseket csinál belőlük ahol az első és utolsó szám összege megegyezik a második és harmadik szám összegével és a végén ezek darabszámát. Ezt egy robot ellenőrzi. Két gond van, az egyik, hogy malloc hibával elszáll, vagy ha program kimenete több ezer megfelelő számnégyes, akkor még néhány száz darab nullás számnégyest kipörget a végére... Én már kezdem feladni, bízom benne, tudtok segíteni. Remélem sikerül normálisan bemásolni a kódot, most írok ide először...
Hiba: prog: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)
Köszi előre is!
#include <stdio.h>#include <stdlib.h>typedef struct dec10Hazi{unsigned int meret, meret2;unsigned int csere, csere2;unsigned int *cim, *cim2;unsigned int tomb[4];unsigned int db;} Nehez;int main(){Nehez hazi;unsigned int h, a, z, i;scanf("%u", &hazi.meret);hazi.cim=malloc(sizeof(unsigned int)*hazi.meret);for(h=0; h<hazi.meret; h++){scanf("%u", &hazi.cim[h]);}hazi.csere2=1;while(hazi.csere2){for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]>hazi.cim[h+1]){hazi.csere=hazi.cim[h];hazi.cim[h]=hazi.cim[h+1];hazi.cim[h+1]=hazi.csere;}}hazi.csere2=0;for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]>hazi.cim[h+1]){hazi.csere2=1;break;}}}hazi.meret2=0;for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]<hazi.cim[h+1]){hazi.meret2++;}}hazi.meret2++;hazi.cim2=malloc(sizeof(unsigned int)*hazi.meret2);h=0;hazi.csere=0;hazi.cim2[hazi.csere]=hazi.cim[h];h++;while(hazi.csere<hazi.meret2){if(hazi.cim[h]>hazi.cim2[hazi.csere]){hazi.cim2[++hazi.csere]=hazi.cim[h];h++;}else{h++;}}hazi.db=0;for(h=0; h<hazi.meret-3; h++){hazi.tomb[0]=hazi.cim2[h];for(a=h+1; a<hazi.meret-2; a++){hazi.tomb[1]=hazi.cim2[a];for(z=a+1; z<hazi.meret-1; z++){hazi.tomb[2]=hazi.cim2[z];for(i=z+1; i<hazi.meret; i++){hazi.tomb[3]=hazi.cim2[i];if(hazi.tomb[0]+hazi.tomb[3]==hazi.tomb[1]+hazi.tomb[2]){hazi.db++;}}}}}printf("%u\n", hazi.db);free(hazi.cim);free(hazi.cim2);return 0;}Csak tipp, de szerintem a lenti sorban kicímzel a hazi.cim2 tömbből, ugyanis amikor hazi.csere=hazi.meret2-1, akkor a ++ miatt hazi.cim2[hazi.meret2] lesz felülírva, de az már az allokált tömb után van:
hazi.cim2[++hazi.csere]=hazi.cim[h];Elképzelhető, hogy elég lenne a ++-t hátulra tenni (hazi.csere++), de mondom ezt úgy, hogy nem értelmeztem, mit csinál pontosan a programod.
-
DEV_NULL
őstag
Sziasztok!
A problémám amire tőletek várnék megoldást; a feladat egy C program ami először bekér egy számot, majd bekér ennyi de maximum 50 számot. Ezeket megszűri, hogy ne legyen benne ismétlődés, majd olyan ismétlődés nélküli számnégyeseket csinál belőlük ahol az első és utolsó szám összege megegyezik a második és harmadik szám összegével és a végén ezek darabszámát. Ezt egy robot ellenőrzi. Két gond van, az egyik, hogy malloc hibával elszáll, vagy ha program kimenete több ezer megfelelő számnégyes, akkor még néhány száz darab nullás számnégyest kipörget a végére... Én már kezdem feladni, bízom benne, tudtok segíteni. Remélem sikerül normálisan bemásolni a kódot, most írok ide először...
Hiba: prog: malloc.c:2401: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. Aborted (core dumped)
Köszi előre is!
#include <stdio.h>#include <stdlib.h>typedef struct dec10Hazi{unsigned int meret, meret2;unsigned int csere, csere2;unsigned int *cim, *cim2;unsigned int tomb[4];unsigned int db;} Nehez;int main(){Nehez hazi;unsigned int h, a, z, i;scanf("%u", &hazi.meret);hazi.cim=malloc(sizeof(unsigned int)*hazi.meret);for(h=0; h<hazi.meret; h++){scanf("%u", &hazi.cim[h]);}hazi.csere2=1;while(hazi.csere2){for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]>hazi.cim[h+1]){hazi.csere=hazi.cim[h];hazi.cim[h]=hazi.cim[h+1];hazi.cim[h+1]=hazi.csere;}}hazi.csere2=0;for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]>hazi.cim[h+1]){hazi.csere2=1;break;}}}hazi.meret2=0;for(h=0; h<hazi.meret-1; h++){if(hazi.cim[h]<hazi.cim[h+1]){hazi.meret2++;}}hazi.meret2++;hazi.cim2=malloc(sizeof(unsigned int)*hazi.meret2);h=0;hazi.csere=0;hazi.cim2[hazi.csere]=hazi.cim[h];h++;while(hazi.csere<hazi.meret2){if(hazi.cim[h]>hazi.cim2[hazi.csere]){hazi.cim2[++hazi.csere]=hazi.cim[h];h++;}else{h++;}}hazi.db=0;for(h=0; h<hazi.meret-3; h++){hazi.tomb[0]=hazi.cim2[h];for(a=h+1; a<hazi.meret-2; a++){hazi.tomb[1]=hazi.cim2[a];for(z=a+1; z<hazi.meret-1; z++){hazi.tomb[2]=hazi.cim2[z];for(i=z+1; i<hazi.meret; i++){hazi.tomb[3]=hazi.cim2[i];if(hazi.tomb[0]+hazi.tomb[3]==hazi.tomb[1]+hazi.tomb[2]){hazi.db++;}}}}}printf("%u\n", hazi.db);free(hazi.cim);free(hazi.cim2);return 0;} -
#PeTeY#
aktív tag
-
kovisoft
őstag
Az i=0,1,...,n-1 sorozatot úgy fordítod meg, hogy i helyett n-i-1 -et használsz (i=0 --> n-i-1=n-1, i=n-1 --> n-i-1=0). És akkor mindenhol indulhat minden i-s és j-s ciklusod 0-ról egyesével felfelé, és a sorokat úgy fordítod meg, hogy i helyett n-i-1 -et használsz az indexben azokon a helyeken, ahol a kulcs-csal is indexelsz.
Persze nem muszáj így, csinálhatod azt is, hogy marad az i az indexben, de az i-s ciklusod n-1-ről indul lefelé 0-ig. A végeredmény ugyanaz lesz.
-
#PeTeY#
aktív tag
Akkor gondolom sztornó, amit írtam, ha végülis maga a kódolás jó úgy, ahogy csináltad.
A kódolásnál eredeti sorrendben ([i][j]) töltöd fel a tomb tömböt és a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) olvasod ki.
Dekódolásnál fordítva kellene csinálni: a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) töltöd fel a tomb tömböt és eredeti sorrendben ([i][j]) olvasod ki.
Nagyon köszönöm, megnézem este.
Amúgy miért n-i-1? Ezt a részt nem teljesen érem.
-
kovisoft
őstag
Nagyon köszönöm. Már munkahelyen vagyok, este megnézem.

Bár, most első ránézésre... Na, megpróbálom majd értelmezni. És tisztáznám, mit is akarok, mert valószínű nem voltam valami összeszedett már tegnap este. Mondjuk nem biztos, hogy most jobb lesz...
Szóval a feladat szerint a program egy fájlból kiolvas majd 3 dolgot. Egy egész számot, mint kód. Ennyi oszlopa lesz majd a mátrixnak, amibe be kell "tölteni" a harmadik paraméterben kapott szöveget, amit kódolni, vagy dekódolni kell. Illetve egy kulcsot azaz számsort, ami ebben a mátrixban mutatja az oszlopok sorrendjét. Kódolásnál be kell írni sorfolytonosan a mátrixba a szöveget: azaz a[0][0]-ba az első karakter, a[0][1]-be második, stb, és kiolvasásnál a kulcs által megadott sorrendben kell kiírni. Nálam a konkrét kódban, ugye a 3. oszlop utolsó sorában lévő karakter lesz az első, aztán ugyanezen oszlop utolsó előtti sorában lévő a második egészen az első sorig, majd jön a 4. oszlop utolsó sorában lévő, stb. Ezt a segítségetekkel sikerült is megcsinálni. Viszont a dekódolásnál ezt írja szó szerint a feladat: "A dekódoláshoz az adott sorrendben töltjük fel az oszlopokat, majd a szöveget sorfolytonosan olvassuk ki a táblázatból..." Azaz ha jól értem, fordítva kéne, mint a kódolásnál. Bocs a hosszú szövegért.Akkor gondolom sztornó, amit írtam, ha végülis maga a kódolás jó úgy, ahogy csináltad.
A kódolásnál eredeti sorrendben ([i][j]) töltöd fel a tomb tömböt és a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) olvasod ki.
Dekódolásnál fordítva kellene csinálni: a kulcs szerint indexelve ([n-i-1][kulcs[j]-1]) töltöd fel a tomb tömböt és eredeti sorrendben ([i][j]) olvasod ki.
-
#PeTeY#
aktív tag
Ha jól értem, hogy mit szeretnél, akkor szerintem nem a második dupla ciklusban (amikor a ki2-be írsz) kellene alkalmazni a
kulcs[j]-1-gyel való indexelést, hanem az első dupla ciklusban, amikor kitöltöd atomb-öt (és persze ekkor oda kell figyelni arra is, hogy a ki file-ba továbbra is a jó karaktert írd ki):for (i=0; i<n; ++i) {for (j=0; j<kod; ++j) {tomb[i][kulcs[j]-1]=szoveg[count];fprintf(ki, "%c ", szoveg[count]);count=count+1;}fprintf(ki, "\n");}A ki2-be történő kiírásnál pedig már csak szimplán kiszedni a j-edik oszlopot. Mert így most pont a kulcs inverz permutációját hajtod végre.
Nagyon köszönöm. Már munkahelyen vagyok, este megnézem.

Bár, most első ránézésre... Na, megpróbálom majd értelmezni. És tisztáznám, mit is akarok, mert valószínű nem voltam valami összeszedett már tegnap este. Mondjuk nem biztos, hogy most jobb lesz...
Szóval a feladat szerint a program egy fájlból kiolvas majd 3 dolgot. Egy egész számot, mint kód. Ennyi oszlopa lesz majd a mátrixnak, amibe be kell "tölteni" a harmadik paraméterben kapott szöveget, amit kódolni, vagy dekódolni kell. Illetve egy kulcsot azaz számsort, ami ebben a mátrixban mutatja az oszlopok sorrendjét. Kódolásnál be kell írni sorfolytonosan a mátrixba a szöveget: azaz a[0][0]-ba az első karakter, a[0][1]-be második, stb, és kiolvasásnál a kulcs által megadott sorrendben kell kiírni. Nálam a konkrét kódban, ugye a 3. oszlop utolsó sorában lévő karakter lesz az első, aztán ugyanezen oszlop utolsó előtti sorában lévő a második egészen az első sorig, majd jön a 4. oszlop utolsó sorában lévő, stb. Ezt a segítségetekkel sikerült is megcsinálni. Viszont a dekódolásnál ezt írja szó szerint a feladat: "A dekódoláshoz az adott sorrendben töltjük fel az oszlopokat, majd a szöveget sorfolytonosan olvassuk ki a táblázatból..." Azaz ha jól értem, fordítva kéne, mint a kódolásnál. Bocs a hosszú szövegért. -
kovisoft
őstag
Valóban. Nagyon köszi... Logikus, hogy sorok esetében lentről felfelé kell haladni, ha azt akarom, hogy így legyen kiírva.
Pár év és belejövök.
Még egy kérdésem lenne, mert ehhez már nagyon fáradt vagyok: Hogyan oldom meg, ha azt szeretném, hogy a titkosítani kapott szöveget a kulcsnak megfelelően rendezze oszlopokba? Azaz itt az első négy karakter kerüljön a 3. oszlopba, úgy hogy az első karakter van a legalsó sorban...Ha jól értem, hogy mit szeretnél, akkor szerintem nem a második dupla ciklusban (amikor a ki2-be írsz) kellene alkalmazni a
kulcs[j]-1-gyel való indexelést, hanem az első dupla ciklusban, amikor kitöltöd atomb-öt (és persze ekkor oda kell figyelni arra is, hogy a ki file-ba továbbra is a jó karaktert írd ki):for (i=0; i<n; ++i) {for (j=0; j<kod; ++j) {tomb[i][kulcs[j]-1]=szoveg[count];fprintf(ki, "%c ", szoveg[count]);count=count+1;}fprintf(ki, "\n");}A ki2-be történő kiírásnál pedig már csak szimplán kiszedni a j-edik oszlopot. Mert így most pont a kulcs inverz permutációját hajtod végre.
-
#PeTeY#
aktív tag
Mit jelent, hogy "de nem alulról felfelé"? A sorokat fordított sorrendben kellene kiírni? Ebben az esetben haladj fordított sorrendben a legutolsó i-s ciklusoddal:
for(i=n-1; i>=0; i--) {
A másik lehetőség, hogy a tomb-ből olvasod ki tükrözve a sorokat:kodolt[l] = tomb[n-i-1][kulcs[j]-1];Valóban. Nagyon köszi... Logikus, hogy sorok esetében lentről felfelé kell haladni, ha azt akarom, hogy így legyen kiírva.
Pár év és belejövök.
Még egy kérdésem lenne, mert ehhez már nagyon fáradt vagyok: Hogyan oldom meg, ha azt szeretném, hogy a titkosítani kapott szöveget a kulcsnak megfelelően rendezze oszlopokba? Azaz itt az első négy karakter kerüljön a 3. oszlopba, úgy hogy az első karakter van a legalsó sorban... -
kovisoft
őstag
Rendben. Szóval, a lényeg, hogy kódolni kéne egy szöveget úgy, hogy egy megadott kulcs alapján olvasom ki oszloponként a szöveget alulról felfelé. Sikerül megcsinálni a kódolás részét, azaz megfelelő sorrendben adja vissza az oszlopokat, de nem alulról felfelé. És nem látom, miért. Bár biztos ez is tök egyszerű:
#include <stdio.h>#include <stdlib.h>int main(){int kod = 7;int kulcs[32] = {3,4,2,1,5,6,7};char szoveg[256] = {"eztaszovegetkelltitkositanod"};int n = 28 / kod;char tomb[n][kod];FILE* ki = fopen("ki.txt", "w");if (ki == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(1);}int i, j, count = 0;for (i=0; i<n; ++i) {for (j=0; j<kod; ++j) {tomb[i][j]=szoveg[count];count=count+1;fprintf(ki, "%c ", tomb[i][j]);}fprintf(ki, "\n");}fclose(ki);FILE* ki2 = fopen("ki2.txt", "w");if (ki2 == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(2);}char kodolt[256];int l=0;for(j=0; j<kod; j++) {for(i=0; i<n; i++) {kodolt[l] = tomb[i][kulcs[j]-1];fprintf(ki2, "%c", kodolt[l]);}}fclose(ki2);return 0;}Mit jelent, hogy "de nem alulról felfelé"? A sorokat fordított sorrendben kellene kiírni? Ebben az esetben haladj fordított sorrendben a legutolsó i-s ciklusoddal:
for(i=n-1; i>=0; i--) {
A másik lehetőség, hogy a tomb-ből olvasod ki tükrözve a sorokat:kodolt[l] = tomb[n-i-1][kulcs[j]-1]; -
#PeTeY#
aktív tag
Rendben. Szóval, a lényeg, hogy kódolni kéne egy szöveget úgy, hogy egy megadott kulcs alapján olvasom ki oszloponként a szöveget alulról felfelé. Sikerül megcsinálni a kódolás részét, azaz megfelelő sorrendben adja vissza az oszlopokat, de nem alulról felfelé. És nem látom, miért. Bár biztos ez is tök egyszerű:
#include <stdio.h>#include <stdlib.h>int main(){int kod = 7;int kulcs[32] = {3,4,2,1,5,6,7};char szoveg[256] = {"eztaszovegetkelltitkositanod"};int n = 28 / kod;char tomb[n][kod];FILE* ki = fopen("ki.txt", "w");if (ki == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(1);}int i, j, count = 0;for (i=0; i<n; ++i) {for (j=0; j<kod; ++j) {tomb[i][j]=szoveg[count];count=count+1;fprintf(ki, "%c ", tomb[i][j]);}fprintf(ki, "\n");}fclose(ki);FILE* ki2 = fopen("ki2.txt", "w");if (ki2 == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(2);}char kodolt[256];int l=0;for(j=0; j<kod; j++) {for(i=0; i<n; i++) {kodolt[l] = tomb[i][kulcs[j]-1];fprintf(ki2, "%c", kodolt[l]);}}fclose(ki2);return 0;} -
kovisoft
őstag
Szerintem inkább dobd be ide a problémás kódrészletet. Egyfelől többen is rá tudnak nézni, másrészt mások is tanulhatnak belőle.
-
#PeTeY#
aktív tag
Haladok a beadandómmal szépen lassan, nagy nehezen kitaláltam, minek hogyan is kellene működnie és működik is, de megint sikerült elakadnom. Esetleg valaki rá tudna nézni privátban a kódomra, hogy mi vele a gond?
-
#PeTeY#
aktív tag
-
buherton
őstag
-
#PeTeY#
aktív tag
-
kovisoft
őstag
Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá.
Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:#include <stdio.h>#include <stdlib.h>int main(){char szoveg[256] = {"eztaszovegetkelltitkositanod"};char tomb[4][7];FILE* ki = fopen("ki.txt", "w");if (ki == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(1);}int i, j, count = 0;for (i=0; i<4; ++i) {for (j=0; j<7; ++j) {tomb[i][j]=szoveg[count];count=count+1;fprintf(ki, "%c ", tomb[i][j]);}}return 0;}Előre is köszönök minden segítséget.
Ha 4 sorban szeretnél soronként 7 karaktert kiíratni, akkor a belső j-s ciklusod után írj ki egy sortörést:
fprintf(ki, "\n"); -
buherton
őstag
Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá.
Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:#include <stdio.h>#include <stdlib.h>int main(){char szoveg[256] = {"eztaszovegetkelltitkositanod"};char tomb[4][7];FILE* ki = fopen("ki.txt", "w");if (ki == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(1);}int i, j, count = 0;for (i=0; i<4; ++i) {for (j=0; j<7; ++j) {tomb[i][j]=szoveg[count];count=count+1;fprintf(ki, "%c ", tomb[i][j]);}}return 0;}Előre is köszönök minden segítséget.
Hiányzik a sortörés karakter:
\n. -
#PeTeY#
aktív tag
Sziasztok. Segítséget szeretnék kérni. Elkezdtem teljesen nulláról programozást tanulni, beiratkoztam egyetemre 38 éves fejjjel. Egyelőre nagyon tetszik, már csak azért is, mert teljesen sötét vagyok hozzá.
Szóval belefutottam egy feladatba (beadandó) és próbálom megoldani. A program egy fájlból kap mindenféle paramétert, ami alapján titkosít egy szöveget, amit kiír egy másik fájlba, de nem is ez a lényeg. Igyekszem lebontani kisebb részekre, de már az elején elakadtam. Azt szeretném megoldani, hogy egy szöveget mátrixos elrendezésben írjon ki, de nem sikerül. Egyszerűen csak kiírja egy sorba. Mit rontok el? Eddig jutottam:#include <stdio.h>#include <stdlib.h>int main(){char szoveg[256] = {"eztaszovegetkelltitkositanod"};char tomb[4][7];FILE* ki = fopen("ki.txt", "w");if (ki == NULL) {printf("Nem sikerült megynitni a ki.txt-t! (%d)\n", __LINE__);exit(1);}int i, j, count = 0;for (i=0; i<4; ++i) {for (j=0; j<7; ++j) {tomb[i][j]=szoveg[count];count=count+1;fprintf(ki, "%c ", tomb[i][j]);}}return 0;}Előre is köszönök minden segítséget.
-
buherton
őstag
-
m3zcal
csendes tag
-
m3zcal
csendes tag
Sziasztok,
A soros port programozassal kapcsolatban kerdeznem:
Szerintetek hany eszkozt (pl DC rele) lehet vezerelni egy soros portrol (DB-9) ?
Az erdekelne, hogy a TX-en kivul esetleg a tobbi labat is lehet "folyamatos" jel kikuldesre birni?
(pl. DCD, DSR,..) -
Rula
tag
C-ben nem tudsz így stringeket összehasonlítani, mert a kar != "end" a két stringre mutató pointert hasonlítja össze, nem pedig a stringek tartalmát. Használd az strcmp() függvényt stringek összehasonlítására (vagy strcmpi-t, ha nem számít a kis-nagybetű):
} while (strcmp(kar, "end") != 0);Köszi! (Főleg azt, hogy szántál időt arra is, hogy leírd miért nem jó úgy!
) -
kovisoft
őstag
Sziasztok! Sikeresen a C++ topikba írtam ezt, ott pedig kiderült, hogy ez pedig sima C, szóval itt is feltenném a kérdésem.
Szeretnék egy olyan (hátul tesztelő) ciklust létrehozni, ami akkor lép ki, hogy ha az user beírja, hogy "end". Viszont nem igazán sikerül. Köszi előre is a segítséget!
Ahogy eddig próbáltam, siker nélkül:#include <iostream>int main(){setlocale(LC_ALL, "");char kar[80];do {printf("írjon be valamit:\n");scanf("%s", kar);} while (kar != "end");}C-ben nem tudsz így stringeket összehasonlítani, mert a kar != "end" a két stringre mutató pointert hasonlítja össze, nem pedig a stringek tartalmát. Használd az strcmp() függvényt stringek összehasonlítására (vagy strcmpi-t, ha nem számít a kis-nagybetű):
} while (strcmp(kar, "end") != 0); -
Rula
tag
Sziasztok! Sikeresen a C++ topikba írtam ezt, ott pedig kiderült, hogy ez pedig sima C, szóval itt is feltenném a kérdésem.
Szeretnék egy olyan (hátul tesztelő) ciklust létrehozni, ami akkor lép ki, hogy ha az user beírja, hogy "end". Viszont nem igazán sikerül. Köszi előre is a segítséget!
Ahogy eddig próbáltam, siker nélkül:#include <iostream>int main(){setlocale(LC_ALL, "");char kar[80];do {printf("írjon be valamit:\n");scanf("%s", kar);} while (kar != "end");} -
elistvan
őstag
-
kovisoft
őstag
Persze, mert hamarabb vizsgálod azt, hogy >=60, mint hogy >=70, stb. Emiatt ha monduk 75% az eredmény, az már rögtön bele fog esni a >=60 feltételbe. Meg kellene fordítani a feltételek sorrendjét: >=90, >=80, stb.
-
elistvan
őstag
A szazalek valtozot nem int-nek vetted fel, hanem float-nak. Egy osztás eredménye kerül bele, ezt hasonlítod utána egész számokkal. A konkrét esetben valóban csak egész szám kerülhet bele (mivel az osztást és a szorzást is int-eken végzed), de amúgy ha a képletben már eleve float-okkal dolgoznál, és mondjuk 47 pont lenne a maximum, amiből valaki 28-at ért el, akkor a szazalek értéke 59.57 lenne, ami se nem <=59, se nem >=60, hanem a kettő között van, de arra nincs feltételed. Ezért írtam, hogy jobb lenne csupa int-ekkel dolgozni. Vagy lehet float-okkal is, de akkor át kell írnod a feltételeket (és nem árt arra is gondolni, hogy bizonyos hányadosokat csak kerekítve lehet float-on ábrázolni).
Ez a kód már futtatja de 2-estől már nem adj jobbat! (Ami nekem speciel ebből a tantárgyből bőven jó.) Pedig 12-től már 3-asnak kellene lennie. Egyébként igazad van. Köszi.
-
kovisoft
őstag
A szazalek valtozot nem int-nek vetted fel, hanem float-nak. Egy osztás eredménye kerül bele, ezt hasonlítod utána egész számokkal. A konkrét esetben valóban csak egész szám kerülhet bele (mivel az osztást és a szorzást is int-eken végzed), de amúgy ha a képletben már eleve float-okkal dolgoznál, és mondjuk 47 pont lenne a maximum, amiből valaki 28-at ért el, akkor a szazalek értéke 59.57 lenne, ami se nem <=59, se nem >=60, hanem a kettő között van, de arra nincs feltételed. Ezért írtam, hogy jobb lenne csupa int-ekkel dolgozni. Vagy lehet float-okkal is, de akkor át kell írnod a feltételeket (és nem árt arra is gondolni, hogy bizonyos hányadosokat csak kerekítve lehet float-on ábrázolni).
-
elistvan
őstag
Int csak egész szám lehet tudomásom szerint, a 59,5 az pedig tizedes tehát float, vagy én tudom rosszul?
-
kovisoft
őstag
Az összes változó lehet int, ha először szorzol, utána osztasz.
Szerk: sőt a szazalek<=59 és szazalek>=60 eleve igényelné azt, hogy a szazalek int legyen, hiszen mi van, ha 59.5 a szazalek? (bár a jelen kiinduló adatokból ez most nem lehetséges)
-
Domonkos
addikt
-
elistvan
őstag
-
kovisoft
őstag
Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.
Sziasztok!
A következőp programkódom lenne. A feladat:
Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
Nem akar az if-else rész működni, hogy továbblépjen a feltételeken.Először szorozd 100-zal, csak utána legyen az osztás. Mert így az osztás miatt mindig 0 lesz az eredmény.
-
Domonkos
addikt
Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.
Sziasztok!
A következőp programkódom lenne. A feladat:
Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
Nem akar az if-else rész működni, hogy továbblépjen a feltételeken.talan ha nem int-et osztanal int-tel, akkor nem int lenne az eredmeny. Probald meg legalabb az egyiket valami float-ta (cast)-olni.
-
kovisoft
őstag
Ha csak egy változót lehet használni és az maga a változó, amibe beolvastad a decimális számot, akkor itt egy ocsmány és gagyi megoldás:
printf("%d%d%d%d%d\n", (dec&16)>>4, (dec&8)>>3, (dec&4)>>2, (dec&2)>>1, (dec&1));
Mivel tudjuk, hogy legfeljebb 31 lehet a dec (ezt illik ellenőrizni előtte), ezért szimplán sorban kiolvassuk dec alsó 5 bitjét.
Közben még agyaltam egy általánosabb megoldáson is, ami egyesével olvassa ki a biteket. Triviálisan mindig az alsó bitet lehetne kiolvasni, kiírni, aztán jobbra shiftelni a biteket a számban amíg el nem fogynak a bitek. Viszont így fordított sorrendben írnánk ki a biteket. A lenti kód ehelyett mindig a felső bitet olvassa ki, majd balra shifteli a biteket, de legelőször berak jobbra egy plusz 1-es bitet, hogy tudja, mikor kell abbahagyni a ciklust:
dec=(dec<<1)|1;
while ((dec&255)>0)
{
printf("%d", (dec&256)>>8);
dec=dec<<1;
}
printf("\n");
Szerk: mi a hibaüzenet? -
elistvan
őstag
Kovisoft: Köszi, de valamiért nem fut le a C program hibát ír.
Sziasztok!
A következőp programkódom lenne. A feladat:
Készíts programot, ami egy dolgozat pontszámából kiszámítja a százalékos eredményt, majd kiírja a jegyet! Egy dolgozatra legfeljebb 20 pont adható, az eredmények: 60% - 2, 70% - 3, 80% - 4, 90% - 5
Nem akar az if-else rész működni, hogy továbblépjen a feltételeken. -
kovisoft
őstag
Sziasztok! Olyan kódot keresek C ben, ami egy printf-el átszámolja nekem a decimális számot, binárissá. De csak 18 és 31 között. Csak egy változót lehet használni. Másfélét találtam, de ilyet még nem.
Esetleg ezt a kódot, esetleg át lehet alakítani, hogy a megadott módon működjön?
Vagy leegyszerűsíteni?#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,r,dec,bin[20];
printf("Kerek egy egesz szamot: ");
scanf("%d", &dec);
int n=dec;
i=0;
while (dec>0)
{
r=dec%2;
bin[i]=r;
dec=dec/2;
i++;
}
printf("\n %d binaris alakja : ",n);
for (j=i-1;j>=0;j--)
{
printf("%d ",bin[j]);
}
getch();
return 0;
}Ha csak egy változót lehet használni és az maga a változó, amibe beolvastad a decimális számot, akkor itt egy ocsmány és gagyi megoldás:
printf("%d%d%d%d%d\n", (dec&16)>>4, (dec&8)>>3, (dec&4)>>2, (dec&2)>>1, (dec&1));
Mivel tudjuk, hogy legfeljebb 31 lehet a dec (ezt illik ellenőrizni előtte), ezért szimplán sorban kiolvassuk dec alsó 5 bitjét.
-
elistvan
őstag
Sziasztok! Olyan kódot keresek C ben, ami egy printf-el átszámolja nekem a decimális számot, binárissá. De csak 18 és 31 között. Csak egy változót lehet használni. Másfélét találtam, de ilyet még nem.
Esetleg ezt a kódot, esetleg át lehet alakítani, hogy a megadott módon működjön?
Vagy leegyszerűsíteni?#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,r,dec,bin[20];
printf("Kerek egy egesz szamot: ");
scanf("%d", &dec);
int n=dec;
i=0;
while (dec>0)
{
r=dec%2;
bin[i]=r;
dec=dec/2;
i++;
}
printf("\n %d binaris alakja : ",n);
for (j=i-1;j>=0;j--)
{
printf("%d ",bin[j]);
}
getch();
return 0;
} -
elistvan
őstag
Kösz mindkettőtöknek!
-
dabadab
titán
Sziasztok!
Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?
Nem fordítottad újra.
Ahogy láttam a Codeblocks nem fordítja magától újra a kódot, ha megváltozik a forrás. -
sztanozs
veterán
Sziasztok!
Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?
szvsz szintaktikai hibás volt a második kód, nem tudta lefordítani, és így az előzőleg fordított binárist futtata...
-
elistvan
őstag
Sziasztok!
Codeblocks-os kérdés. Megírok egy forráskódot lefutattom, aztán kitörlöm, beírok a helyére egy másikat. Futtatom és mégis az előző fut le. Miért van ez, és hogy lehet megoldani, ha csinálok több feladatot az aktuálisan beírtat tudjam lefuttatni (hogy megkereshessem a hibát) és elmenthessem?
-
sztanozs
veterán
-
kovisoft
őstag
-
sztanozs
veterán
CommandPromt ablak eltűnik / C nyelv/ Windows
========================================
A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
- ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
- mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
= Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
Kösz, előre is.Vagy futtasd az exe-t parancssorból.
-
kovisoft
őstag
CommandPromt ablak eltűnik / C nyelv/ Windows
========================================
A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
- ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
- mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
= Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
Kösz, előre is.Tegyél be a programod végére egy billentyű nyomásra várakozást, hogy csak azután fejeződjön be a programod. Vagy pedig nyisd meg a command promptot és abból indítsd a programodat, ne pedig rákattintva.
-
ub19student
csendes tag
CommandPromt ablak eltűnik / C nyelv/ Windows
========================================
A CodeBlocks-ot használtam a Linuxon. Most megpróbáltam áttenni a programjaimat a Windows7-re, szintén a CodeBlocks-al.
- ha az exe programot futtatom a CodeBlocks-ból, a CommandPromt ablak kinyílik az eredménnyel és ott marad
- mikor direkt futtatom az exe filet, közvetlenül rákattintva a directory-ben, a CommandPromt ablak egy tizedmásodpercre felvillan az eredménnyel és eltűnik
= Kérem, aki tudja, árulja el, hogy marad ott az ablak ekkor is.
Kösz, előre is. -
mepet
addikt
Sziasztok!
ANSI C programozást tanulni, hogyan érdemes / ajánlott hozzákezdeni? (mingw+codeblocksban dolgozunk.) A tanár először magyaráz 2 órát aztán szünet/ utána csak nyomja fel a táblára programkódot, meggondolni sincs időm melyik sor mit csinál. (és tőlünk kérdezgeti, hogy mi a következő sor. ) Nyíregyházán az Egyetemen ezt tanítják ebben a félévben (a következőben meg java-t). Nekem jó a kettes csak valami tuti tananyag/módszer kellene. Ráadásul mi tanárok a programtervező infósokkal vagyunk egy csoportban. Tehát közel sem azonos súlycsoport. Már az elején elment a kedvem az egésztől. Olyan anyag kellene (keresgéltem a neten jegyzeteket) ami rendesen magyaráz, hogy mi mit csinál(melyik sor) és miért. Nekem sajna élet halál kérdés, a kettes így levelezőn, szóval mindennemű segítséget szívesen veszek és köszönöm előre is.
Szerintem nézd meg a tantárgyleírásnál (vagy kérd el a tanártól) a kötelező és ajánlott jegyzetek listáját, hátha van köztük valami értelmes.
Én ebből a könyvből tanultam anno, nagyon részletes és jó könyv, de nem tudom mennyire jó totál kezdőknek: Kochan: Programfejlesztés C nyelven
-
elistvan
őstag
Sziasztok!
ANSI C programozást tanulni, hogyan érdemes / ajánlott hozzákezdeni? (mingw+codeblocksban dolgozunk.) A tanár először magyaráz 2 órát aztán szünet/ utána csak nyomja fel a táblára programkódot, meggondolni sincs időm melyik sor mit csinál. (és tőlünk kérdezgeti, hogy mi a következő sor. ) Nyíregyházán az Egyetemen ezt tanítják ebben a félévben (a következőben meg java-t). Nekem jó a kettes csak valami tuti tananyag/módszer kellene. Ráadásul mi tanárok a programtervező infósokkal vagyunk egy csoportban. Tehát közel sem azonos súlycsoport. Már az elején elment a kedvem az egésztől. Olyan anyag kellene (keresgéltem a neten jegyzeteket) ami rendesen magyaráz, hogy mi mit csinál(melyik sor) és miért. Nekem sajna élet halál kérdés, a kettes így levelezőn, szóval mindennemű segítséget szívesen veszek és köszönöm előre is.
-
axioma
veterán
Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?
Nincs jogom torolni, nem tudom miert gondolod. De a helyzeted reszletezese utan se ertek egyet. Ha indokolt, akkor halaszd a felevet. Ha csak ez az egy targy nem lesz meg mert amugy nem indokolt hogy ne lenne idod vinni a tanulast, akkor meg hagyd potvizsgara. Nem ertem miert a csalas a megoldas.
A tanar tuti ugy gondolta, hogy nem egyedul bujod az internetet hanem valaki iranyitja hogy mit nezz meg, vagy tovabbsegit egy tippel ha elakadsz. Ezt pedig itt, a forum kereteiben is megtesszuk - de ehhez te is bele kell tegyel annyi energiat, hogy elindulj.
A vizvezetek-szerelotol NEM segitseget, hanem megoldast kersz. Pontosan, te is megoldast kertel, es ez veri ki a biztositekot. -
csizs
aktív tag
Maga a tanár javasolta, hogy kérjek segítséget. Engedve van. Innentől valóban nem tartom csalásnak a dolgot. Egyébiránt segítséget kértem. Nem programozónak készülök! Te is kérsz segítséget, ha elromlik a vízvezeték, vagy más. Te sem mindig tartod be a KRESZ-t. Amikor enni kell adnom egy gyereknek egy olyan vizsga, ami kevésbé lényeges, de az kell elnézést kérek, de emberség is van.
Ha nem segítséget adsz kérlek ne sértegess, ha pedig úgy érzed ide ez nem illik kérlek töröld!
-
Domonkos
addikt
Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?
...es ha nincs idod keszulni egy hazi feladatra vagy vizsgara, akkor pedig elcsalod. Remek!

-
csizs
aktív tag
Talán szomorú. (Nem biztos, hogy a képességeim értékeled ezzel)
Ma pl: édesapám harmadik szívinfarktusa volt hajnal 4 felé. Én pl: annyi feladatot adtak 1 hétre, hogy az már elkészíthetetlen mennyiségű, de az is igaz, hogy a fel nem készítés miatt is kétségkívül ehhez a módszerhez folyamodtam. Talán ha nem értesz egyet töröld, de ez nem biztos, hogy a legjobb megoldás. Ha egy gyerek nem eszik adsz neki enni, ha egy ember beteg segítesz. De ha egy családapa, aki dolgozik és nincs már ideje mindenre, esetleg egy ilyen családi tragédia is történik tudod megoldást keres.Ráadásul a nyelv Ansi C, ami mér elavult és két feladat megoldásért miért kellene megtanulnom egy egész nyelvet?
-
axioma
veterán
-
csizs
aktív tag
Keresek c programozásban jártas embert, aki két feladatot megoldana nekem. Juttatás ellenében is.
privátban jelentkezz.
-
buherton
őstag
Sziasztok!
Van itt valaki, aki tudna nekem segíteni pár dologban? Konkrétan írtam egy egyszerűbb programot, és annak egyes részeit át kellene formázni úgy, hogy legyen benne pointer, struktúra. Nem kérem természetesen, hogy bárki megcsinálja helyettem, csak ötletet szeretnék, hogy hol célszerű ezt megtenni a programon belül.
Privát üzenetben átmásolom a konkrét programomat (egyszerű matematikai problémát megoldó programról van szó).
Előre is köszönök minden segítséget!
Másold be ide.
-
f(x)=exp(x)
őstag
Sziasztok!
Van itt valaki, aki tudna nekem segíteni pár dologban? Konkrétan írtam egy egyszerűbb programot, és annak egyes részeit át kellene formázni úgy, hogy legyen benne pointer, struktúra. Nem kérem természetesen, hogy bárki megcsinálja helyettem, csak ötletet szeretnék, hogy hol célszerű ezt megtenni a programon belül.
Privát üzenetben átmásolom a konkrét programomat (egyszerű matematikai problémát megoldó programról van szó).
Előre is köszönök minden segítséget!
-
kovisoft
őstag
Ja, az eredeti hozzászólásodból az jött le, hogy a "cikkszám;darabszám" össze van téve egyetlen stringbe. Mindegy, ezzel az adatstruktúrával ugyanúgy tud menni a dolog, csak meg kell írni az összehasonlító függvényt a qsort-hoz (de persze más módon is rendezheted a tömbödet).
-
don_peter
senior tag
Egy lehetséges megoldás:
Rendezed a string tömbödet (pl. qsort). Végigmész a rendezett tömb elemein, minden elemre a stringet kettéválasztod a pontosvessző mentén (pl. strchr-rel megkeresed a ';' karaktert, és lecseréled 0-ra). Az első rész lesz a cikkszám, ezt megjegyzed, a második részt atoi-val integerré alakítod, ez a darabszám. Ha a cikkszám ugyanaz, mint az előző, akkor csak szimplán hozzáadod a darabszámot az előzőek összegéhez. Ha új cikkszámhoz értél vagy vége a tömbnek, akkor az előző cikkszámot kiírod egy új tömbbe, mellé az összeadogatott darabszámot.Így néz ki:
string[][] Rlista = new string[100][];
string[] Arr = new string[2];
Arr[0] = "B102";
Arr[1] = "11";
Rlista[0] = Arr;
..stb
Persze összeadásnál konvertálnám a darabszámot. -
kovisoft
őstag
Srácok szeretnék kérni egy kis segítséget.
Van egy string tömböm és a következő adatok vannak benne:
adat1 = cikkszám
adat2 = darabszámB301;1
F100;9
G120;20
P203;6
B301;1
F100;9
G120;20
A9G;12
P203;2
B301;8Rendezni kellene a tömböt, úgy hogy minden cikkszámból csak 1 szerepeljen benne, de a darabszámokat össze kell adni.
pl.:
B301;10
F100;18
G120;40
P203;8
A9G;12Tudnátok nekem segíteni? (elég fáradt vagyok már, hogy jól pörögjön az agyam)
Már kezdek befáradni, de addig nem fekszem le amíg ezzel ma nem végzek.
Előre is köszi.Egy lehetséges megoldás:
Rendezed a string tömbödet (pl. qsort). Végigmész a rendezett tömb elemein, minden elemre a stringet kettéválasztod a pontosvessző mentén (pl. strchr-rel megkeresed a ';' karaktert, és lecseréled 0-ra). Az első rész lesz a cikkszám, ezt megjegyzed, a második részt atoi-val integerré alakítod, ez a darabszám. Ha a cikkszám ugyanaz, mint az előző, akkor csak szimplán hozzáadod a darabszámot az előzőek összegéhez. Ha új cikkszámhoz értél vagy vége a tömbnek, akkor az előző cikkszámot kiírod egy új tömbbe, mellé az összeadogatott darabszámot. -
don_peter
senior tag
Srácok szeretnék kérni egy kis segítséget.
Van egy string tömböm és a következő adatok vannak benne:
adat1 = cikkszám
adat2 = darabszámB301;1
F100;9
G120;20
P203;6
B301;1
F100;9
G120;20
A9G;12
P203;2
B301;8Rendezni kellene a tömböt, úgy hogy minden cikkszámból csak 1 szerepeljen benne, de a darabszámokat össze kell adni.
pl.:
B301;10
F100;18
G120;40
P203;8
A9G;12Tudnátok nekem segíteni? (elég fáradt vagyok már, hogy jól pörögjön az agyam)
Már kezdek befáradni, de addig nem fekszem le amíg ezzel ma nem végzek.
Előre is köszi. -
alapz@j
tag
Emlékeim szerint a C szabványban nem szerepel, hogy a char előjeles vagy előjel nélküli lenne, ezt ráhagyja az implementációra. A fordítók pedig jellemzően az int és társai után a char-t is előjelesként kezelik alapértelmezetten, nem véletlenül vannak a -funsigned-char kapcsolók és társaik..
-
expfgv
csendes tag
Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen!
A feladat:Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
Például.:
char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
számábrázolás; 0...255 értékekkel;
int típus : 4 (bájt) !!a 32 bites környezetben!!,
előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.
Maga a kód (megjegyzésekkel):
#include <stdio.h> // header file-ok
#include <stdlib.h>
// Deklarációs rész (később)
// int aglobalis, bglobalis; // Globális változók helye, minden
// függvényből láthatók, későbbiekben
// (lehetőleg) ne használjuk. (Ezen
// változók akkor globálisak, ha egy
// modulból áll a program.)
int main() // BREAKPOINT ITT !!!
{
char ch; // lokális változók deklarálása
// kezdeti értékadás nélkül!
int a, b, c, d, e, f, g;// lokális változók csak a függvényen
// belül láthatók, most main()-on belül.
// FIGYELEM; alapból a számábrázolás előjeles (+/-)
a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
// 'ch' változó méretét átadja az ’a’
// változónak (így a értéke 1 lesz).
b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
c = sizeof(unsigned char); // a sizeof() operátor argumentumába
d = sizeof(int); // előjeles EGÉSZ számábrázolás
e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
f = sizeof(float); // ez a kompatibilitás miatt van már
g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
// a 'float' és a 'double' típusok, valós számtípusok, azaz
// előjeles egész vagy tizedes pontos tört értékek is lehetnek
return 0;
}Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.
kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját.
Leírtam ebben a hozzászólásban, hogy hogy csináltam.Nem hiszem el, sikerült!

Köszönöm szépen mindenkinek a segítséget, privátban Domonkosnak és Kovinak külön is, programhiba volt (megfűszerezve egy kis user errorral
), elég érzékeny ez a Code Blocks... -
Domonkos
addikt
Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen!
A feladat:Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
Például.:
char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
számábrázolás; 0...255 értékekkel;
int típus : 4 (bájt) !!a 32 bites környezetben!!,
előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.
Maga a kód (megjegyzésekkel):
#include <stdio.h> // header file-ok
#include <stdlib.h>
// Deklarációs rész (később)
// int aglobalis, bglobalis; // Globális változók helye, minden
// függvényből láthatók, későbbiekben
// (lehetőleg) ne használjuk. (Ezen
// változók akkor globálisak, ha egy
// modulból áll a program.)
int main() // BREAKPOINT ITT !!!
{
char ch; // lokális változók deklarálása
// kezdeti értékadás nélkül!
int a, b, c, d, e, f, g;// lokális változók csak a függvényen
// belül láthatók, most main()-on belül.
// FIGYELEM; alapból a számábrázolás előjeles (+/-)
a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
// 'ch' változó méretét átadja az ’a’
// változónak (így a értéke 1 lesz).
b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
c = sizeof(unsigned char); // a sizeof() operátor argumentumába
d = sizeof(int); // előjeles EGÉSZ számábrázolás
e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
f = sizeof(float); // ez a kompatibilitás miatt van már
g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
// a 'float' és a 'double' típusok, valós számtípusok, azaz
// előjeles egész vagy tizedes pontos tört értékek is lehetnek
return 0;
}Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.
kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját.
Leírtam ebben a hozzászólásban, hogy hogy csináltam.>char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
Mi ez a hulyeseg? Ki mondta, hogy egy bajt 8 bit? Na meg azt, hogy
signedspecifier nelkul acharaz elojeles?

Keress valami jobb tananyagot!
-
kovisoft
őstag
Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen!
A feladat:Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
Például.:
char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
számábrázolás; 0...255 értékekkel;
int típus : 4 (bájt) !!a 32 bites környezetben!!,
előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.
Maga a kód (megjegyzésekkel):
#include <stdio.h> // header file-ok
#include <stdlib.h>
// Deklarációs rész (később)
// int aglobalis, bglobalis; // Globális változók helye, minden
// függvényből láthatók, későbbiekben
// (lehetőleg) ne használjuk. (Ezen
// változók akkor globálisak, ha egy
// modulból áll a program.)
int main() // BREAKPOINT ITT !!!
{
char ch; // lokális változók deklarálása
// kezdeti értékadás nélkül!
int a, b, c, d, e, f, g;// lokális változók csak a függvényen
// belül láthatók, most main()-on belül.
// FIGYELEM; alapból a számábrázolás előjeles (+/-)
a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
// 'ch' változó méretét átadja az ’a’
// változónak (így a értéke 1 lesz).
b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
c = sizeof(unsigned char); // a sizeof() operátor argumentumába
d = sizeof(int); // előjeles EGÉSZ számábrázolás
e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
f = sizeof(float); // ez a kompatibilitás miatt van már
g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
// a 'float' és a 'double' típusok, valós számtípusok, azaz
// előjeles egész vagy tizedes pontos tört értékek is lehetnek
return 0;
}Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.
kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját.
Leírtam ebben a hozzászólásban, hogy hogy csináltam.Nem lehet, hogy be van kapcsolva az optimalizálás, és gyakorlatilag az egész program kioptimalizálódott?
(mármint fordítási opcióról beszélek) -
expfgv
csendes tag
Köszi a reagálást, ha már itt válaszoltál, leírom ide a konkrét problémát (bocsi a szemetelést a többiektől!).
Amit írtál, be van kapcsolva nálam, projectet is létrehoztam természetesen!
A feladat:Feladat: Állapítsuk meg, hogy az egyes változó típusok mekkora méretűek bájtban. (bájt==Byte)
Ezt a sizeof(x) egy operandusú operátorral tehetjük meg, mely az argumentumában szereplő objektum, ebben az esetben a változó méretét adja vissza bájtban. Így könnyen ellenőrizhetjük, hogy egy adott típus hány bájtos, azaz hány bájtot foglal le a memóriában,
Például.:
char típus : 1 (bájt), előjeles EGÉSZ alapból; -128...127;
unsigned char: 1 (bájt), előjel nélküli EGÉSZ, char típusú
számábrázolás; 0...255 értékekkel;
int típus : 4 (bájt) !!a 32 bites környezetben!!,
előjeles EGÉSZ alapból. Az int típus méretét feltétlenül ellenőrizni kell, mert a mérete operációs rendszer függő!FONTOS: A BREAKPOINT-ot az 'int main()' sorba tegye, léptesse a programot soronként és az eredményeket a WATCHES ablakban figyelje, LOCAL VARIABLES alatt! Ez az ablak 'debug' esetén automatikusan megnyílik.
Maga a kód (megjegyzésekkel):
#include <stdio.h> // header file-ok
#include <stdlib.h>
// Deklarációs rész (később)
// int aglobalis, bglobalis; // Globális változók helye, minden
// függvényből láthatók, későbbiekben
// (lehetőleg) ne használjuk. (Ezen
// változók akkor globálisak, ha egy
// modulból áll a program.)
int main() // BREAKPOINT ITT !!!
{
char ch; // lokális változók deklarálása
// kezdeti értékadás nélkül!
int a, b, c, d, e, f, g;// lokális változók csak a függvényen
// belül láthatók, most main()-on belül.
// FIGYELEM; alapból a számábrázolás előjeles (+/-)
a = sizeof(ch); // 'ch' nevű, 'char' típusú (1 bájtos) változó
// 'ch' változó méretét átadja az ’a’
// változónak (így a értéke 1 lesz).
b = sizeof(char); // közvetlenül a típus nevét is bele írhatjuk
c = sizeof(unsigned char); // a sizeof() operátor argumentumába
d = sizeof(int); // előjeles EGÉSZ számábrázolás
e = sizeof(unsigned int); // előjel nélküli EGÉSZ számábrázolás
f = sizeof(float); // ez a kompatibilitás miatt van már
g = sizeof(double); // újabb fordítók ezt tekintik alaptípusnak
// a 'float' és a 'double' típusok, valós számtípusok, azaz
// előjeles egész vagy tizedes pontos tört értékek is lehetnek
return 0;
}Namost én ezt bemásolom, majd a jelölt helyre rakok egy breakpointot. Nyomok egy F8-at, majd nyomnám az F7-et, de semmi értelme. Egyrészt a Watches ablak teljesen üres, másrészt nem lép a sorok között.
kovisoft: bocsi, teljesen fogalmatlan vagyok ilyen téren, ma láttam életem első C kódját.
Leírtam ebben a hozzászólásban, hogy hogy csináltam. -
kovisoft
őstag
Sziasztok!
Most kezdtem a programozást, viszont egy nagyon alapnak tűnő dolognál elakadtam, amiről nem tudom, hogy program hiba, vagy én rontok el valamit. Code Blocksot használok, és ott kellene egy megadott programnál a Watches ablakban pár dolgot figyelni, viszont nekem nem jelenik meg ott semmi.
Privátban átmásolom a konkrét programot és amit kér a feladat, valamint amiket amiket én nyomkodok, és mégse jó.
Előre is köszönöm, ha valaki segít!
Lehet, hogy hülye kérdés, de ugye futás közben megállítottad a programot egy breakpointtal, és akkor próbálod nézni a változókat?
-
expfgv
csendes tag
Sziasztok!
Most kezdtem a programozást, viszont egy nagyon alapnak tűnő dolognál elakadtam, amiről nem tudom, hogy program hiba, vagy én rontok el valamit. Code Blocksot használok, és ott kellene egy megadott programnál a Watches ablakban pár dolgot figyelni, viszont nekem nem jelenik meg ott semmi.
Privátban átmásolom a konkrét programot és amit kér a feladat, valamint amiket amiket én nyomkodok, és mégse jó.
Előre is köszönöm, ha valaki segít!
-
Domonkos
addikt
Itt az altalam javasolt megoldas:
#include <stdio.h>
int strcmp(char *s1, char *s2);
int
strcmp(char *s1, char *s2)
{
unsigned c1, c2;
for(;;) {
c1 = *s1++;
c2 = *s2++;
if(c1 != c2) {
if(c1 > c2)
return 1;
return -1;
}
if(c1 == 0)
return 0;
}
}
int
main(int argc, char *argv[]) {
if (argc != 3) {
fputs("argc\n", stderr);
return 1;
}
printf("%d\n", strcmp(argv[1], argv[2]));
return 0;
} -
buherton
őstag
Sziasztok!
Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal?

Csak ne priviben, hanem itt tedd közzé

-
Domonkos
addikt
Sziasztok!
Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal?

Ha megmutatod, hogy eddig mit sikerult megirnod, akkor nagyon szivesen segitek.
-
Alcsi69
senior tag
Sziasztok!
Villamosmérnökire járok és van programozásunk, C-ben programozunk. (vagyis eddig órákon csak tábláról való másolás ment) Nem nagyon értek sokmindent, és igazából annyira nagyon nem is érdekel (ha annyira érdekelne mondjuk mérnökinfóra mentem volna), viszont van néhány féléves feladatunk, melyek közül 1-et kell megcsinálnunk és megmutatni a tanárnak.
Én azt a feladatot választottam, hogy meg kell írnom a saját strcmp függvényemet. Mind ezt úgy, hogy argv, argc--ból kell vennie a két string-et, nem használhatunk scanf-t.Valaki aki nagyon ért hozzá, tudna mutatni egy példát erre a dologra egy kis magyarázattal?

-
dobragab
addikt
Sziasztok! Tudna valaki segiteni az 5-os, 6-os es 7-es feladatokkal? Nagyon nem tudom, hogy kezdjek hozza, sokat segitene hihetetlenul! Koszonom szepen


(L:/dl/upc/2018-11/23/755405_yma8gh180lcluzuw_inkedreceived_263517184513014_li.jpg)[kép](/L)Ez nem valami BME GPK szerencsétlenség és C#? Mintha ott már találkoztam volna ezzel a stílussal...
-
buherton
őstag
Sziasztok! Tudna valaki segiteni az 5-os, 6-os es 7-es feladatokkal? Nagyon nem tudom, hogy kezdjek hozza, sokat segitene hihetetlenul! Koszonom szepen


(L:/dl/upc/2018-11/23/755405_yma8gh180lcluzuw_inkedreceived_263517184513014_li.jpg)[kép](/L)A C-nek nincs GUI-ja.
-
Krisztiiii
csendes tag
Sziasztok! Tudna valaki segiteni az 5-os, 6-os es 7-es feladatokkal? Nagyon nem tudom, hogy kezdjek hozza, sokat segitene hihetetlenul! Koszonom szepen


(L:/dl/upc/2018-11/23/755405_yma8gh180lcluzuw_inkedreceived_263517184513014_li.jpg)[kép](/L) -
dobragab
addikt
4. Használsz valami Linuxos IDE-t gdb pluginnal, mondjuk CLion.
-
buherton
őstag
Három lehetőséged is van debuggolni:
1. beraksz néhány printf függvényt megnézed, hol bugzik.
2. gdb, bár ezt CLI-ból macera használni.
3. kikommentezed a platformfüggő sorokat és Visual Studioval kidebuggolod. -
bandi0000
nagyúr
tök 8 nagy nehezen meg lett a hiba maga az algoritmus jól működik, csak akkor bugzódik be, hogyha kevesebb vagy több elemű tömb-öt kéne használnom mint amit lefoglaltamszóval jön is a kérdés, az a gond hogy paraméterben kell megadni, hogy mekkora lesz a mátrix, meg van adva, hogy mennyi lehet maximum, de ha annyit foglalok le, akkor is baja van neki, viszont az üzenethez structúrát kell létrehozni, amit előre kell deklarálni, szóval az lenne a jó ha úgy tudnám létrehozni, a sturktúrát, hogy már tudom a mátrix méretét, de ez lehetséges valahogy?na ezért jó kérdezni, mert közbe rá jöttem, mivel helyet is kellett foglalni az elküldendő üzenetnek, így ott kellett volna max méretre helyet foglalni, és akkor nincs hiba

-
Domonkos
addikt
-
bandi0000
nagyúr
0777 az valami jog lenne, amúgy igen, most már rá jöttem mi a hiba
indexelésnél csúszik/csúszott el az a baj, hogy a linux alatt nem tudok debuggolni, visual studioba is ugyan így futna le? -
Domonkos
addikt
sziasztok
Kérnék egy kis segítséget, ha ide tartozik
igaz linux alatt írjuk a kódot, de C-be
processzekkel foglalkozunk, és az lenne a feladat, hogy üzenetet küldjön egyik a másik processznak (msgsnd,msgrcv)
A feladat talán nem is lényeges, inkább az, hogy egy N*M-es mátrixot kell küldözgetni
létrehozok N+M mátrixot
első N mátrix az sorokkal
utána a többi az oszlopokkal dolgozikés össze vissza kapják, adják az üzeneteket
for-ba hoztam létre a processzeket, és a for-ban lévő id-vel hivatkozok az egyes processzekre
maga a gyerekek kódja így néz ki, mert gondolom itt a hiba, a szülő jól adja át elvileg az első gyereknek a mátrixot
En ebbe nem lennek annyire biztos. Mi is az a 0777 msgflg a szulo msgsnd-ben? Biztos jol van az ugy?
Amugy meg mi a pontos hiba? -
bandi0000
nagyúr
sziasztok
Kérnék egy kis segítséget, ha ide tartozik
igaz linux alatt írjuk a kódot, de C-be
processzekkel foglalkozunk, és az lenne a feladat, hogy üzenetet küldjön egyik a másik processznak (msgsnd,msgrcv)
A feladat talán nem is lényeges, inkább az, hogy egy N*M-es mátrixot kell küldözgetni
létrehozok N+M mátrixot
első N mátrix az sorokkal
utána a többi az oszlopokkal dolgozikés össze vissza kapják, adják az üzeneteket
for-ba hoztam létre a processzeket, és a for-ban lévő id-vel hivatkozok az egyes processzekre
maga a gyerekek kódja így néz ki, mert gondolom itt a hiba, a szülő jól adja át elvileg az első gyereknek a mátrixot
-
alapz@j
tag
A Nuwen.net-es MinGW-ben például van pcre / regex.h, nem kell hozzá Cygwin. Ne terjesszünk már olyan butaságokat, hogy a "A C-t nem a windows-ra találták ki."!
-
kispx
addikt
A readme-ben le van írva, hogy mit kellene csinálni, viszont ahogy nézem ahhoz a msys is kell. Itt most nincs egyszerű út.
Egy próba elejéig megpróbálhatod, hogy a *.c és a *.h fájlokat hozzácsapod a projekthez. Viszont azt ki kell majd találni, hogy melyik előfordítói direktívákat kell definiálnod, hogy leforduljon ez a pár fájl.
-
EQMontoya
veterán
-
Dinter
addikt
Milyen fordítót használsz a code::blockhoz?
Alapértelmezetten MinGW van hozzácsomagolva, ehhez van pár csomag:
https://stackoverflow.com/questions/3781211/c-regex-library-with-mingw
https://sourceforge.net/p/mingw/regex/ci/master/tree/MinGW-t használok. A második linkről hova kell rakni a fájlokat, illetve utána kell még valamit csinálni?
-
dobragab
addikt
-
kispx
addikt
Milyen fordítót használsz a code::blockhoz?
Alapértelmezetten MinGW van hozzácsomagolva, ehhez van pár csomag:
https://stackoverflow.com/questions/3781211/c-regex-library-with-mingw
https://sourceforge.net/p/mingw/regex/ci/master/tree/ -
buherton
őstag
De lehet, ha Cygwin-t raksz alá. Egyszer csináltam ilyet Eclipse-szel, de halál volt
.A CodeBlocks egy IDE, amivel a kódot tudod szerkeszteni, fordítani, futtatni és debuggolni. Csak ugye mindez a windowson történik. A regex pedig POSIX.2 szabvány van definiálva. Ehhez Unix-szerű környezetnek kell, hogy fusson a gépeden.
A C-t nem a windows-ra találták ki.
-
Dinter
addikt
Ez így biztosan nem jó:
printf("%d/%d",sorok8/jo8);, ezt próbáld helyette:printf("%d/%d",sorok8, jo8);. Ascanfhelyett használd azfgetsfüggvényt. Osztást érdemes elkerülni ha lehet, mert erőforrás igényes.A legfontosabb soha ne adj ki úgy kezedből progamot, hogy előtte nem próbáltad. 99,99999% az esély arra, hogy rossz
.Tegyél fel Cygwint gcc-vel, vagy virtuális gépre rakj fel egy Linuxot.
CodeBlocks-szal nem lehet valahogy megoldani?
Új hozzászólás Aktív témák
-
6000 - 5901
6397 - 6301 6300 - 6201 6200 - 6101 6100 - 6001 6000 - 5901 5900 - 5801 5800 - 5701 5700 - 5601 5600 - 5501 5500 - 5401 5400 - 5301 5300 - 5201 5200 - 5101 5100 - 5001 5000 - 4901 4900 - 4801 4800 - 4701 4700 - 4601 4600 - 4501 4500 - 4401 4400 - 4301 4300 - 4201 4200 - 4101 4100 - 4001 4000 - 2001 2000 - 1
-
Fórumok
PROHARDVER! - hardver fórumok
Notebookok TV & Audió Digitális fényképezés Alaplapok, chipsetek, memóriák Processzorok, tuning Hűtés, házak, tápok, modding Videokártyák Monitorok Adattárolás Multimédia, életmód, 3D nyomtatás Tabletek, E-bookok Nyomtatók, szkennerek PC, mini PC, barebone, szerver Beviteli eszközök Egyéb hardverek PROHARDVER! BlogokMobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokIT café - infotech fórumok
Infotech Hálózat, szolgáltatók OS, alkalmazások SzoftverfejlesztésGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokLOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendFÁRADT GŐZ - közösségi tér szinte bármiről
Tudomány, oktatás Sport, életmód, utazás, egészség Kultúra, művészet, média Gazdaság, jog Technika, hobbi, otthon Társadalom, közélet Egyéb Lokál PROHARDVER! interaktív
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Házimozi belépő szinten
- Vigneau interaktív lokálblogja
- BMW topik
- Szívós, szép és kitartó az új OnePlus óra
- Garancia kérdés, fogyasztóvédelem
- Ingatlanos topic!
- sziku69: Fűzzük össze a szavakat :)
- Arc Raiders
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- További aktív témák...
- Vostro 3590 15.6" FHD i3-10110U 16GB DDR4 256GB NVMe SSD (PCIe 4.0) magyar bill gar
- Apple iPhone 14 Pro Max 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung 850 PRO 2.5 512GB SATA3 SSD
- Apple iPhone 15 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- Samsung Odyssey G3 S24AG320NU VA Monitor! 1920x1080 / 165Hz / 1ms / FreeSync
- ÚJ MacBook Pro 16" M4 PRO 24GB 512GB Space Black
- ÁRGARANCIA! Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- GYÖNYÖRŰ iPhone XS Max 64GB Silver -2 ÉV GARANCIA - Kártyafüggetlen, MS4695
- Eladó ÚJ TCL 501 2/32GB fekete / 12 hó jótállás
- AKCIÓ!!! SÁRGA! -20%!!! MACBOOK NEO!!!! - MAGYAR BILLES! - CITRUS AJÁNDÉKKAL!
Állásajánlatok
Cég: aiMotive Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest



.
)

Marmint hogy szomoru hogy bekerul egy ilyen keres...
.


