- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- Hat év támogatást csomagolt fém házba a OnePlus Nord 4
- 185 Hz-es kijelzővel és 9000 mAh-s akkuval jöhet az új OnePlus
- Poco F8 Ultra – forrónaci
- Bemutatkozott az Oppo kamerás csúcsmodellje
- Samsung Galaxy A56 - megbízható középszerűség
- Telekom mobilszolgáltatások
- Fotók, videók mobillal
- Milyen okostelefont vegyek?
- Samsung Galaxy A55 - új év, régi stratégia
-
3200 - 3101
6397 - 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 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - 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! 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
-
shinodas
tag
#include <stdio.h>
#include <stdlib.h>
int main()
{
char cel[10];
char S1[6]="iskola";
int i=0;
while(S1[i]!='\0');
{
cel[i]=S1[i];
i++;
}
cel[i++]='\0';
printf("%s\n", cel);
return 0;
}Ezt hol szúrom el srácok? Azt próbálgatom, hogy van egy üres, és egy másik stringem, amiben van valami. Amiben van a tartalom, azt akarom belemásolni a másik stringbe.

-
shinodas
tag
Köszönöm srácok a válaszokat!

-
WonderCSabo
félisten
Akkor float helyett valami decimális számolást kell alkalmazni (most hirtelen csak c++ megoldást találtam).
AE
Jah, csak az a típus .NET könyvtárban érhető el...
shinodas: Használhatsz double -t, akkor közelebb kerül az érték. Sajnos a számítógépes számábrázolásnak vannak ilyen hátulütői, pont ezért lebegőpontos értéknél sosem nézünk egyenlőséget, mindig vmi küszöbértéket vizsgálunk.
Ehh, Jester megint megelőzött...
-
Jester01
veterán
-
ArchElf
addikt
-
shinodas
tag
-
ArchElf
addikt
-
shinodas
tag
Sziasztok srácok,
egy kis érdekességbe ütköztünk prog vizsgán.
Szóval, ha elosztotok két számot
pl float a=50.5; float b=a/10;, akkor az eredmény 5.050000190734... lesz. SZóval így kíváncsiak lennénk, hogy hogyan lehetne pontosabban osztani?
-
artiny
őstag
-
ArchElf
addikt
eddig jutottam a programban:
[link]char Data[100];
scanf("%s",&Data);
int bite=strlen(Data);
while(1){
WriteFile(
hCom, // Handle portu, ktory ste otvorili CreateFile
&Data, // Smernik (pointer) na data, ktore chcem vysielat
bite, // Pocet bytov, ktore chcem vyslat
&Pocet, // Smernik (pointer) na pocet vyslanych dat
NULL); // Musi byt NULL
if( Pocet != bite ) // Ak pocet prenesenych dat nesuhlasi
printf("\n Chyba: Zapis na port sa nepodaril.\n");
// a zasa nasleduje CloseHandle(hCom); a potom exit...
else
printf("\n OK.");
printf("ja: %s", Data);
//--------------------Readfile-----------------------------------------
DWORD Pocet1=0; // Poc(et prijatých dát
//unsigned char Data; // Sem ulož prijatý znak
PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
ReadFile(
hCom, // Handle portu, z ktorého c(ítame
&Data, // Pointer na buffer, kam ukladáme prijaté dáta
1, // Poc(et bytov, na ktoré c(akáme
// &d, // Pointer na skutoc(ný poc(et prijatých dát
&Pocet1, // Pointer na skutoc(ný poc(et prijatých dát
NULL); // Musí byt( NULL
// Funkcia ReadFile tu teraz c(aká, až kým niec(o
// nepríde, ale mőže aj skonc(it( bez zachyteného znaku,
// ak medzitým vypršia timeouty.
if( Pocet1 != 1 ) // Ak poc(et prenesených dát nesúhlasí
printf("\n Chyba: Citanie z portu nedalo nic.\n");
else
printf("\n OK, z portu sme uspesne prijali [%c].\n",Data);ezt a két részt,hogyan lehetne összefűzni CreateThread -l?
Úgy nézem elég csehül állsz

AE
-
artiny
őstag
eddig jutottam a programban:
[link]char Data[100];
scanf("%s",&Data);
int bite=strlen(Data);
while(1){
WriteFile(
hCom, // Handle portu, ktory ste otvorili CreateFile
&Data, // Smernik (pointer) na data, ktore chcem vysielat
bite, // Pocet bytov, ktore chcem vyslat
&Pocet, // Smernik (pointer) na pocet vyslanych dat
NULL); // Musi byt NULL
if( Pocet != bite ) // Ak pocet prenesenych dat nesuhlasi
printf("\n Chyba: Zapis na port sa nepodaril.\n");
// a zasa nasleduje CloseHandle(hCom); a potom exit...
else
printf("\n OK.");
printf("ja: %s", Data);
//--------------------Readfile-----------------------------------------
DWORD Pocet1=0; // Poc(et prijatých dát
//unsigned char Data; // Sem ulož prijatý znak
PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
ReadFile(
hCom, // Handle portu, z ktorého c(ítame
&Data, // Pointer na buffer, kam ukladáme prijaté dáta
1, // Poc(et bytov, na ktoré c(akáme
// &d, // Pointer na skutoc(ný poc(et prijatých dát
&Pocet1, // Pointer na skutoc(ný poc(et prijatých dát
NULL); // Musí byt( NULL
// Funkcia ReadFile tu teraz c(aká, až kým niec(o
// nepríde, ale mőže aj skonc(it( bez zachyteného znaku,
// ak medzitým vypršia timeouty.
if( Pocet1 != 1 ) // Ak poc(et prenesených dát nesúhlasí
printf("\n Chyba: Citanie z portu nedalo nic.\n");
else
printf("\n OK, z portu sme uspesne prijali [%c].\n",Data);ezt a két részt,hogyan lehetne összefűzni CreateThread -l?
-
_JD
csendes tag
Sziasztok!
A Juhász István, Kósa Márk, Pánovics János: C példatár könyvet keresem megvételre.
Ha valakinek van eladó, írjon. Előre is köszönöm!
-
Karma
félisten
Amennyire én tudom, csak UNIX-on, és ott is includeolni kell a unistd.h -t.
Konkrétan POSIX környezet kéne hozzá, így ha a Windows fontos, akkor vagy Cygwin alá kéne vinni a "fejlesztést", vagy ilyesmivel is lehet kísérletezni.
Én csak az előbbit tapasztaltam ki eddig munka közben.
-
WonderCSabo
félisten
Sziasztok!
Tud valaki segíteni abban, hogy fordításnál Dev-C miért írja ki a fork()-ra, getpid()-re stb., hogy undefined reference? Csak UNIX környezetben lehetne futtatni? Vagy valamilyen könyvtár hiányzik?
Egy teljesen egyszerű példával élve:#include <stdio.h>
#include <stdlib.h>int main()
{
int procid;
procid = fork ();
}előre is köszi!
Amennyire én tudom, csak UNIX-on, és ott is includeolni kell a unistd.h -t.
-
Snoopenz
csendes tag
Sziasztok!
Tud valaki segíteni abban, hogy fordításnál Dev-C miért írja ki a fork()-ra, getpid()-re stb., hogy undefined reference? Csak UNIX környezetben lehetne futtatni? Vagy valamilyen könyvtár hiányzik?
Egy teljesen egyszerű példával élve:#include <stdio.h>
#include <stdlib.h>int main()
{
int procid;
procid = fork ();
}előre is köszi!
-
Drizzt
nagyúr
Olyan toolt tudnátok javasolni, ami egy c függvény megadásakor megmondja az összes függvényt, amit onnan meghívhat a program futása során? Ez alatt azt értem, hogy:
1. mindenképpen meg van hívva a függvény, explicit módon.
2. A függvény meg van hívva valamilyen elágazásban, if-ben, switchben, ...
3. Vagy a függvény a fenti függvények valamelyikében meg van hívva, s ez így rekurzívan tovább.Gondolom erre a static analyserek a jók. Mit ismertek, mi a jó?
-
mobal
nagyúr
-
Gyuri16
senior tag
jo iranyba indultal. 91. sor:
(*tail)->next = l;
azon kivul ez se jo (84):
if(head == NULL)
a head nem lesz NULL, *head kell helyette -
Korcsii
őstag
-
mobal
nagyúr
-
Emoci
csendes tag
Ha nem értesz vmit, kérdezz, abból tanulsz, nem a készen leírt kódból.

Igen ez igy van csak en mindezt tanultam mar de par eve nem hasznaltam egyaltalan ez ahogy eszreveszem eleg sokat felejtettem

-
WonderCSabo
félisten
-
Emoci
csendes tag
#include <stdio.h>
/* C - ben nincs namespace,
includeolni viszont itt is kell... */
const float p = 3.14;
void f(const float x, float* const u, float* const a)
{
/*
az itt deklarát lokális változókat
nem látja az ir fv, ezárt át kell adni módosításra is
*/
*u = p * x * x;
*a = 2 * p * x;
}
void ir (const float u, const float a) /* át kell adni ezeket - et, a main-beli
lokális a, u az ir - bõl nem látszik */
{
FILE* file; /* ha ez is f-nek hívod, bekavar az u.a.
nevû fv - el... */
file = fopen("eredmeny.txt","w");
fprintf(file, "terulet: %f cm2 kerulet: %f cm", u, a);
fclose(file);
}
int main()
{
float x, a, u;
char cont = 'i';
char c;
do
{
printf ("\n sugar: ");
scanf ("%f", &x);
scanf("%c", &c); /* különben a getchar a bufferben lévő
\n - t olvassa be, és emiatt terminál a ciklus*/
if (x < 1 || x > 500) printf ("hiba"); /* a feltételed szerint 1 - nél se lehet kisebb */
else
{
f(x, &u, &a);
ir (u, a);
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont = getchar(); /* a fv. neve getchar... */
}
while ((cont == 'I') || (cont == 'i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getchar();
return 0;
}Ertem mar
koszonom nagyon szepen 
-
WonderCSabo
félisten
Hello!
Lenne 1 kis problemam kene 1 programot irjak ami kiszamolja 1 max 500 cm sugaru kor teruletet es keruletet a kovetkezo feltetelek alapjan:
-hasznalj fajlt
-hasznalj sajat fuggvenyt
Probalkoztam de sajnos folyton hibauzenetet ir ki:using namespace std;
float p=3.14;
void f(float x)
{
float a,u;
a=p*x*x;
u=2*p*x;
}
void ir ()
{
float x;
FILE*f;
f=fopen("eredmeny.txt","w");
fprintf(f,"%f ",f(x));
fclose(f);
}
int main()
{
float x;
char cont= 'i';
do{
printf ("\n sugar: ");
scanf ("%f",&x);
if (x>500) printf ("hiba");
else
{
f(x);
ir ();
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont=getche();
}while ((cont=='I')||(cont=='i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getch();
return 0;
}Esetleg tudna valaki segiteni hogy mi a problema?Elore is koszi.
#include <stdio.h>
/* C - ben nincs namespace,
includeolni viszont itt is kell... */
const float p = 3.14;
void f(const float x, float* const u, float* const a)
{
/*
az itt deklarát lokális változókat
nem látja az ir fv, ezárt át kell adni módosításra is
*/
*u = p * x * x;
*a = 2 * p * x;
}
void ir (const float u, const float a) /* át kell adni ezeket - et, a main-beli
lokális a, u az ir - bõl nem látszik */
{
FILE* file; /* ha ez is f-nek hívod, bekavar az u.a.
nevû fv - el... */
file = fopen("eredmeny.txt","w");
fprintf(file, "terulet: %f cm2 kerulet: %f cm", u, a);
fclose(file);
}
int main()
{
float x, a, u;
char cont = 'i';
char c;
do
{
printf ("\n sugar: ");
scanf ("%f", &x);
scanf("%c", &c); /* különben a getchar a bufferben lévő
\n - t olvassa be, és emiatt terminál a ciklus*/
if (x < 1 || x > 500) printf ("hiba"); /* a feltételed szerint 1 - nél se lehet kisebb */
else
{
f(x, &u, &a);
ir (u, a);
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont = getchar(); /* a fv. neve getchar... */
}
while ((cont == 'I') || (cont == 'i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getchar();
return 0;
} -
Emoci
csendes tag
Hello!
Lenne 1 kis problemam kene 1 programot irjak ami kiszamolja 1 max 500 cm sugaru kor teruletet es keruletet a kovetkezo feltetelek alapjan:
-hasznalj fajlt
-hasznalj sajat fuggvenyt
Probalkoztam de sajnos folyton hibauzenetet ir ki:using namespace std;
float p=3.14;
void f(float x)
{
float a,u;
a=p*x*x;
u=2*p*x;
}
void ir ()
{
float x;
FILE*f;
f=fopen("eredmeny.txt","w");
fprintf(f,"%f ",f(x));
fclose(f);
}
int main()
{
float x;
char cont= 'i';
do{
printf ("\n sugar: ");
scanf ("%f",&x);
if (x>500) printf ("hiba");
else
{
f(x);
ir ();
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont=getche();
}while ((cont=='I')||(cont=='i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getch();
return 0;
}Esetleg tudna valaki segiteni hogy mi a problema?Elore is koszi.
-
bambano
titán
Hali,
egy beadandó feladatot kellene készítenem. Ezek közül 1et.
1. Irjon C nyelvu programot, ami:
letrehoz ket gyermekprocesszt
ezek a gyermekprocesszek letrehoznak 3-3 tovabbi gyereket
ezek az unokak varakoznak nehany
masodpercet es szunjenek meg
a szulok varjak meg a gyerekek befejezodeset es csak utana szunjenek meg
2. Irjon C nyelvu programokat, ami
SIGUSR1 signal erkeztekor noveli egy valtozo erteket
SIGUSR2 signal hatasara pedig kiirja a kepernyore az aktualis erteket.
a
masik program pedig: futtataskor signal-t kuld az adott processznek
3. Irjon C nyelvu programokat, ami
letrehoz egy uzenetsort
ebbe az uzenetsorba betesz egy masodpercenkent egy valtozot
ennek a valtozonak a kezdoerteke legyen az
aktualis processz azonositoja
a valtozo mindig beiras utan novekedjen 2-vel
a masik program pedig: kiolvas
4. Irjon C nyelvu programokat, ami
hozzon letre egy osztott memoria szegmenst
a felhasznalotol olvasson be szoveget, es ezt irja be az osztott memoria teruletere es
kuldjon signalt a fogado felnek, hogy kesz az uzenet (SIGUSR1)
(segitsegkeppen a masik program pid-je fixen beleteheto a programba)
a masik program pedig olvass ki az
osztott mem szegmensbol, de csak egy adott signal hatasara (SIGUSR1)
vegul szuntesse meg az shm szegmenst
5. Irjon C nyelvu programot, ami
letrehoz egy csovezeteket (egy file deszkriptor part)
elforkol
a gyermek egy signal hatasara elkuld egy rovid szoveget a
szulonek (a signalig blokkol)
a szulo kiirja a kepernyore
megszunnek a processzek (a szulo megvarja a gyereket)
6. Irjon C nyelvu programokat, ami
letrehoz egy nevesitett csovezeteket (bejegyzes az fs-en)
megnyitja
beleir valamit
kozben egy masik program kiolvassa a
csovezetekbol
ezutan az elso program szinten ir bele valamit
a masik program ujbol kiolvassa
a processzek megszunnek es az elso program eltunteti a nevesitett
csovezeteket
7. Irjon C nyelvu programokat, ami
letrehoz egy osztott memoria szegmenst
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik program pedig kiolvas belole
8. Irjon C nyelvu programokat, ami
letrehoz egy filet
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik
program pedig kiolvas belole a file elejetol kezdve
A beadás határideje szombat 23.59.
Nyilván megfelelő kompenzálás fejében keresnék valakit, aki "segít az elkészítésében".
Többit privátban.
üdvugye tudod, hogy ez a fajta kérés törvénysértő? azt is büntetik, aki felteszi, meg azt is, aki segít.
-
drogery
tag
Hali,
egy beadandó feladatot kellene készítenem. Ezek közül 1et.
1. Irjon C nyelvu programot, ami:
letrehoz ket gyermekprocesszt
ezek a gyermekprocesszek letrehoznak 3-3 tovabbi gyereket
ezek az unokak varakoznak nehany
masodpercet es szunjenek meg
a szulok varjak meg a gyerekek befejezodeset es csak utana szunjenek meg
2. Irjon C nyelvu programokat, ami
SIGUSR1 signal erkeztekor noveli egy valtozo erteket
SIGUSR2 signal hatasara pedig kiirja a kepernyore az aktualis erteket.
a
masik program pedig: futtataskor signal-t kuld az adott processznek
3. Irjon C nyelvu programokat, ami
letrehoz egy uzenetsort
ebbe az uzenetsorba betesz egy masodpercenkent egy valtozot
ennek a valtozonak a kezdoerteke legyen az
aktualis processz azonositoja
a valtozo mindig beiras utan novekedjen 2-vel
a masik program pedig: kiolvas
4. Irjon C nyelvu programokat, ami
hozzon letre egy osztott memoria szegmenst
a felhasznalotol olvasson be szoveget, es ezt irja be az osztott memoria teruletere es
kuldjon signalt a fogado felnek, hogy kesz az uzenet (SIGUSR1)
(segitsegkeppen a masik program pid-je fixen beleteheto a programba)
a masik program pedig olvass ki az
osztott mem szegmensbol, de csak egy adott signal hatasara (SIGUSR1)
vegul szuntesse meg az shm szegmenst
5. Irjon C nyelvu programot, ami
letrehoz egy csovezeteket (egy file deszkriptor part)
elforkol
a gyermek egy signal hatasara elkuld egy rovid szoveget a
szulonek (a signalig blokkol)
a szulo kiirja a kepernyore
megszunnek a processzek (a szulo megvarja a gyereket)
6. Irjon C nyelvu programokat, ami
letrehoz egy nevesitett csovezeteket (bejegyzes az fs-en)
megnyitja
beleir valamit
kozben egy masik program kiolvassa a
csovezetekbol
ezutan az elso program szinten ir bele valamit
a masik program ujbol kiolvassa
a processzek megszunnek es az elso program eltunteti a nevesitett
csovezeteket
7. Irjon C nyelvu programokat, ami
letrehoz egy osztott memoria szegmenst
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik program pedig kiolvas belole
8. Irjon C nyelvu programokat, ami
letrehoz egy filet
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik
program pedig kiolvas belole a file elejetol kezdve
A beadás határideje szombat 23.59.
Nyilván megfelelő kompenzálás fejében keresnék valakit, aki "segít az elkészítésében".
Többit privátban.
üdv -
artiny
őstag
-
Jester01
veterán
-
artiny
őstag
-
NSiS
tag
A meg egy B mátrixom azokat úgy írom fel hogy B*A
Akkor, ha B-t kell balról A-val megszorozni, egyébként fordítva.
Látom sikerült az első Google találatot lemásolni, és azt is rosszul... Tessék:#include <stdio.h>
int main()
{
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[2][2];
int i, j, k, r1=2, r2=3, c1=3, c2=2;
for(i=0; i<r1; i++)
{
for(j=0; j<c2; j++)
{
fMatrixBA[i][j]=0;
for(k=0; k<r1; k++)
{
fMatrixBA[i][j]+=fMatrixA[i][k]*fMatrixB[k][j];
}
printf("%f\t",fMatrixBA[i][j]);
}
printf("\n");
}
return 0;
}Ja és egy 2x3 * 3x2 szorzatából 2x2 -es mátrix lesz...
Köszönöm, így már működik, ezek szerint a mátrixos rész sem volt számomra egyértelmű.

-
artiny
őstag
Ez alapján kéne:
http://ap.urpi.fei.stuba.sk/ap/blok3.phpEddig jutottam:
http://pastebin.com/QJmqYNXVazt csinálja:
van az alap port beallitas es azt megvaltoztatom a megadottra,majd beallitja a timeoutot es beker egy karaktert. Viszont a fogadast nem tudom megcsinalni es a karakter bekeres is egy vegtelen ciklus (valami alapjan lekene meg allitanom) -
Jester01
veterán
-
artiny
őstag
Valaki írt már chat programot C ben,azt tudna segíteni valmiben nekem?
-
WonderCSabo
félisten
De tanultam, csak egy pillanatra megzavart az hogy "balról szorzom", azóta persze rájöttem hogy ez csak annyit tesz, hogyha mondjuk van egy A meg egy B mátrixom azokat úgy írom fel hogy B*A.
Na de a lényeg, h nem a mátrixok miatt nem tudom megoldani, hanem C beli hiányosságok vannak, ebben a félévben tanultam először programozást, ezelőtt szakközépben sem és nemis infó karos vagyok, úgyhogy várhatóan ezután sem lesz (a mintatanterv szerint legalábbis). MPLAB-ot használunk, PIC programozás lenne elvileg.
A feladat pedig: "Készítsen függvényt, amely adott változótípuson végez műveletet, valamint a megfelelő változótípussal tér vissza." Az adatok típusa valós az én esetemben.
Az A mátrixot szoroznám balról a B-vel. Printf-et nem szoktunk írni, van egy watch ablak a programban az jelzi az értékeket ha léptetem soronként.Az eddig elkészült programom, ami természetesen nem fut le (
):#include <p24fj128ga010.h>
float main(){
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[3][3];
float i, j, k, r1=2, r2=3, c1=3, c2=2;
if (c1 == r2){
for (i=0; i<r1; i++){
for (j=0; j<c2; j++){
fMatrixBA[j]=0;
for (k=0; k<r1;k++)
{
fMatrixBA(i)[j] += fMatrixA(i)[k]*fMatrixB[k][j];
}
}
}
}
return 0;
}És itt megállt a tudomány részemről... pl. azt írja hogy hogy "return type of 'main' is not 'int'" és ezen kívül van még hiba rendesen. De azt se értem, hogy a return-nak integer-nek kellene lennie minden esetben? Mert a feladatkiírás alapján valós értékűként kellene visszatérnie.
A meg egy B mátrixom azokat úgy írom fel hogy B*A
Akkor, ha B-t kell balról A-val megszorozni, egyébként fordítva.
Látom sikerült az első Google találatot lemásolni, és azt is rosszul... Tessék:#include <stdio.h>
int main()
{
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[2][2];
int i, j, k, r1=2, r2=3, c1=3, c2=2;
for(i=0; i<r1; i++)
{
for(j=0; j<c2; j++)
{
fMatrixBA[i][j]=0;
for(k=0; k<r1; k++)
{
fMatrixBA[i][j]+=fMatrixA[i][k]*fMatrixB[k][j];
}
printf("%f\t",fMatrixBA[i][j]);
}
printf("\n");
}
return 0;
}Ja és egy 2x3 * 3x2 szorzatából 2x2 -es mátrix lesz...
-
NSiS
tag
Nem tanultál mátrixalgebrát? Itt van szépen leírva mik a mátrixszorzás szabályai (ami 2x2 * 2x2 esetben még egyszerűbbre degradálódik), ez alapján már elég könnyű megírni az algoritmust. Azt, hogy balról szorzod, így önmagában nem elég megszorítás, kérdés melyik mátrix lesz a baloldalon.
De tanultam, csak egy pillanatra megzavart az hogy "balról szorzom", azóta persze rájöttem hogy ez csak annyit tesz, hogyha mondjuk van egy A meg egy B mátrixom azokat úgy írom fel hogy B*A.
Na de a lényeg, h nem a mátrixok miatt nem tudom megoldani, hanem C beli hiányosságok vannak, ebben a félévben tanultam először programozást, ezelőtt szakközépben sem és nemis infó karos vagyok, úgyhogy várhatóan ezután sem lesz (a mintatanterv szerint legalábbis). MPLAB-ot használunk, PIC programozás lenne elvileg.
A feladat pedig: "Készítsen függvényt, amely adott változótípuson végez műveletet, valamint a megfelelő változótípussal tér vissza." Az adatok típusa valós az én esetemben.
Az A mátrixot szoroznám balról a B-vel. Printf-et nem szoktunk írni, van egy watch ablak a programban az jelzi az értékeket ha léptetem soronként.Az eddig elkészült programom, ami természetesen nem fut le (
):#include <p24fj128ga010.h>
float main(){
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[3][3];
float i, j, k, r1=2, r2=3, c1=3, c2=2;
if (c1 == r2){
for (i=0; i<r1; i++){
for (j=0; j<c2; j++){
fMatrixBA[j]=0;
for (k=0; k<r1;k++)
{
fMatrixBA(i)[j] += fMatrixA(i)[k]*fMatrixB[k][j];
}
}
}
}
return 0;
}És itt megállt a tudomány részemről... pl. azt írja hogy hogy "return type of 'main' is not 'int'" és ezen kívül van még hiba rendesen. De azt se értem, hogy a return-nak integer-nek kellene lennie minden esetben? Mert a feladatkiírás alapján valós értékűként kellene visszatérnie.
-
WonderCSabo
félisten
Nem tanultál mátrixalgebrát? Itt van szépen leírva mik a mátrixszorzás szabályai (ami 2x2 * 2x2 esetben még egyszerűbbre degradálódik), ez alapján már elég könnyű megírni az algoritmust. Azt, hogy balról szorzod, így önmagában nem elég megszorítás, kérdés melyik mátrix lesz a baloldalon.
-
NSiS
tag
Hi!
Kellene egy kis segítség: a feladatom az lenne, hogy két db kétdimenziós mátrixot szorozzak össze (balról ?) C-ben és hát fogalmam sincs hogy hogy kellene. Ha valaki tudna segíteni azt megköszönném.
Üdv!
-
Chipi333
csendes tag
A for elvileg ugyan az, mint a while, csak máshogy írva, így nem látok kivetnivalót benne.
De azért szépen benéztem a kódot én is (hiába, lehet aludni is kéne néha):
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n; ++i) {
for (j=0; i<n; ++j) {
if (tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db);Valóban, csak valamiért az rémlett, hogy standard C-ben nincs for... De hát mégis, sőt újabban már ciklusváltozót is lehet deklarálni benne

-
shinodas
tag
A for elvileg ugyan az, mint a while, csak máshogy írva, így nem látok kivetnivalót benne.
De azért szépen benéztem a kódot én is (hiába, lehet aludni is kéne néha):
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n; ++i) {
for (j=0; i<n; ++j) {
if (tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db);Köszönöm a válaszokat, nem soká rálesek

-
Korcsii
őstag
A for elvileg ugyan az, mint a while, csak máshogy írva, így nem látok kivetnivalót benne.
De azért szépen benéztem a kódot én is (hiába, lehet aludni is kéne néha):
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n; ++i) {
for (j=0; i<n; ++j) {
if (tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db); -
Chipi333
csendes tag
-
Korcsii
őstag
-
Korcsii
őstag
-
shinodas
tag
Nem egészen tudom, hogy néz ki, amire gondolsz
Tudnál mutatni példát? 
-
Chipi333
csendes tag
Hát ez majdnem jó, de tomb[5]-öt sosem fogod megnézni. Szerintem nem érdemes ilyen random konstrukciókkal próbálkozni, mert jó eséllyel benézel valamit. Egy ilyen jellegű próblémát két egymásba ágyazott iterációval szokás megoldani, mert akkor végig mész mindkét tömbön biztosan

-
shinodas
tag
Én valahogy így csináltam, még próbálgatom, h jól működik e

while(j<6)
{
if(i==5){i=0; j++;}
if(tomb[i]==tomb_user[j])
{printf("E " );
i=0;
j++;
}
else
{
i++;
}
} -
Chipi333
csendes tag
Bocsi, ha nagyon kezdő kérdés, de, hát kezdő is vagyok

while(j<6 && i<6 )
{
if(tomb[i]==tomb_user[j])
{
printf("Valami... " );
i=0;
j++;
}
else
{
i++;
}
}
Az lenne a célom, hogy nézze meg, a tomb user elemei között, hány olyan elem van, ami megegyezik tom elemeivel. Ha egyezés van, írjon ki valamit. És nem igazán szeretne ez muzsikálni nekem
szerk.: azt hiszem működik már. Megoldva! Most rohanok órára, aztán még kipróbálom alaposabban

Az vele a baj, hogy ha tomb egyik eleme sem egyezik a tomb_user első elemével akkor a többit már meg sem fogja nézni, mert egyszer csak i==6 lesz miközben j==0 és kilép a while-ból.
Szóval ezt két egymásbaágyazott for-al kéne, valahogy így:while(i<6)
{
while( j<6)
{
if(tomb[i]==tomb_user[j])
printf("valami");
++j;
}
j=0;
++i;
} -
shinodas
tag
Bocsi, ha nagyon kezdő kérdés, de, hát kezdő is vagyok

while(j<6 && i<6 )
{
if(tomb[i]==tomb_user[j])
{
printf("Valami... " );
i=0;
j++;
}
else
{
i++;
}
}
Az lenne a célom, hogy nézze meg, a tomb user elemei között, hány olyan elem van, ami megegyezik tom elemeivel. Ha egyezés van, írjon ki valamit. És nem igazán szeretne ez muzsikálni nekem
szerk.: azt hiszem működik már. Megoldva! Most rohanok órára, aztán még kipróbálom alaposabban

-
Jester01
veterán
Ismerem az összes rendezést köztük a quicksortot is mert ezelőtt, már 4 másik hibrid rendezést megvalósítottam amiben benne volt a quicksort is egyikben.
DE!
A leírás azt írja equal-sized bins! Az equal sized az azonos méretű. ha választok véletlenszerűen pivot elemeket és szétdobálom közöttük, baromira nem biztos hogy equal sized -ok lesznek, és akkor minek kerestem meg a min és max elemet. Itt olyan intervallumokra kell osztani amiben egyenlő számú elemek vannak, ez nem egy quicksort több pivottal, mert akkor azt írná.
Equal-sized az értékkészletben. Nem azonos elem számosságú. Legalábbis a mellékelt kód szerint. Pl itt látszik:
// Calculating the size of each bin; this takes roughly 10% of runtimeVégigmegy az elemeken és megnézi melyik bin-be kerülnek, aztán a bin-ek kezdőpozíciót a számosságok alapján számolja ki.
-
uraga
csendes tag
Ismerem az összes rendezést köztük a quicksortot is mert ezelőtt, már 4 másik hibrid rendezést megvalósítottam amiben benne volt a quicksort is egyikben.
DE!
A leírás azt írja equal-sized bins! Az equal sized az azonos méretű. ha választok véletlenszerűen pivot elemeket és szétdobálom közöttük, baromira nem biztos hogy equal sized -ok lesznek, és akkor minek kerestem meg a min és max elemet. Itt olyan intervallumokra kell osztani amiben egyenlő számú elemek vannak, ez nem egy quicksort több pivottal, mert akkor azt írná.
-
Chipi333
csendes tag
-
Jester01
veterán
"Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. "
Ehhez annyit még hozzátennék, hogy nem két rendezésről hanem n darab rekurzióról beszélünk. A részekre ugzanez a rendezés lesz ráeresztve, majd azoknak a részeire is egészen addig amíg egy-egy részben nem 0-1 elem marad ami már rendezett, és akkor elkezdenek visszatérni.
Lásd #3142

-
Chipi333
csendes tag
A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb.
Igen, ez így történik. Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. Az intervallumok viszont nem lesznek egyenlő számosságúak.
"Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. "
Ehhez annyit még hozzátennék, hogy nem két rendezésről hanem n darab rekurzióról beszélünk. A részekre ugzanez a rendezés lesz ráeresztve, majd azoknak a részeire is egészen addig amíg egy-egy részben nem 0-1 elem marad ami már rendezett, és akkor elkezdenek visszatérni.
-
Jester01
veterán
Igen, eddig én is eljutottam, abból ha az intervallumokat rendezed, nem lesz rendezett listád. Akkor sem ha a végén n elemszámú listában n darab intervallumod lesz. Max akkor lenne a végén rendezett ha még a rendezett intervallumokat összefésülnénk, ami igen hatékony de egy TimSort nevű rendezés sokkal jobban csinálja, szóval itt nem ez a lényeg. A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb. Ezután az intervallumok rendezésével akár rekurzivan egy rendezett sorozatot kapnánk a végén. De mivel a leirásban az is szerepel hogy egyenlő elem számú intervallumokra osztja, tényleg nem értem hogy csinálja, hogy a végén rendezve is legyen az egész lista, ne csak az intervallumok.
A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb.
Igen, ez így történik. Mivel az értéktartományt osztja szét részekre és az elemeket szétdobálja. Utána pedig az egyes részeket is berendezi. A két rendezésből az egész rendezve lesz. Az intervallumok viszont nem lesznek egyenlő számosságúak.
-
Chipi333
csendes tag
Igen, eddig én is eljutottam, abból ha az intervallumokat rendezed, nem lesz rendezett listád. Akkor sem ha a végén n elemszámú listában n darab intervallumod lesz. Max akkor lenne a végén rendezett ha még a rendezett intervallumokat összefésülnénk, ami igen hatékony de egy TimSort nevű rendezés sokkal jobban csinálja, szóval itt nem ez a lényeg. A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb. Ezután az intervallumok rendezésével akár rekurzivan egy rendezett sorozatot kapnánk a végén. De mivel a leirásban az is szerepel hogy egyenlő elem számú intervallumokra osztja, tényleg nem értem hogy csinálja, hogy a végén rendezve is legyen az egész lista, ne csak az intervallumok.
A leírás elég egyértelmű. Gyakorlatilag egy quicksort, csak nem egy hanem több pivotot használ -> 2 helyett több partíciót csinál az elemekből aztán rekurzívan azokat is rendezi, és így tovább. Ha nem ismered a quicksortot akkor először azt nézd meg, és utána érteni fogod.
Aműgy ebbe a topicba szerintem jobban illene a téma: http://itcafe.hu/tema/programozas_forum/hsz_1-50.html
-
uraga
csendes tag
mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom
Ez aztán a jó kifogás

Mintha azokban a nyelvekben nem lenne bit shift.A rövid kis leírás pont elmeséli hogyan működik. Veszi a tömböt, megkeresi a legkisebb és legnagyobb elemeket. Az így megkapott intervallumot elosztja egyenlő részekre majd ezeket a részeket rekurzívan rendezi. A rekurzió során bizonyos elemszám alatt már másfajta rendezést használ.
Igen, eddig én is eljutottam, abból ha az intervallumokat rendezed, nem lesz rendezett listád. Akkor sem ha a végén n elemszámú listában n darab intervallumod lesz. Max akkor lenne a végén rendezett ha még a rendezett intervallumokat összefésülnénk, ami igen hatékony de egy TimSort nevű rendezés sokkal jobban csinálja, szóval itt nem ez a lényeg. A lényeg ott lenne, hogy a min és max elemek közé úgy pakoljuk be az elemeket, hogy valamilyen csoportosításba kerüljenek mint a BucketSortnál pl 10-20, 20-30, 40-50- ig stb. Ezután az intervallumok rendezésével akár rekurzivan egy rendezett sorozatot kapnánk a végén. De mivel a leirásban az is szerepel hogy egyenlő elem számú intervallumokra osztja, tényleg nem értem hogy csinálja, hogy a végén rendezve is legyen az egész lista, ne csak az intervallumok.
-
Jester01
veterán
Sziasztok,
Lehet nem ez a legmegfelelőbb topik, de gondban vagyok egy algoritmussal kapcsolatban. Van ez a spreadsort nevű hibrid rendezési algoritmus http://en.wikipedia.org/wiki/Spreadsort itt található a leírása. Na most a baj az, hogy a rövid kis leírásból nem lehet rájönni, hogy pontosan, hogy is rendezi ez a sorozatot. Alatta van egy gyönyörű C/C++-ban írt kód, ami elvileg a rendezés algoritmusa, de abból meg nem sokan értek, mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom. Az a baj, hogy nekem be kéne mutatnom, hogy hogy működik ez a rendezés, de nem értem egészen pontosan. Légyszi valaki aki jó C-ben vagy algoritmusokban vessen rá egy pillantást és magyarázza el nekem hogy működik ez az algoritmus.
Köszönöm előre is.
mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom
Ez aztán a jó kifogás

Mintha azokban a nyelvekben nem lenne bit shift.A rövid kis leírás pont elmeséli hogyan működik. Veszi a tömböt, megkeresi a legkisebb és legnagyobb elemeket. Az így megkapott intervallumot elosztja egyenlő részekre majd ezeket a részeket rekurzívan rendezi. A rekurzió során bizonyos elemszám alatt már másfajta rendezést használ.
-
uraga
csendes tag
Sziasztok,
Lehet nem ez a legmegfelelőbb topik, de gondban vagyok egy algoritmussal kapcsolatban. Van ez a spreadsort nevű hibrid rendezési algoritmus http://en.wikipedia.org/wiki/Spreadsort itt található a leírása. Na most a baj az, hogy a rövid kis leírásból nem lehet rájönni, hogy pontosan, hogy is rendezi ez a sorozatot. Alatta van egy gyönyörű C/C++-ban írt kód, ami elvileg a rendezés algoritmusa, de abból meg nem sokan értek, mivel java, C#-on nevelkedtem és itt jobbra balra bitshiftelnek ha jól látom. Az a baj, hogy nekem be kéne mutatnom, hogy hogy működik ez a rendezés, de nem értem egészen pontosan. Légyszi valaki aki jó C-ben vagy algoritmusokban vessen rá egy pillantást és magyarázza el nekem hogy működik ez az algoritmus.
Köszönöm előre is.
-
WonderCSabo
félisten
mondjuk azt nem értem, hogy miért nem dob erre semmilyen warningot
A túlindexelést semmilyen fordító nem ellenőrzi, csak futásidő alatt derül ki, vagy exception/segfault, rosszabb esetben csak a furcsa viselkedés miatt.
-
shinodas
tag
-
Korcsii
őstag
Rég C-ztem már, de úgy rémlik, hogy amikor létrehozod a tömböt, akkor a zárójelbe a méretét írod, tehát int tomb[5] egy 5 elemű int tömb lesz. A sorszámozás persze 0-tól indul. Így for-ban 0-tól <méret-ig lehet számolni, ami pont jó, mert szép, megjegyezhető, és mindent elárul - pl azt is, hogy 6 eleműnek akartad definiálni.

-
shinodas
tag
-
Korcsii
őstag
-
shinodas
tag
-
Korcsii
őstag
Sziasztok!
Egy egyszerű kis programocskát írok, és lenne egy olyan problémám, hogy van két tömbböm, össze akarom hasonlítani őket, egy ciklusban. Az egyes elemeket. Na, szóval 6 elemű a tömb, de csak 5 elemet akar nekem vizsgálni. A tömbbök jól vannak feltöltve, és már ötletem elfogyott, valaki segítsen mán ki
#include <stdio.h>
#include <stdlib.h>
int main()
{
int tomb_user[5]; //tomb_user tippje tömbbe alakítva
int tipp=0; //tomb_user tippje
int i=0; // tömb indexek
int j=0;
srand(time(NULL)); //random számhoz kell
int tomb[5]; //random számokat ide töltöti
while(i<6) //feltöltöm a tömbböt
{
tomb[i]=rand()%9; //%9 az a limit
i++;
}
for(i=0;i<6;i++) printf("%d ", tomb[i]);
//adatok bekérése
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
if(tipp>999999){
printf("Hat szamjegyet adjon meg!\n");
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
}
//user tipp tombbe alakítása
tomb_user[0]=tipp/100000;
tomb_user[1]=tipp%100000/10000;
tomb_user[2]=tipp%100000%10000/1000;
tomb_user[3]=tipp%100000%10000%1000/100;
tomb_user[4]=tipp%100000%10000%1000%100/10;
tomb_user[5]=tipp%100000%10000%1000%100%10;
//===megvizsgálom az egyes elemeket
printf("\nTalálat: ");
i=j=0;
for(i=0;i<6;i++)
{
if(tomb[i]==tomb_user[j]) {printf("H " );}
j++;
}
return 0;
}Nem tudom feltűnt-e, de 5 elemű tömböket hozol létre, és mindenhol 6 elemet akarsz belőle használni - mondjuk azt nem értem, hogy miért nem dob erre semmilyen warningot.
-
shinodas
tag
Sziasztok!
Egy egyszerű kis programocskát írok, és lenne egy olyan problémám, hogy van két tömbböm, össze akarom hasonlítani őket, egy ciklusban. Az egyes elemeket. Na, szóval 6 elemű a tömb, de csak 5 elemet akar nekem vizsgálni. A tömbbök jól vannak feltöltve, és már ötletem elfogyott, valaki segítsen mán ki
#include <stdio.h>
#include <stdlib.h>
int main()
{
int tomb_user[5]; //tomb_user tippje tömbbe alakítva
int tipp=0; //tomb_user tippje
int i=0; // tömb indexek
int j=0;
srand(time(NULL)); //random számhoz kell
int tomb[5]; //random számokat ide töltöti
while(i<6) //feltöltöm a tömbböt
{
tomb[i]=rand()%9; //%9 az a limit
i++;
}
for(i=0;i<6;i++) printf("%d ", tomb[i]);
//adatok bekérése
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
if(tipp>999999){
printf("Hat szamjegyet adjon meg!\n");
printf("Kerek egy tippet, hat darab szamot: ");
scanf("%d", &tipp);
}
//user tipp tombbe alakítása
tomb_user[0]=tipp/100000;
tomb_user[1]=tipp%100000/10000;
tomb_user[2]=tipp%100000%10000/1000;
tomb_user[3]=tipp%100000%10000%1000/100;
tomb_user[4]=tipp%100000%10000%1000%100/10;
tomb_user[5]=tipp%100000%10000%1000%100%10;
//===megvizsgálom az egyes elemeket
printf("\nTalálat: ");
i=j=0;
for(i=0;i<6;i++)
{
if(tomb[i]==tomb_user[j]) {printf("H " );}
j++;
}
return 0;
} -
Jester01
veterán
Köszönöm szépen a segítséget, és Jester01-nek is, de sajnos nem jöttem rá még, hogy miért rakja egy sorba a dolgokat az átmeneti fájlban. Valahogy ez a törlés nem fekszik nekem, itt a jelenlegi kódom, az észrevételeket szívesen fogadom továbbra is, és köszi előre is

void torol(MUSIC zene, FILE *f)
{
fflush(stdin);
char celpont1, celpont2, celpont3, celpont4;
char s[10]="";
printf("A torles funkciot hasznalod, a kovetkezokben add meg, pontosan melyik zenet szeretned torolni!\n");
system("pause");
printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);
FILE *tmp = fopen("tmp.txt", "wb");
/*// Másolás az átmeneti fájlba
char tmp2;
while(!feof(f))
{
tmp2 = getc(f);
if(strcmp(tmp2, celpont1) != 0 || strcmp(tmp2, celpont2) != 0 || strcmp(tmp2, celpont3) != 0 || strcmp(tmp2, celpont4) != 0)
{
fprintf(tmp, " ");
}
else{
putc(tmp2, tmp);
};
}
// Visszamásolás
while(!feof(tmp))
{
tmp2 = getc(tmp);
putc(tmp2, f);
}; */
fclose(tmp);
}A celpont illetve tmp2 változóid mind csak 1 karakterek, azokba nem nagyon tudsz fgets-sel hosszabb szövegeket beolvasni.
-
Coconut's
csendes tag
Nem vagyok nagy C-s, de valszeg a beolvasás lenyeli a sorvégét, azt most nem tudnám megmondani ezzel mit kell művelni.
A torlés viszont azért nem megy szerintem, mert az if-esle nek lefelejtetted az else ágát és a sort mindenképpen kiírod az átmeneti fájlba.if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
else
{
putc(tmp2[TMP], tmp);
}Szóval ezt így kéne.
Köszönöm szépen a segítséget, és Jester01-nek is, de sajnos nem jöttem rá még, hogy miért rakja egy sorba a dolgokat az átmeneti fájlban. Valahogy ez a törlés nem fekszik nekem, itt a jelenlegi kódom, az észrevételeket szívesen fogadom továbbra is, és köszi előre is

void torol(MUSIC zene, FILE *f)
{
fflush(stdin);
char celpont1, celpont2, celpont3, celpont4;
char s[10]="";
printf("A torles funkciot hasznalod, a kovetkezokben add meg, pontosan melyik zenet szeretned torolni!\n");
system("pause");
printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);
FILE *tmp = fopen("tmp.txt", "wb");
/*// Másolás az átmeneti fájlba
char tmp2;
while(!feof(f))
{
tmp2 = getc(f);
if(strcmp(tmp2, celpont1) != 0 || strcmp(tmp2, celpont2) != 0 || strcmp(tmp2, celpont3) != 0 || strcmp(tmp2, celpont4) != 0)
{
fprintf(tmp, " ");
}
else{
putc(tmp2, tmp);
};
}
// Visszamásolás
while(!feof(tmp))
{
tmp2 = getc(tmp);
putc(tmp2, f);
}; */
fclose(tmp);
} -
Jester01
veterán
-
Chipi333
csendes tag
-
Jester01
veterán
Nem vagyok nagy C-s, de valszeg a beolvasás lenyeli a sorvégét, azt most nem tudnám megmondani ezzel mit kell művelni.
A torlés viszont azért nem megy szerintem, mert az if-esle nek lefelejtetted az else ágát és a sort mindenképpen kiírod az átmeneti fájlba.if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
else
{
putc(tmp2[TMP], tmp);
}Szóval ezt így kéne.
Továbbá stringeket nem a címükkel hasonlítunk össze, hanem mondjuk strcpy-vel.
-
Chipi333
csendes tag
Sziasztok!
Lenne egy kis problémám, C kóddal szeretnék törölni egy .txt fájlból sorokat, amiket a programban kérek be, változókba. Az első hiba, hogy amikor átmeneti fájlba másolok, egymás után rakja a sorokat, nem új sorba, tehát 1 sorban lesz az egész, +hát ugye a törlés sem működik, itt a kód, amire jutottam eddig, köszönöm szépen a segítségeket előre is!void torol(MUSIC zene, FILE *f)
{
fflush(stdin);char celpont1, celpont2, celpont3, celpont4;
char s[10]="";printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);FILE *tmp = fopen("tmp.txt", "wb");
// Másolás az átmeneti fájlba
char tmp2[TMP];do
{
tmp2[TMP] = getc(f);
if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
putc(tmp2[TMP], tmp);
}while(!feof(f));
// Visszamásolás
do
{
tmp2[TMP] = getc(tmp);
putc(tmp2[TMP], f);}while(!feof(tmp));
fclose(tmp);
}Ui.: Az f file-t miután visszatér az eljárásból, ott zárom be(a main()-ben), az f-ben vannak a sorok beolvasva így:
adat1 // char típusú(előadója)
adat2 // char típusú(szerzője)
adat3 // int típusú(hossza)
adat4 // char típusú(műfaja)Ez egy zeneszámos progi, 4 adat vonatkozik 1 zenére, de ez végülis nem számít, mert a sorokat egyenként is tudom törölni, mert 4 külön változóba kérem be a sorok tartalmát. Az első probléma mindenképpen az, hogy nem rak új sorokat a tmp fájlba másoláskor, pedig az f-ben úgy vannak.
Nem vagyok nagy C-s, de valszeg a beolvasás lenyeli a sorvégét, azt most nem tudnám megmondani ezzel mit kell művelni.
A torlés viszont azért nem megy szerintem, mert az if-esle nek lefelejtetted az else ágát és a sort mindenképpen kiírod az átmeneti fájlba.if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
else
{
putc(tmp2[TMP], tmp);
}Szóval ezt így kéne.
-
Coconut's
csendes tag
Sziasztok!
Lenne egy kis problémám, C kóddal szeretnék törölni egy .txt fájlból sorokat, amiket a programban kérek be, változókba. Az első hiba, hogy amikor átmeneti fájlba másolok, egymás után rakja a sorokat, nem új sorba, tehát 1 sorban lesz az egész, +hát ugye a törlés sem működik, itt a kód, amire jutottam eddig, köszönöm szépen a segítségeket előre is!void torol(MUSIC zene, FILE *f)
{
fflush(stdin);char celpont1, celpont2, celpont3, celpont4;
char s[10]="";printf("Add meg, melyik eloado zenejet szeretned torolni!");
fgets(&celpont1,MAX_STR,stdin);
printf("Add meg, melyik szerzo zenejet szeretned torolni!");
fgets(&celpont2,MAX_STR,stdin);
printf("Add meg, milyen hosszusagu zenet szeretnel torolni!");
fgets(s,99,stdin);
celpont3=atoi(s);
printf("Add meg, melyik mufaju zenet szeretned torolni!");
fgets(&celpont4,MAX_STR,stdin);FILE *tmp = fopen("tmp.txt", "wb");
// Másolás az átmeneti fájlba
char tmp2[TMP];do
{
tmp2[TMP] = getc(f);
if(tmp2 == &celpont1 || tmp2 == &celpont2 || tmp2 == &celpont3 || tmp2 == &celpont4)
{
fprintf(tmp, " ");
}
putc(tmp2[TMP], tmp);
}while(!feof(f));
// Visszamásolás
do
{
tmp2[TMP] = getc(tmp);
putc(tmp2[TMP], f);}while(!feof(tmp));
fclose(tmp);
}Ui.: Az f file-t miután visszatér az eljárásból, ott zárom be(a main()-ben), az f-ben vannak a sorok beolvasva így:
adat1 // char típusú(előadója)
adat2 // char típusú(szerzője)
adat3 // int típusú(hossza)
adat4 // char típusú(műfaja)Ez egy zeneszámos progi, 4 adat vonatkozik 1 zenére, de ez végülis nem számít, mert a sorokat egyenként is tudom törölni, mert 4 külön változóba kérem be a sorok tartalmát. Az első probléma mindenképpen az, hogy nem rak új sorokat a tmp fájlba másoláskor, pedig az f-ben úgy vannak.
-
kingabo
őstag
C - Mi történik ha egy tömbre mutató pointner értékét eggyel növelem, majd kiíratom?
Mi történik ha egy tömbre mutató pointner értékét eggyel növelem,majd kiíratom .Ezután egy új értéket adok a tömbnek.Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak
#include <stdio.h>
#include <conio.h>int main()
{
char str1[ ] = "abc";
char *p;
p = str1;
printf("1. ertek{pointnera}: %p\n",p);
printf("1. ertek{pointnera}: %s\n\n",p);
p++;
printf("2. ertek{pointnera}: %p\n\n",p);*p='df';
printf("uj erteke : %s\n",p);
printf("uj erteke: %p\n\n",p);return 0;
}Ne stringgel teszteld, vagy ha azzal, akkor karakterként irasd ki, illetve írd a végére a string lezáró \0 karaktert is. Egy int tömbbel sokkal látványosabb a dolog.
Az elmélethez: azt is érdemes megmondani, hogy mi történik, ha egy n elemű tömb n+1-edik elemére hivatkozol/írod.
-
modder
aktív tag
C - Mi történik ha egy tömbre mutató pointner értékét eggyel növelem, majd kiíratom?
Mi történik ha egy tömbre mutató pointner értékét eggyel növelem,majd kiíratom .Ezután egy új értéket adok a tömbnek.Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak
#include <stdio.h>
#include <conio.h>int main()
{
char str1[ ] = "abc";
char *p;
p = str1;
printf("1. ertek{pointnera}: %p\n",p);
printf("1. ertek{pointnera}: %s\n\n",p);
p++;
printf("2. ertek{pointnera}: %p\n\n",p);*p='df';
printf("uj erteke : %s\n",p);
printf("uj erteke: %p\n\n",p);return 0;
}Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.Nem egyel tovább ugrik a memóriában, ahol el van mentve a pointer, hanem:
A pointer értéke (egy memória cím, egy szám) nő annyival, ahány byte-os az adatstruktúra, amire a pointert deklaráltad.Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak
Nem a pointernek adtál új értéket, hanem annak a memóriának, amire mutat a pointered.
A programod elvileg azt csinlája, hogy 'b'-t kicseréli 'd'-re (gondolom az f az csak elírás, mert aposztrófok közé csak karaktert lehet írni)
-
artiny
őstag
C - Mi történik ha egy tömbre mutató pointner értékét eggyel növelem, majd kiíratom?
Mi történik ha egy tömbre mutató pointner értékét eggyel növelem,majd kiíratom .Ezután egy új értéket adok a tömbnek.Szerintem:
Ha eggyel növelem a mutatót eggyel tovább ugrik a memóriában ahol el van mentve a pointner.Ha új értéket adok utána - nos nem tudom ,uj értéket adtam a pointernek,de nem változott meg az értéke teljesen - maradt a régi értékéből és az újból is ? de viszont a memoria cime nem változott a pointernak
#include <stdio.h>
#include <conio.h>int main()
{
char str1[ ] = "abc";
char *p;
p = str1;
printf("1. ertek{pointnera}: %p\n",p);
printf("1. ertek{pointnera}: %s\n\n",p);
p++;
printf("2. ertek{pointnera}: %p\n\n",p);*p='df';
printf("uj erteke : %s\n",p);
printf("uj erteke: %p\n\n",p);return 0;
} -
modder
aktív tag
Szeretnék c-t tanulni kicsit komolyabban mit ajánlanátok iskolán kívül? Most az iskolába C-t tanulok de hát semmit se tudok max ilyen tömb feltöltés stb az alapismereteim nagyon rosszak és az egyik tanárom se tanít a leg fényesebben így önerőből szeretnék fejlődni ha lehet mert így eléggé le vagyok maradva jópár oszt társammal együtt (2 csoport van az egyik semmit nem tud programozni a másik meg egész jó én a rosszabba vagyok)
én azt ajánlom, hogy gyakorolj

itt rengeteg forrást találsz, sok gyakorlati példát.
http://infoc.eet.bme.hu/ -
kmisi99
addikt
Szeretnék c-t tanulni kicsit komolyabban mit ajánlanátok iskolán kívül? Most az iskolába C-t tanulok de hát semmit se tudok max ilyen tömb feltöltés stb az alapismereteim nagyon rosszak és az egyik tanárom se tanít a leg fényesebben így önerőből szeretnék fejlődni ha lehet mert így eléggé le vagyok maradva jópár oszt társammal együtt (2 csoport van az egyik semmit nem tud programozni a másik meg egész jó én a rosszabba vagyok)
-
modder
aktív tag
Eddig is "jó" volt, még mindig nem láttam olyan kódot ami rosszul működött volna.
Mostantól viszont minden egyes írás/olvasás a memóriába megy, akár optimalizálsz akár nem (megkötötted a fordító kezét). Ez jelen helyzetben gondolom nem probléma, de azért ezt ne tanuld meg. Azt viszont tanuld meg, mit csinál a volatile, hátha megkérdezik miért tetted oda

Én sem voltam tisztában a volatile kulcsszó hatásáról belső működésben, csak azzal, hogy mire használják.
Szóval igen, ebben az esetben debuggolásnál hasznodra válik majd, de ne szokd meg a használatát. Lehet, hogy jobb, ha valamilyen formában kiírod az outputra a tömböket. akkor nyilván békén hagyja a tömböket, mert tudni fogja, hogy szükség van rájuk.
-
hruodnand
senior tag
Eddig is "jó" volt, még mindig nem láttam olyan kódot ami rosszul működött volna.
Mostantól viszont minden egyes írás/olvasás a memóriába megy, akár optimalizálsz akár nem (megkötötted a fordító kezét). Ez jelen helyzetben gondolom nem probléma, de azért ezt ne tanuld meg. Azt viszont tanuld meg, mit csinál a volatile, hátha megkérdezik miért tetted oda

Köszönöm!
Pont most van a laborom és sikerült egy 5-öst szerezni.Bitoperátoros, tömbös, ciklusos (elől-hátul tesztelős) vegyes felvágott program volt, sok kritériummal.
Sikerült.
-
Jester01
veterán
Eddig is "jó" volt, még mindig nem láttam olyan kódot ami rosszul működött volna.
Mostantól viszont minden egyes írás/olvasás a memóriába megy, akár optimalizálsz akár nem (megkötötted a fordító kezét). Ez jelen helyzetben gondolom nem probléma, de azért ezt ne tanuld meg. Azt viszont tanuld meg, mit csinál a volatile, hátha megkérdezik miért tetted oda

-
hruodnand
senior tag
volatile -al már jó!
Köszönöm. -
modder
aktív tag
Helló,
próbálj meg eléjük rakni volatile kulcsszót. ha fv-en belül nem engedi, akkor globális namespace-ben deklaráld. illetve az u1 és u3-as tömböt írasd ki a program futása végén, hogy használva legyen. Szerintem így már nem fogja kioptimalizálni.
-
Jester01
veterán
-
kispx
addikt
Viszont nem optimalizációs hiba, mert ha adunk neki egy -O vagy egy -Os -et akkor az egész kódot "eltünteti". Legalábbis debugger alatt semmilyen változó nem látszik, és a debugnál ha a next line-ra kattintok, akkor a program végéhez ugrik.
-
kispx
addikt
-
hruodnand
senior tag
-
Jester01
veterán
-
hruodnand
senior tag
-
kispx
addikt
-
hruodnand
senior tag
Igen, lehet hogy az egész arról szól, hogy a kolléga elfelejtette kikapcsolni az optimalizációt.
hruodnand: úgy értettem, hogy ha a program működése szempontjából lényegtelen a kezdőérték, akkor a fordítónak nem muszáj nulláznia.
Mellesleg aggresszívabb optimalizáció mellett (linuxon!) az egész ciklus eltűnik a fenébe tömböstül mindenestül - mivel nincs használva. Ellenőrizd az optimalizációs beállításokat.
Értem, köszönöm.
Akkor ennek jobban utána járok! -
Jester01
veterán
Igen, lehet hogy az egész arról szól, hogy a kolléga elfelejtette kikapcsolni az optimalizációt.
hruodnand: úgy értettem, hogy ha a program működése szempontjából lényegtelen a kezdőérték, akkor a fordítónak nem muszáj nulláznia.
Mellesleg aggresszívabb optimalizáció mellett (linuxon!) az egész ciklus eltűnik a fenébe tömböstül mindenestül - mivel nincs használva. Ellenőrizd az optimalizációs beállításokat.
-
hruodnand
senior tag
Igen, de nekünk vizsgán debuggolással kell igazolni, hogy működik a program rendesen. Na most, ha nem ad nekem kezdőértéket, amit ugye beállítok, akkor onnantól kezdve karó! Szóval nincs benne printf, meg ilyenek. Csak debuggolás. Windows alatt ugye nem ad értéket, gondolom az előbb említett fordítóbeli különbségek miatt, de Linux alatt meg ad.

Gondolom, "az csak írja a tömböt" alatt, azt értetted, hogy nem fogok kiíratni az értékét

-
ArchElf
addikt
Pontosabban a rendes fejlesztő-környezetek a debug-módba való fordításnál nem szokták szokták engedélyezni az (ilyen szintű) optimalizációt...
AE
-
Jester01
veterán
De akkor miért nullázza ki az egyiket és miért nem a másikat? Főleg, hogy ha a két változódeklarálást felcserélem akkor pont a másikat nem nullázza ki, azaz mindig a második tömb az inicializálatlan.
(Megjegyzem a MinGW ritkán fent nálam, most is csak azért mert beadandót kell készíteni, szóval nem ismerem ezt a fordítót)
Egyébként ott a pont

Mondjuk azért mert egyiket sem nullázza ki, csak a memória egy része véletlen pont nulla. Attól függően melyik tömb kerül oda, lesz nulla vagy nem.
hruodnand: ami kódot mutattál az csak írja a tömböt. Tehát mindegy mi a kezdőértéke. A debuggolásról meg a fordító előre nem tud.
-
hruodnand
senior tag
Ha tényleg az optimalizáció vágta ki, akkor a fordítónak kutya kötelessége minél gyorsabb és rövidebb kód gyártása (ha úgy állítottad be) - a nem kívánt kódrészeket meg ugye a fordító nyugodtan "kioptimalizálhatja" a kódból...
Próbáld meg úgy fordítani, hogy a kódban kezdesz is valamit a tömbök adataival...AE
Csak, azt nem értem, hogy használom, mert ha debugoltok, akkor az u3-as tömbbel dolgozik a program.
Szóval 0-val kellene dolgoznia. -
kispx
addikt
De akkor miért nullázza ki az egyiket és miért nem a másikat? Főleg, hogy ha a két változódeklarálást felcserélem akkor pont a másikat nem nullázza ki, azaz mindig a második tömb az inicializálatlan.
(Megjegyzem a MinGW ritkán fent nálam, most is csak azért mert beadandót kell készíteni, szóval nem ismerem ezt a fordítót)
Egyébként ott a pont

-
ArchElf
addikt
Igazad van, de szerintem nyugodtan nullázhatja, attól függetlenül, hogy fogom-e használni az adott tömbelemet vagy sem.
Neki kutya kötelessége, ha én azt mondom.Linux alatt miért működik az érték adás rendesen? Windows alatt pedig miért nem?

Ilyen különbségek lehetnek a kettő között?Ha tényleg az optimalizáció vágta ki, akkor a fordítónak kutya kötelessége minél gyorsabb és rövidebb kód gyártása (ha úgy állítottad be) - a nem kívánt kódrészeket meg ugye a fordító nyugodtan "kioptimalizálhatja" a kódból...
Próbáld meg úgy fordítani, hogy a kódban kezdesz is valamit a tömbök adataival...AE
Új hozzászólás Aktív témák
-
3200 - 3101
6397 - 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 - 3901 3900 - 3801 3800 - 3701 3700 - 3601 3600 - 3501 3500 - 3401 3400 - 3301 3300 - 3201 3200 - 3101 3100 - 3001 3000 - 2901 2900 - 2801 2800 - 2701 2700 - 2601 2600 - 2501 2500 - 2401 2400 - 2301 2300 - 2201 2200 - 2101 2100 - 2001 2000 - 1
-
Fórumok
Mobilarena - mobil fórumok
Okostelefonok Mobiltelefonok Okosórák Autó+mobil Üzlet és Szolgáltatások Mobilalkalmazások Tartozékok, egyebek Mobilarena blogokPROHARDVER! - 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! 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!
- HP ProBook 445 G8 AMD RYZEN 3 Pro 5400U/8GB/256 SSD/14 " HD laptop magyar bill.
- Akció!!! Sosemhasznált! HP OmniBook 5 i7-1355U 16GB 1TB 16" FHD+ Gar.: 1 év
- Thrustmaster t-lcm pedál
- AMD FX-6300 CPU + ASUS M5A97 EVO R2.0 + GeForce GTX 1060 3GB
- Új - MacBook Pro M5 Pro Chip 14" 15C / 16C / 24 GB RAM / 1TB SSD / Silver / Black - 27% Áfás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest














