-
5200 - 5101
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
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Nyomtatók, szkennerek Tabletek, E-bookok 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ésFÁ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
-
Jester01
veterán
Viszont ez minden elem elérésnél egy indirekt függvényhívás amit nem tud a fordító inline beágyazni. Bizonyos mennyiség fölött garantáltan sokkal lassabb lesz, mintha ténylegesen transzponáltad volna.
A másik, hogy a cache hatékonyságát nagyban befolyásolja a bejárás. Egy sorfolytonos bejárás sokkal gyorsabb lehet mint egy oszlopok szerinti. Az algoritmust ennek megfelelően választhattad meg, de ha a hívó egy függvénypointeresen transzponált mátrixot ad be, akkor amire a kód azt hiszi, hogy hatékony sorfolytonos az valójában nem az. Ugye bizonyos műveleteknél ezért éri meg ténylegesen transzponálni a mátrixot, a bejárás megváltoztatása helyett, még akkor is ha amúgy nincs függvénypointeres trükközés. Lásd még What every programmer should know about memory: "Through the simple transformation of the matrix we can achieve a 76.6% speed-up! The copy operation is more than made up. The 1000 non-sequential accesses really hurt. "
Virtuális mátrixokhoz viszont kétségkívül jó megoldás lehet.
-
emvy
félisten
Konkretan elkezdtem ezt irni, de aztan ugy gondoltam, hogy nem trollkodok ennyire bele a forumba
Ezzel annyi lehet a gond C-ben, hogy ha az eredeti matrixot megvaltoztatjak, miutan visszaadtad a fvptr-t, akkor esetleg problema lehet. Rendes funkcionalis stilusban ez az alapmegoldas egyebkent, es ott meg azzal sincs gond, hogy valaki kirantja alolad a szonyeget (ill. az eredeti erteket). -
EQMontoya
veterán
-
Jester01
veterán
Attól függ mi a feladat pontosan. Mert ha a transzponált mátrixot oda kell adni valami másik függvénynek az boldogtalan lesz ha nem transzponálod ténylegesen mert nem tudja, hogy fel kell cserélni a koordinátákat. Persze ha van valami társított flag ami mutatja és ezt minden tudja is kezelni, akkor jó megoldás.
A kérdésre válaszolva: végig kell iterálni az alsó vagy a felső hárömszögön és cserélgetni. Már ha nem kell új helyre másolni, mert akkor az egészen végig kell menni és felcserélve kiírni.
-
dabadab
titán
Igazából a ravaszság az, hogy nem is kell ténylegesen transzponálni a mátrixot.
Gondolom valami kétdimenziós tömböt alkalmaztál a mátrix tárolására, szóval a tomb [A]x,y elemet valahogy úgy kapod meg, hogy elem=matrix[x][y]. Ha a transzponált mátrix [AT]x,y elemére vagy kiváncsi, akkor egyszerűen ki kell olvasni az eredeti mátrix [A]y,x elemét, vagyis transposed_element=matrix[y][x];
Röviden: olvasáskor egyszerűen cseréld fel az x-et meg az y-t és máris megvan a transzponált mátrix
-
fmx
aktív tag
Üdv!
Kezdő programozó vagyok és lenne nekem egy példám..
A példa így szól:
Ird meg a C nyelvű függvényt mátrix transzponálására(az oszlopok és a sorok helyet cserélnek).Ird meg a főprogramot,amely bemutatja a függvény működését.
Nos,a mátrix kiírása/beolvasása sikerült viszont a transzponálás már nem megy annyira.Van pár ötletem de azért meghallgatnák pár tapasztaltabb embert,hogy mit javasol.
Köszönöm
-
fraba
aktív tag
-
zka67
őstag
Szia, itt az általam használt modul. A gpio.h-t cseréld le a PIC io moduljára, és a gpio funkciókat is írd át a megfelelőkre, értelemszerűen (Ez a program a 2.5-ös portot használja, természetesen ez szabadon választható). A temp_delay értékeket át kell számolnod, hogy a megfelelő időzítéseket megkapd.
Először olvasd ki az értket a chip-ből a temp_get()-tel, utána indítsd el a következő konverziót a temp_start_conv()-val, és a következő kiolvasásig várj 1mp-et. A program az alapértelmezett felbontást használja (12 bit), a konverzió ideje 750ms. Ezalatt csinálhatsz mást, sűrűbben kiolvasni nincs értelme és egyébként is hibás adatot kapnál.
Remélem így már boldogulni fogsz

#include "core/gpio/gpio.h"
void temp_delay(int delay) {
do { ; } while(--delay);
}
void DQ_LOW(void) {
gpioSetDir(2, 5, gpioDirection_Output);
gpioSetValue(2, 5, 0);
}
void DQ_HIGH(void) {
gpioSetValue(2, 5, 1);
gpioSetDir(2, 5, gpioDirection_Input);
}
uint32_t DQ(void) {
return gpioGetValue(2, 5);
}
void temp_reset(void) {
char presence = 1;
while (presence) {
DQ_LOW() ;
temp_delay(9055); // 503us
DQ_HIGH();
temp_delay(1260); // 70us
presence = DQ();
temp_delay(7740); // 430us
}
}
void temp_write_byte(uint8_t val) {
uint32_t i;
uint8_t temp;
for (i=8; i>0; i--) {
temp = val & 0x01;
DQ_LOW();
temp_delay(90); // 5us
if (temp) DQ_HIGH();
temp_delay(1134); // 63us
DQ_HIGH();
temp_delay(36); // 2us
val = val >> 1;
}
}
uint8_t temp_read_byte(void) {
uint32_t i;
uint8_t value = 0;
for (i=8; i>0; i--) {
value >>= 1;
DQ_LOW();
temp_delay(108); // 6us
DQ_HIGH();
temp_delay(72); // 4us
if (DQ()) value |= 0x80;
temp_delay(1134); // 63us
}
return(value);
}
void temp_start_conv(void) {
DQ_HIGH();
temp_reset();
temp_write_byte(0XCC); // skip rom
temp_write_byte(0X44); // start conversion
}
uint32_t temp_get(void) {
uint32_t tlv, thv;
temp_reset();
temp_write_byte(0XCC); // skip rom
temp_write_byte(0XBE); // read scratchpad
tlv = temp_read_byte();
thv = temp_read_byte();
DQ_HIGH();
return tlv | (thv << 8);
} -
fraba
aktív tag
-
don_peter
senior tag
Igazából nem azért linkeltem, hogy úgy ahogy van másold és használd

A lényeg benne van csak észre kell vedd..Ha a gyártó által megadott időzítéseket használod, akkor mennie kell, max az lehet a gond, hogy a késleltető függvényed nem jó mert a PIC nincs jól beállítva, de ez már egy másik topik..
-
fraba
aktív tag
Free sample-ként rendeltem még régebben valamelyik gyártótól vagy összesen 5 db-ot. aztán onnan maradt meg.
De ezt (#5188) zka67 én is megjegyzem..
Köszi! 
A leírását tanulmányoztam, egy egész délután játszottam az időzítésekkel, meg mindennel. Átírtam mindent, ötször megnéztem, de nem akarja az igazságot.
Ez amit belinkeltél meg nekem sajnos nem jó, az MPLAB X egy rakás hibaüzenetet küld, hogy ez nem jó meg az nem jó. De ahogy elnézem, nem véletlen. "(CCS Compiler, Microchip C18 Compiler)".
Tudom, ajándék csónak ne nézd a lapát, de... Valami ötlet?
-
don_peter
senior tag
-
zka67
őstag
Szia, én innen szoktam venni a szenzorokat:
IC DS18B20 TO-92 DALLAS Thermometer Temperature Sensor NEW GOOD QUALITY
-
don_peter
senior tag
Ezek olyan függvények amelyek nincsenek benne a fórosban.
Gondolom egy külső fájlban írta meg és azt nem publikálta.
Használd ezt a forrást: [link]
Egyébként a DS1820-nak van adatlapja ott részletesen leírja miképpen kell vele kommunikálni.
Honnan szereztél ilyen szenzort?
Pont most akarok én is egy olyan projektet elkezdeni amihez ilyen szenzor fog kelleni. -
fraba
aktív tag
Sziasztok!
MPLAB X IDE v2.30-ben fejlesztek egy programot pic16f688-ra. DS1820-al szeretnék hőmérsékletet mérni. A program C-ben íródik. Találtam egy ilyen, már más által megvalósított kapcsolást és programot [link], de olyan parancsot használ (Ow_Reset, Ow_Read, Ow_Write), amit a fejlesztőkörnyezet nem ismer. Gondolom includeolni kéne egy header file-t, de itt elakadtam... Tudna valaki segíteni? Maga az includeolás az menne, azzal semmi probléma nincs, csak hogy mit honnan kell letölteni, hova kellene bemásolni, meg ilyenek.
Előre is köszönöm!
-
axioma
veterán
Azt gyanitanam latatlanban, hogy nem arra gondoltak, hogy a futasnal legyen ez ellenorizve es kiabaljon ha nem jo (vagy esetleg ettol fuggoen mas modszerrel csinald tovabb), hanem arra, hogy az algoritmus maga biztositsa (a felepitesevel), hogy ez alatt marad a felhasznalas (vagy nem hasznalsz dinamikusan foglalt valtozokat, vagy ha megis, azoknak a szamara van felso korlat mar maga az algo alapjan). Illetve van me'g amikor az a cel, hogy a tomoritest oldd meg (pl. 4 db iranyt jelzo info (fel/le/jobbra/balra) egy byte-ban, vagy 30 darab 0-120 kozti egesz lista vagy tomb helyett bithellyel abrazolva 16 byte-on). A kicsit konkretabb feladatbol kiderulhetne, hogy melyik (vszinu egyszeruen kodolhato de sok memoriat hasznalo) algoritmus kizarasa miatt tettek bele a feltetelt - es valoszinuleg mert ettol lett szep es otletet igenylo a feladat
) -
DrojDtroll
veterán
-
don_peter
senior tag
Srácok ennek a BT chipnek a konfigurációs beállításához kellett a bitfordítós program: DPTP System - nRF8001 Bluetooth kapcsolat
Köszi még egyszer a segítséget. -
EQMontoya
veterán
Ez a kérdés hogyan merült fel?

-
DrojDtroll
veterán
Code::block-ban hol lehet beállítani, hogy az adott program csak 32mb ramot hasznaljon???
-
don_peter
senior tag
-
EQMontoya
veterán
-
dabadab
titán
Valami beágyazott rendszerről van szó, ami a PC-kkel ellentétben az OS-t meg a programokat meg egyebeket nem bootkor olvassa be a RAM-ba valami háttértárról, hanem egyrészt valószínűleg OS egyáltalán nincs, ami program meg fut, az fixen flash memóriában van, nem RAM-ban (ezekben a cuccokban egyébként tipikusasn több a flash, mint a RAM, tehát ha valamit át lehet rakni RAM-ból flashbe, az áltlában jó dolog), márpedig egy const tömb az a program része.
-
tototos
addikt
-
tototos
addikt
-
don_peter
senior tag
-
jattila48
aktív tag
-
jattila48
aktív tag
-
jattila48
aktív tag
Hirtelen ez jutott eszembe, de biztos van gyorsabb módszer is:
unsigned char reverse_bits(unsigned char x)
{
unsigned char y=0;
y=y | ((x & 0x80) >> 7);
y=y | ((x & 0x40) >> 5);
y=y | ((x & 0x20) >> 3);
y=y | ((x & 0x10) >> 1);
y=y | ((x & 0x8) << 1);
y=y | ((x & 0x4) << 3);
y=y | ((x & 0x2) << 5);
y=y | ((x & 0x1) << 7);return y;
} -
don_peter
senior tag
-
EQMontoya
veterán
-
don_peter
senior tag
-
EQMontoya
veterán
Hát józan paraszti ésszel nézve is 256byte-ot fogyaszt a lookup table, valamit egy indexelést hajtasz végre (ami ugye gyakorlatilag egy összeadás - tömb kezdetének címe+index).
Ez még egy kenyérpirítón is gyors lesz.Működés: a tömbben minden indexen az adott byte megfordítottja van, csak nyilván hexában van leírva.
Tehát pl.
tömb[1] = 0b00000001 megfordítása = 0b10000000 = 0x80.
tömb[17] = 0b00010001 megfordítása = 0b10001000 = 0x88. -
don_peter
senior tag
-
EQMontoya
veterán
-
don_peter
senior tag
-
dabadab
titán
-
don_peter
senior tag
Kedves kollégák,
Egy olyan algoritmust kérnék tőletek amely egy 8bit-es vagy is 1 byte-ot fordít meg.
Pl: ből - re
00000011 - 11000000
A lényeg, hogy a lehető legkevesebb erőforrást igényeljen a bitművelet.
Egy olyan rutin kellene ami nagyon gyorsan és pontosan illetve rugalmasan dolgozik mert nagyon sok különböző adatot kell felcserélni..
(Azért nem én álltam neki megírni a rutint, mert, itt kevés az, hogy jól működik, itt sokat számít, hogy a lehető leggyorsabb és legkevesebb erőforrást igényelve cserélje fel a bitsorozatot.)
Előre is köszi... (egyébként egy makró vagy struktúra is jó lehet, ha az gyorsabb) -
DrojDtroll
veterán
-
axioma
veterán
Te kell karban tarts egy vektort, amit veremnek hasznalsz, vagy egy valtozot ahol visszafele lepeskor is adminisztralod a valtozast, vagy lehet akar minden elorefele lepesnel megszamolni...
Az algobol eleve kiesik egy info, eleg az a-kat szamolni, mert (ha jol vettem ki) x=y+z igy b kovetkezik, sot a koztes lepeseknel is tudod, mert egy index ugyis kell hogy hol tartasz a veremben, az pont jelzi az aktualis hosszt.
De ezt en nem feltetlen igy csinalnam... ha a kerdes algoritmikus es nem programozastechnikai. Eloszor is kevesebb lepes, ha a run-length kodolas alapjan me'sz (minden lepesben nem 1 db valamelyik karaktert teszel le, hanem 1-tol az adott betubol visszalevoig barmennyit a betuket valtogatva, a legelejen megengedheto de cask ott a 0 db).
Masreszt ez az n alatt a k tipikus esete (x alatt az y), es mivel iszonyat gyorsan nonek ezek a szamok, igy ha ki kell iratni, akar arra is lehet tamaszkodni, hogy bele fog ferni egy nagyobbacska int-be a bitenkenti abrazolassal... az int-ben meg tudod szamolni - persze csak ciklusban de a stringnel joval gyorsabban - a bitek szamat, es csak ami jo azt konvertalod a-b-re.)
Valamelyik pszeudot osszedobhatom, ha gondolod, de mindet inkabb nem. -
DrojDtroll
veterán
-
EQMontoya
veterán
-
don_peter
senior tag
-
dabadab
titán
-
don_peter
senior tag
Köszönöm srácok a segítséget.
Végül így oldottam meg:const struct setup_t {
char dummy;
char command[32];
} valami[] = SETUP_MESSAGES_CONTENT; -
don_peter
senior tag
Tulajdonképpen egy program generálja le ezt a definíciót, amellyel aztán egy chip felkonfigurálását lehet megoldani.
Az adatszerkezetet eddig nem önmagában, hanem lebontva használtam fel, de szeretném kicsit felgyorsítani a tesztelést, így gondoltam a legenerált definíciót felhasználva gyorsítanám meg a dolgot..Ebből a definícióból csak a hosszabb sorok az értékes adatok, ezeket az adatsorokat egymás után kell elküldenem így a külön álló 0x00-ák nem lehetnek közöttük..
-
don_peter
senior tag
-
EQMontoya
veterán
-
dabadab
titán
Ez ugy nez ki, mint egy structot inicializo ertek (ami struct maga is all ket darab structbol, amik darabonkent egy intbol meg egy nyolcelemes int arraybol allnak).
-
don_peter
senior tag
Srácok, elmagyarázná ezt a definíciót vagy makrót valaki, hogy kell értelmezni és hogy tudom az adatokat kinyerni belőle?
#define SETUP_MESSAGES_CONTENT {\
{0x00,\
{\
0x07,0x06,0x00,0x00,0x02,0x02,0x42,0x07,\
},\
},\
{0x00,\
{\
0x06,0x06,0xf0,0x00,0x02,0x49,0x6c,\
},\
},\
}
Nem láttam még ilyet és nem is tudom pontosan miképpen lehet felhasználni..
Előre is köszi... -
Barras
csendes tag
-
kispx
addikt
-
Barras
csendes tag
Segítséget kérnék az alábbiban:
#include <stdio.h>
#include <stdlib.h> /* exit (-1) itt definiálva*/int main()
{
int a, b, c; /* Változók definiálása*/
printf ( "Kérek két számot:");/*kérés megjelenítése*/
if (scanf("%d,%d",&a,&b)!=2); /*input-billetyűzetről, két vesszővel elválasztott egészszám*/
{
printf ("Hibás adatbevitel!\n"); /* hibás input esetén kiírás, utána kilépés*/
exit(-1);
}
c=a+b;
printf ("Két szám összege: %d + %d = %d\n", a, b, c); /*eredmény kiíratása*/
}Miért nem fut le helyesen a következő?
-Feladat: Billetyűzetről beolvas két egész számot,majd megjeleníti az összeget. Hibás input esetén kiírás
-Jelenség: Elindul,helyes adatbevitel után is hiba kiírás, s nem az összeg megjelenítése, s kilép. :S -
emvy
félisten
Egy rekurziv megoldas lehet, pszeudokodban:
szavak_listaja = ures_lista;
fuggveny generalj_szot(szotoredek, rendelkezesre_allo_a, rendelkezesre_allo_b) {
ha szotoredek hossza = x akkor add hozza a szavak_listaja-hoz szotoredeket;
egyebkent
{
ha rendelkezesre_allo_a > 0 akkor generalj_szot(szotoredek+"a", rendelkezesre_allo_a-1, rendelkezesre_allo_b);
ha rendelkezesre_allo_b > 0 akkor generalj_szot(szotoredek+"b", rendelkezesre_allo_a, rendelkezesre_allo_b-1);
}
}Ezt at lehet alakitani rekurzio nelkulire, ha ugy tartja kedved.
-
DrojDtroll
veterán
Újabb problémán van.
Elő kellene állítanom az összes x hosszúságú stringet amelyben pontosan y darab 'a' és z darav 'b' karakter van.
Sajnos nem tudom ezt csak megoldani úgy hogy az 'a' és 'b' karakterekből előállítom az összes x hosszú stringet, és ezekből kiszűröm azokat amelyek kellenek. Valami erőforrás-hatékonyabb megoldás van a problémámra?
-
DrojDtroll
veterán
-
EQMontoya
veterán
FILE **fin;
vs.
fin=fopen("pakol.be", "r+");Túltoltad kicsit a csillagot.

A változókat típus szerint érdemesebb lenne külön sorba deklarálni, ez így nagyon takony.
Szerk:
int** ladak
vs.
for(i=0;i<ladak_szama;i++){
if(ladak(i)>max && ladak(i)!=jel){
max=ladak(i);
maxindex=i;
}
}Itt is egydimenziósként használod a **-ot.
Szerintem némileg fogalmi zavarban vagy a pointerekkel, azt érdemes lenne tisztázni, mielőtt nekiállsz őket így használni.
-
DrojDtroll
veterán
-
peter9228
aktív tag
-
DrojDtroll
veterán
-
axioma
veterán
A temp azert nem nullazodik, mert a j ciklusvaltozo ellenere a magban a temp[i]-be irod a 0-t.
Innen meg ertheto a mukodes (az elozo szemet ottmarad, a rovidebb inputra raragad az elozo vege). -
DrojDtroll
veterán
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define szakmai 0
#define kozossegi 1
#define piaci 2
#define blog 3
FILE *sajat_id;
FILE *log_file;
FILE *html_out;
#define N 500
int main(){
char temp[N], t_str[4][100];
int j, i, t[4], szamlalo;
sajat_id=fopen("drojdtroll.html", "r+");
do{
fscanf(sajat_id, "%s\n", &temp);
if(strcmp(temp, "<p><small><b>szakmai</b></small></p>\0")==0){
fscanf(sajat_id, "%s\n", &t_str[szakmai]);
}
if(strcmp(temp, "<p><small><b>közösségi</b></small></p>")==0){
fscanf(sajat_id, "%s\n", &t_str[kozossegi]);
}
if(strcmp(temp, "<p><small><b>piaci</b></small></p>")==0){
fscanf(sajat_id, "%s\n", &t_str[piaci]);
}
if(strcmp(temp, "<p><small><b>blogok,")==0){
fscanf(sajat_id, "%s\n", &temp);
fscanf(sajat_id, "%s\n", &t_str[blog]);
}
}while(!feof(sajat_id));
fclose(sajat_id);
for(i=0;i<4;i++){
printf("%s ", t_str[i]);
for(j=0;j<N;j++){
temp[i]='\0';
}
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);
t[i]=atoi(temp);
printf("%d\n", t[i]);
}
return 0;
}Előre is köszönöm

-
EQMontoya
veterán
Rakd be akkor az egész kódot, aztán átnézem.

-
DrojDtroll
veterán
csak egy részletet másoltam be, a string le van nullázva, a for megkezdése előtt.
A !isalpha()-t azért tettem bele, mert sima isdigittel nem ment.
for(i=0;i<4;i++){
printf("%s ", t_str[i]);
for(j=0;j<N;j++){
temp[i]='\0';
}
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);
t[i]=atoi(temp);
printf("%d\n", t[i]);
} -
EQMontoya
veterán
Nullterminálni ki fogja a stringet?

Btw a !isalpha(..) mire kell? Ha az isdigit() teljesül, akkor számjegy és kész. -
DrojDtroll
veterán
Van egy kis stringből számmá alakítós problémám.
bemenet(t_str[]-ben tárolva):
<p>464</p>
<p>79</p>
<p>0</p>
<p>62</p>kimenet:
464
794
9
62A középső két sor hibás.
A kódrészlet amivel mindezt próbálom megoldani:
szamlalo=0;
for(j=0;j<strlen(t_str[i]);j++){
if(isdigit(t_str[i][j])&& !isalpha(t_str[i][j])){
temp[szamlalo]=t_str[i][j];
szamlalo++;
}
}
printf("%s ", temp);Mi lehet a gond?
-
DrojDtroll
veterán
-
Jester01
veterán
Szerintem már ő is tudja

-
DrojDtroll
veterán
-
Pttypang
veterán
Gyakorlaton atengedtek, par aprobb hibam volt, pl a kiiratasnal a strukturabol nem tudtam kiszedni az adatot, hanem a memoriacimet irattam ki..

printf("Fapapucsbol ennyi van: %d", &fapapucs->db");
Ez volt az egyetlen verzio, amit elengedett a fordito, de igy meg a memoriacimet irja ki. -
EQMontoya
veterán
No offense, mert gyanítom, hogy nem a Te ötleted, de honnan van ez az elmés standard, hogy magyar függvényneveket használjatok?
A mennyiségi problémára (és performanciára is jótékony hatással - jelen esetben nyilván csak teoretikusan):
Ne inteket olvass be, hanem sorokat (char*), majd írj egy függvényt, ami azokat parseolja - függvényparaméter egy int*, és azt szépen feltölti, return value pedig, hogy mennyi intet sikerült beolvasni.Ha ez bármelyik sorban nem egyezik az elvárttal, vagy az elvártnál kevesebb sort sikerült beolvasni, akkor hiba történt.
-
peter9228
aktív tag
Hoppá, tényleg, itt nem úgy van. Bemásolom az enyémet inkább: [link]
A lényeg, hogy ez tökéletesen működik, ha a fájlban nincs hiba. Most nézem, nem száll el akkor sem ha valami gond van. Viszont azt akarom elérni, hogy ha a nem egyezik meg a magassag és a szelesseg az adatokkal, akkor írjon ki valami hibaüzenetet. (Tehát pl. az elején 10x10-es van, de az adat 100x100-as, vagy fordítva)
Szerk.: Hiányzik egy ; abból amit bemásoltam és van pár fölösleges változó, ezt nézzétek el.
-
emvy
félisten
-
emvy
félisten
-
peter9228
aktív tag
Sziasztok!
Van egy ehhez hasonló programrészletem: [link] (mint az első válasz)
A hibakezelést szeretném megcsinálni, tehát ha mondjuk az első két sorból kisebb/nagyobb méretű tömb jön ki mint amennyi adat van, ne szálljon el a program. Szerintetek hogyan lehetne ezt megvalósítani? -
Cucuska2
addikt
-
Pttypang
veterán
-
bladegery
senior tag
-
emvy
félisten
-
Pttypang
veterán
Igen, koszi, a zarojelezesnel rontottam el, mert en a masik jelzest hasznaltam.
Valamiert ugy gondoltam ,hogy az if a te megoldasod szerint csak akkor engedi tovabb igen-el, ha mindegyik feltetel teljesul.
De akkor ezek szerint nem(#5119) emvy
Valahonnan erre emlekeztem, de ezt is elfogadhatta volna, ha rendesen zarojelezek, nem?
Mert ez lenne a logikai vagy
De mar lehet, hogy belezavarodtam ,es azt se tudom, hogy hogyan allapitjuk meg harom oldalrol, hogy alkothatnak-e haromszoget
Szerintem utobbi zavart be picit -
emvy
félisten
-
Pttypang
veterán
Az indexelest nem vettem eszre, akkor a nem lefoglalt memoriateruletrol gondolom behalaszott valamit.
Pointereket leszedtem, atirtam azokat, amiket emlitettel, de meg igy se irja ki, ha nem lehet osszerakni az oldalakbol haromszoget.Azt is feldobta csoporttarsam, hogy hasznaljam az stdbool.h libet, de azzal nemhiszem ,hogy elorebb lennek, nem valtoztatna rajta.
-
emvy
félisten
- a 'kerulet' valtozot inicializalni kene (0-ra)
- a tomboket (es kb. mindent C-ben) 0-tol kezdodoen indexalunk, tehat az elso elem indexe 0, az n. elem indexe n-1, tehat a lehet_e_haromszog-ben az indexeket csokkentsd eggyel
- if (lehetvagynem = 1)
nagyon tipikus C/C++ hiba: a '=' operator ERTEKADAS, nem pedig egyenloseg-ellenorzes. Az ertekadas eredmenye az ertek. C-ben az if utan kovetkezhet szam is, nem csak boolean ertek (ha nem nulla, akkor igaznak szamit), tehat
if (a = 5) {
// ez itt mindig vegrehajtodik, mert erteket adtal a-nak, es az nem nulla
}Szoval if (lehetvagynem == 1) a helyes.
Te meg az elejen vagy, szoval ha lehet, szokd meg, hogy ugy tesztelunk egyenloseget, hogy bal oldalon van a konstans. Ergo:
if (1 == lehetvagynem) { }
.. ugyanis ha veletlenul elgepeled, akkor szolni fog a fordito.
-
Pttypang
veterán
-
emvy
félisten
Erre is jo, de alapvetoen ez nagyon szuk resze a pointerek felhasznalasi modjanak. Azt gondold vegig, hogy imperativ programozasi nyelvekben (pl. C) megkulonboztetunk ket dolgot:
- ertek
- identitasTehat ha van ket valtozonk:
int a = 5;
int b = 5;.. akkor az ertekuk megegyezik, az identitasuk nem. A pointer arra jo, hogy ne erteket kezelj, hanem identitast. Ha atadom egy fuggvenynek a 'b' valtozo erteket, akkor az 5-ost adom at. Az eredeti b-vel (az identitassal) nem tud a hivott fuggveny semmit sem kezdeni, hiszen arrol nem tud, o csak az erteket (5) latja. Ha a b-re mutato pointert adom at (&b), akkor a hivott fuggveny az identitasrol tud, meg tudja valtoztatni b erteket, ha akarja.
Kepzelj el pl. egy fuggvenyt, ami kicsereli ket valtozo erteket. Ezt nem lehet megcsinalni csak ertekek atadasaval -- a 'csere' fuggveny bemenete ket _identitas_, hiszen ertekeket nem lehet megcserelni, azok ugyanugy ertekek maradnanak.
Funkcionalis nyelvekben (pl. Lisp, ML-leszarmazottak) nincs szukseg ilyesmire, mert ott csak ertekek vannak, identitas nincs. (Illetve van, csak sokkal jobban kezbentartott modon kezeljuk.)
-
Pttypang
veterán
Szóval ez kb arra jo, hogy atadhassak tomboket, a fuggveny pedig ha a parametereknel megadom int *-kent a tombot, akkor nem is kell semmi mast tennem, ezzel at is van adva a tomb es vegezhetek a fuggvennyel muveleteket rajta ugy, hogy nem kell foglalkoznom a visszaadással, mert a memoriacimen talalhato adatokkal dolgozik? Szoval nagyjabol ertem, de megis fura, hogy erre kulon kell valamit alkalmazni..
pl:
#include <stdio.h>
int darab (int * tomb, int meret);
int main()
{
int meret;
printf("Kerem az elemek szamat\n");
scanf("%d",&meret);
int elemek[meret];
printf("A 10-nel nagyobb elemek szama:%d",darab(elemek,meret));
return 0;
}
int darab (int * tomb, int meret)
{
int i;
int tobbmint=0;
for(i=0;i<meret;i++)
{
if(tomb[i]>10)
{
tobbmint+=1;
}
}
return tobbmint;
}[kihagytam az adatbevitel tobbi reszet, nem akartam megirni az egeszet a scanf-el, csak osszedobtam gyorsan, hogy lassam a dolgot.]
-
emvy
félisten
Vegulis ezen kivul nincs tul sok dolog. Par aprosag:
- az operatorok probalnak okosak lenni, ezert ha pl. inkrementalsz egy pointert (ami ugye egy sima elojel nelkuli egesz szam) akkor az nem feltetlen egyet ugrik, hanem annyit, amekkora annak a tipusnak a merete, amire mutat. Tehat pl. egy 64 bites double-ra mutato pointer egy 32 bites architekturan 8 bajttal novekszik, ha inkrementalod.
double ertek = 5;
double * a = &ertek;
printf("%p\n", a);
a++;
printf("%p", a);>> 09FFB28
>> 09FFB30
Ketto kulonbsege: 8- a tomb az nem mas, mint a tomb kezdetere mutato pointer
.. most jo lenne, ha konkret dolgokat kerdeznel

-
Pttypang
veterán
-
emvy
félisten
Van a neten csomofele leiras, erdemes rakeresni, de probaljuk meg itt is.
Ugyebar C-ben (es mas imperativ prog. nyelvekben is) vannak valtozoink, vagy nevezzuk oket inkabb ertekeknek, mert az tokmindegy, hogy valtoznak-e vagy sem. A forditonak megprobaljuk megmondani, hogy milyen tipusu az az ertek, amit letrehozunk. (A tovabbiakban tegyuk fel, hogy sima 32 bites arhichitekturan vagyunk). Pl.:
double a = 1;
Egy valtozorol mindig ket dolgot tudunk: mekkora helyen fer el (hany bitnyi hosszu), es hogyan ertelmezzuk. Azt, hogy hogyan/minek ertelmezzuk, szoktak tipusnak is nevezni.
Most 'a'-rol a kovetkezoket tudjuk:
- 64 bitnyi informacionk van
- ezt egy elojellel rendelkezo lebegopontos szamkent ertelmezzukHa van egy ilyenunk:
double * a;
.. akkor errol az tudjuk, hogy
- 32 bitnyi informacionk van
- ez egy egesz szam, es ugy ertelmezzuk, mint egy memoriacimet. A memoriacimen pedig egy 64 bit hosszu lebegopontos szamot talalunk.Tehat a pointer egy jellemzoen 32 vagy 64 bitnyi informaciot tartalmazo szam. A memoria szepen be van szamozva 0-tol 2^32 vagy 2^64-ig. Ha ahhoz a memoriarekeszhez mesz, aminek a szama megegyezik a pointer ertekevel, akkor ott egy olyan erteket talalsz, aminek a tipusa a pointer tipusaban jelezve is van.
A pointert a * jelzi altalaban. Ha van pl. egy
double ** a;akkor az a kovetkezo jelenti, analog modon:
- van egy 32 bites ertekunk
- ez egy egesz szam, es ugy ertelmezzuk, mint egy memoriacimet. A memoriacimen pedig egy 32 bit hosszu egesz szamot talalunk, amit ugy ertelmezunk, mint egy 32 bites erteket, amit ugy ertelmezzunk, mint egy memoriacimet. A memoriacimen pedig egy 64 bit hosszu lebegopontos szamot talalunk.Ez idaig vilagos?
(Tobbieknek: szandekosan vagyok pontatlan az int, double, etc. meretevel kapcsolatban.)
-
bladegery
senior tag
Ennel szajbaragosabban nem hiszem hogy el lehet mondani.
Magyarul.Szerintem ertheto pelda:
#include <stdio.h>
void csere(int *x, int *y)
{
int tmp;
tmp = *x;
*x = *y;
*y = tmp;
}
int main()
{
int x = 3, y = 4;
printf("A fuggveny elott: x = %d, y = %d\n", x, y);
csere(&x,&y);
printf("A fuggveny utan: x = %d, y = %d\n", x, y);
return 0;
} -
DrojDtroll
veterán
-
Pttypang
veterán
Igen, az angollal elevickelek.
Ott tartok, hogy az eloadas folian le van irva, hogy mi is ez pontosan, de ezzel nem igazan vagyok elorebb, mert nem ertem, hogy miert jo ez. Marmint mire hasznalhato, meg pontosan hogyan.. Szoval a gyakorlati alkalmazasat valamiert nem latom at.
A pointereken kivul a tombok fuggvenyeknek parameterkent valo atadasa sincs meg, de szerintem erre megoldast talalok majd valamelyik eloadas folian.
A strukturakkal egyelore meg nem foglalkoztam, eloszor ezeket szeretnem megerteni, megtanulni a hasznalatukat normalisan.
-
emvy
félisten
-
Pttypang
veterán
Körbenéztem a topic leírásában, de nem igazán találtam azt, amit keresek.
Pontosan egy laikus számára érthetően leírva kerestem volna a pointerek hasznalatarol valamit, illetve magyarazatot hozzá.. Valaki ebben tudna esetleg segiteni?
-
CPT.Pirk
Jómunkásember
Teljesítmény mérő lesz, de egyébként csak annyi, hogy hőkompenzált az AD rész és nem neked kell a számításokat megcsinálni.
Nem bízok benne annyira, mert ezeket a funkciókat már megvalósítottuk nuvotonban. Nekünk igazából a bemeneti szűréssel és az áram felharmonikusokkal volt bajunk, mikor a mérendő áramjel olyan szőrös volt a szkópon, mint a jeti talpa.
- no meg nem volt mihez viszonyítani a mérésünket, így a pontosság kérdése függőben maradt. -
buherton
őstag
Hóhó ez nagyon spéci cucc. Akkumulátor töltő vagy mi lesz belőle?
Most nekem is lenne egy kérdés. Nem igazán C viszont ha már felmerült az ARM, akkor megkérdezem.
Context switcher-t írok, de van két probléma, amivel nem tudok dűlőre jutni:
1. PendSV-ben történik a váltás, ahol értelemszerűen az MSP-t használom. Igen ám, de a stack pointer minden egyes meghíváskor 0x20-val csökken az értéke. Miért csinálja ezt?2. Így térek vissza a PendSV-ből:
volatile uint32_t LR_reg;
LR_reg = 0xFFFFFFFD;
__asm volatile ("BX %0" : "=r" (LR_reg));
Ennek ellnére még mindig privileged módban fut a cucc. Ha ez előtt beállítom direktbe a CONTROL regisztert, akkor user-ben fog futni, de nem erre találták ki az EXEC_RETURN-t?
Új hozzászólás Aktív témák
-
5200 - 5101
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
LOGOUT - lépj ki, lépj be!
LOGOUT reakciók Monologoszféra FototrendGAMEPOD - játék fórumok
PC játékok Konzol játékok MobiljátékokMobilarena - 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 Nyomtatók, szkennerek Tabletek, E-bookok 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ésFÁ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!
- Megújult mobilos felület, fórumos ráncfelvarrás a PROHARDVER! lapcsaládon
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Projektor topic
- Építő/felújító topik
- Mobil flották
- Linux felhasználók OFF topikja
- Samsung kuponkunyeráló
- exHWSW - Értünk mindenhez IS
- Melyik tápegységet vegyem?
- eBay-es kütyük kis pénzért
- További aktív témák...
- Eladó Nintendo WII/WII játékok EGYBEN
- Xiaomi Redmi Note 12 Pro+ 5G 256GB, Kártyafüggetlen, 1 Év Garanciával
- Microsoft Surface Pro 5 16GB RAM / 1TB SSD Brutál tárhely + Teljes szett!
- Xiaomi 15T Pro 5G 512GB, Kártyafüggetlen, 1 Év Garanciával
- GYÁRI TÖLTŐK: USB-C / DELL / LENOVO / HP / FUJITSU / TOSHIBA / Asus / Macbook /// Bp,/MPL/Foxpost
- Dell Latitude 5411,14",FHD,i5-10400H,8GB DDR4,256GB SSD,WIN11,IR kamera
- eShark Karuta Gaming Egérpad - XL eladó 90cmx40cm
- Corsair iCUE ELITE CPU Cooler LCD Display Upgrade Kit
- SK Hynix, Samsung és más 16GB DDR4 so dimm 3200MHz modulok számlával, 6 hó garanciával
- HP ElitBook 840 G10 netbook / 12 hónap jótállás
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Ezzel annyi lehet a gond C-ben, hogy ha az eredeti matrixot megvaltoztatjak, miutan visszaadtad a fvptr-t, akkor esetleg problema lehet. Rendes funkcionalis stilusban ez az alapmegoldas egyebkent, es ott meg azzal sincs gond, hogy valaki kirantja alolad a szonyeget (ill. az eredeti erteket).
![;]](http://cdn.rios.hu/dl/s/v1.gif)




Köszi! 





