Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.283
|
čitano: 1.510.646
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
ihush kaže...

pogrešan pristup.. sve pripremiš pa onda zapišeš (može i backup prije..), koristit kao sekvencijalne memorije, ne kao ram.. jer je to eeprom (sporo). Zato se u nromalnom radu i ne koriste romovi nego se kopiraju u ram itd..

tj KISS kaže, što manje čačkanja eeproma, ako je moguće skoro nikad.. za pristup-korištenje koristiti bilo što drugo, sd/flash/ssd... ili ram ako ga ima dovoljno, jer eeprom nije ram.

 

Oke, sad budem koristio SSD s Arduinom.

Napravio sam tako da spremam cache(svaki bajt koji je u EEPROMu) u RAM i prilikom pisanja provjerava da li je vrijednost koju treba zapisati u EEPROM ista kao u cacheu. Ako je, ne zapisuje, ako nije zapiše ju i updatea cache.

11 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

unsigned int maska = 0xff;

unsigned int byte0 = broj & maska;
unsigned int byte1 = (broj >> 8) & maska;
unsigned int byte2 = (broj >> 16) & maska;
unsigned int byte3 = (broj >> 24) & maska;

 

Ukratko byte[k] = (broj >> k*8) & maska;

'broj' uzimam da je 32-bitni, za 64 bita vjerojatno koristis 'unsigned long long'.

 

13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav!

Imam problem prilikom parsiranja linije. Naime struktura linije je fiksna i prikaza na slici (radi se .pdb formatu za zapis strukture proteina):

 Naravno, odmah sam krenuo koristiti sscanf(), medjutim tijekom citanja, "%4s" nece procitati tocno 4 znakova vec ce zanemariti space-ove i zadati mi probleme (narusiti ostatak parsiranja). probao sam i umjesto "%4s" koristiti "%4[A-Z ]" (sva slova koja ocekujem su velika) medjutim i to mi zbog nekog razloga stvara probleme.

U nastavku je kod koji trenutno imam i slika rezultata. (stavio sam sliku jer imam problema sa formatiranjem koda)

 

 

Linija koju je potrebno isparsirati:

ATOM   238  CA ALEU A  14   -18.441  -9.508  36.673  0.64 12.05      C

 

Linija altLocationIndicator bi trebala biti 'A' dok bi residueName trebao biti "LEU", medjutim 'A' je pobjegao u residueName a 'U' koji je trebao biti zadnje slovo u residueName-u je pobjegao u chainID)

Debugger Debugger
 

 

 

Ako imate neko drugo rjesenje za parsiranje (di se ne koristi sscanf ili nesto sa streamovima), slobodno predlozite. 

 

Poruka je uređivana zadnji put sub 25.5.2019 20:24 (etnes).
Moj PC  
0 0 hvala 0
7 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Pa jesu li ti tabovi između parametara ili spaceovi? Parametri su uvijek fiksni broj znakova? Zašto sam ne napišeš funkciju koja odrađuje parsiranje?

https://www.youtube.com/channel/UCgos5WloYoxCvCeUIi47ZxQ
7 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Zadatak je ucitati n brojeva u nizu i ispisati najmanji.

 

#include <iostream>
using namespace std;
int main(){
int i, n, min=0;
cout<<"Unesi n: ";  /// Ovdje unesem 5
cin>>n;
int niz[n];
for(i=0; i<n; i++){
cin>>niz[i]; /// Upisem 1,2,3,4,5
}
for(i=0; i<n; i++){
if(niz[i]<min){
min=niz[i];
}
}
cout<<min;
}

 

Ako upisem brojeve 1,2,3,4,5 meni ispise 0 umjesto 1

PSN:nikolacurak
Poruka je uređivana zadnji put uto 28.5.2019 20:50 (Nikolacurak).
 
0 0 hvala 0
16 godina
offline
Programiranje u C++-u - pitanja i odgovori

Inicijalizirao si min na 0 tako da ti uvjet if u zadnjoj petlji nikad nije ispunjen.

 
0 0 hvala 0
7 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hvala puno

PSN:nikolacurak
 
0 0 hvala 0
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
andrijam kaže...

Pa jesu li ti tabovi između parametara ili spaceovi? Parametri su uvijek fiksni broj znakova? Zašto sam ne napišeš funkciju koja odrađuje parsiranje?

 Spaceovi. Na kraju sam i napravio svoju funkciju. Mislio sam da mozda nekako mogu iskoristiti vec gotov sscanf

7 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Zadatak je unijeti 10 clanova u niz i ispisati one koji su veci od 5. clana u nizu.

#include <iostream>

using namespace std;

int main()
{
int i;
int niz[10];
for (i=0; i<10; i++){
cin>>niz[i];
}

for (i=0; i<10; i++){
if(niz[i]>niz[4]){
cout<<niz[i];
}
}
return 0;
}

Ovo je moj kod, neki tvrde da u deklaraciji niza int niz[10]; treba pisati 9 umjesto 10. Nisam vise siguran sta je tocno. Upomoc 

PSN:nikolacurak
 
0 0 hvala 0
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

 

@Nikolacurak

 

O.k., well uneseš 10 elemenata u niz, te ispišeš sve one koji su veći od petog člana niza.

Kôd je O.K., samo ga radi provjere komplajliraj.

 

Ne, u deklaraciji niza ispravno piše. Niz ima deset elemenata, ako tako odrediš. Ako staviš broj 9, onda ima devet elemenata.

Ekipu, kaj počinje učiti zbunjuje to, jer kod polja, odnosno nizova (eng. Arrays), elementi se broje od 0.

Tako da je prvi element niza:niz[0], slijedeći niz[1], te tako  dalje,  niz[n - 1], gdje je n broj elemenata niza.

 

 

 

 

Panzerkampfwagen.d-ZG.Hard work, pays off.
7 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

U skoli smo imali blic test i bio je taj zadatak. Uradio sam ovako kako je napisano i ostatak 10 ucenika. Mi smo dobili ocjenu 4. Jedan momak je napisao niz[9]; Profesor je rekao da je njegovo jedino ispravno i on je dobio 5. Ja mislim i dalje da je moje tocno a njegovo krivo. Sljedeci put cu pitat profesora mozda se zabunio

PSN:nikolacurak
 
0 0 hvala 0
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

 

@Nikolacurak

 

Profesor, griješi!

Evo jedan link. Tu sve lijepo piše.

 

Možda, da profesor ode kod Bjarne Stroustrup na instrukcije.

 

Panzerkampfwagen.d-ZG.Hard work, pays off.
12 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
Upucaj ga, nećemo te osudit. 🤦🏻‍♂️
7 godina
offline
Programiranje u C++-u - pitanja i odgovori

Da li moze mala pomoc oko ovoga, napisao sam kod koji radi ali provjerava svaki karakter posebno i ispisuje rjesenje ali me zanima da li bi se ovo pomoci regexa moglo na laksi nacin uraditi?

Da se napravi neki regular expression i da ako se poklapa linija u fajlu sa tim, da izdvaja dijelove tog stringa i racuna izraz?

NAravno sve to treba da se uradi u C-u, pa ako bi mogla pomoc oko toga, bio bih zahvalan.

Poruka je uređivana zadnji put uto 4.6.2019 17:15 (slavenP22).
 
0 0 hvala 0
12 godina
odjavljen
offline
Programiranje u C++-u - pitanja i odgovori

Na koji način mogu kreirati dinamični array pomoću pointera? 

 
0 0 hvala 0
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

 

@Dex.pwn

 

Frende, ovaj

 na YT to lijepo objašnjava.

Panzerkampfwagen.d-ZG.Hard work, pays off.
7 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Napravi si mali test

 

int a[10] = {}; // Inicijalizira sve elemente niza na 0


std::cout << a[0] << std::endl; // 0
std::cout << a[9] << std::endl; // 0
std::cout << a[10] << std::endl; // izbacit će bezvezne brojeve jer pokazuje na vrijednost mem. adrese van niza
std::cout << a[11] << std::endl; // izbacit će bezvezne brojeve jer pokazuje na vrijednost mem. adrese van niza

https://www.youtube.com/channel/UCgos5WloYoxCvCeUIi47ZxQ
12 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
Zar nije to runtime error?
7 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ne, u c++. Nije to C# ili Java.  Možda imaju neki flagovi što mogu izvaciti upozorenje i zaustaviti compajliranje. 

Evo testirao sam na Visual Studiu 2019 Enterprise i odradi se.

https://www.youtube.com/channel/UCgos5WloYoxCvCeUIi47ZxQ
5 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav!

 

Imam jedan problem ako mi je netko voljan pomoći.

Dakle, radi se o pokazivačima i vezanim listama. Razumijem što su to pokazivači, ali jednostavno ne mogu shvatiti način na koji se primjenjuju u vezanoj listi.

Znači, vezana lista se radi na ovaj način:

 

struct element {

       int vrijednost;

       element *sljedeci;

};

typedef element *lista; 

 

Znači prvo se radi struktura u kojoj se kao jedan od komponenti pojavljuje pokazivač koji pokazuje - na što?

I nakon toga se izvan strukture definira pokazivač tipa te strukture. Ne razumijem na koji način se sada manipulira tom vezanom listom, imam dva pokazivača, a nije mi jasno na što točno pokazuju?

 
0 0 hvala 0
10 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

 

@Graco12

 

Ajd' fredne pogledaj ovaj video:

 

Brijem, da bu onda sve jasnije.

Panzerkampfwagen.d-ZG.Hard work, pays off.
12 godina
odjavljen
offline
Programiranje u C++-u - pitanja i odgovori

Pozz,

imam čudam problem s Arduino kodom.

Naime, imam array s deset jedan bajtnih vrijednosti(može biti sve to 8 bajta vrijednost) kojeg želim zapisati na EEPROM.

U ovom slučaju nije problem sa zapisivanjem i Arduino funkcijama već u tome da mi ne rastavlja vrijednost dobro.

Ovdje zapravo ne bi ni trebalo rastavljati jer je vrijednost već jedno bajtna.

U slučaju da je array 8 bajtni, vrijednost bi trebalo rastaviti na osam bajtova(u EEPROM se zapisuju bajtovi).

Za vrijednost iz slota nula(test1Byte[0]) dobro odradi posao(da li je slučajno ispalo dobro ili ne to ne znam), no za svaku drugu vrijednost iz arraya(ne samo ovog, već i drugih, ne odradi dobro).

Array u funkciju ide preko pointera. No ako želim ispisati vrijednost arraya u funkciji dobijem neke divlje brojeve.

Zašto? Kod i debug je na pastebinu

 

 

 

https://pastebin.com/M8ZzbRdP

Rastavljanje vrijednosti iz arraya se odrađuje na 34. liniji.

 

 

@EDIT:

Napravio sam jednostavniji primjer

https://pastebin.com/Yakqa00k

Izlaz je

 

260681968260106
10

 

70453687222272
0

0


0

Zašto se to događa?
Poruka je uređivana zadnji put sub 6.7.2019 23:02 (Dex.pwn).
 
0 0 hvala 0
7 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Zbunjuju te 64bit unsigned integer i kako je posloženo u memoriji. s data[0] ne ispisuješ int8 nego int64 zato dobiješ čudan broj. Ako imaš neki bolji IDE trebao bi moći otvoriti memorijsku adresu na koju pokazuje data u memoriji. Stavio sam privitak. Onda će ti sve biti jasno.  

 

tvoji podaci se nalaza u

0A - 10

14 - 20

1E - 30

 

a s data[0] ispisuješ uint64 =0A141ECCCCCC naravno u decimalnom formatu. A ne int8

 

data[1] ispisuje sljedeći broj iz memorije, drugi crveni krug na slikici.

https://www.youtube.com/channel/UCgos5WloYoxCvCeUIi47ZxQ
Poruka je uređivana zadnji put ned 7.7.2019 21:34 (andrijam).
12 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

Pomogao mi je korisnik na Stacku.

Rješenje je ovako:

 

 

void writePage(uint16_t address,char*data,uint8_tconst len){for(uint8_t dataIndex =0; dataIndex < len; dataIndex++){ std::cout <<(int)data[dataIndex]<< std::endl;}}

writePage(0,reinterpret_cast<char*>(&array[0]),sizeof(array));

 

Na koji to način radi, nemam pojma.

Mogao sam još i u funkciji vraćati s uint64_t na original.

15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav,

 

Pokušavam riješiti Katu na CodeWars stranici, ali ne uspijevam dobiti dobar rezultat tj.,  ne mogu pronaći bug u svom kodu, pa ako može netko pomoći. Tekst zadatka:

 

Two tortoises named A and B must run a race. A starts with an average speed of 720 feet per hour. Young B knows she runs faster than A, and furthermore has not finished her cabbage.

When she starts, at last, she can see that A has a 70 feet lead but B's speed is 850 feet per hour. How long will it take B to catch A?

More generally: given two speeds v1 (A's speed, integer > 0) and v2 (B's speed, integer > 0) and a lead g (integer > 0) how long will it take B to catch A?

The result will be an array [hour, min, sec] which is the time needed in hours, minutes and seconds (round down to the nearest second) or a string in some languages.

If v1 >= v2 then return nil, nothing, null, None or {-1, -1, -1} for C++, C, Go, Nim, [] for Kotlin or "-1 -1 -1".

Examples: (form of the result depends on the language)

race(720, 850, 70) => [0, 32, 18] or"0 32 18"

race(80, 91, 37) => [3, 21, 49] or "3 21 49"

 

Uglavnom, problem koji mi se pojavljuje je da vrijeme koje dobim, kod mijenjanja formata iz decimalnog u HH:MM:SS, kod nekih test caseova mi je uvijek za sekundu manje od točnog rezultata. Mislim da je problem kod zaokruživanja, ali ne znam u kojem smjeru da idem. Moj (dio) koda:

 

class Tortoise
{
public:
static std::vector<int> race(int v1, int v2, int g)
{
   if (v1 > v2)
     return {-1, -1, -1};

     long double time = (long double)g / ((long double)v2 - v1); // time calc formula


     int hours = (int)time; //0
     long double minutesRemainder = (time - hours) * 60;
     int minutes = minutesRemainder; //32
     long double secondsRemainder = (minutesRemainder - minutes) * 60;
     int seconds = secondsRemainder;

     return { hours, minutes, seconds };
   }
};

 

 

 
0 0 hvala 0
4 godine
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Potrebna mi je pomoć za arduino.

Poruka je uređivana zadnji put pet 26.7.2019 21:27 (dimitrijeee).
 
0 0 hvala 0
12 godina
odjavljen
offline
Programiranje u C++-u - pitanja i odgovori

Malo žešći problem jel kod mene ne postoji ništa osim toga.

Radim funkciju koja zapisuje bajtove u EEPROM memoriju(Arduino), no ne koristi se niti jedna Arduino funkcija ovdje, već samo testiram da li sve radi po pitanju C++a

Stvar je da mogu 64 bitne arraye zapisati pomoću page funkcije(tad 32 bajta zapiše u jednom udarcu, inače bi zapisivao 32 puta, a EEPROM se troši/slabi zbog toga).

Page od mog EEPROM čipa je 32 bajta(nebitno). Dakle, array od 10 "mjesta" ima 80(10 * 8), to je 3 stranice(tri puta će zapisivati u EEPROM).

 

Stvar je u tome da funkcija dođe do druge stranice, bajt 44(44. bajt u globalu, no 13. bajt na drugoj stranici) i odjednom se vrati na bajt 0(koji je na prvoj stranici).

Zašto se to događa

Doslovno nigdje nisam taknio granice petlje.

 

https://pastebin.com/ShUdxi5g

https://imgur.com/xyi9IOY

 

Ako bi mogla pomoć

Zahvaljujem

 

@Našao gdje je memory leak bio.

Treba bolje gledati :D

Poruka je uređivana zadnji put pon 2.9.2019 22:33 (Dex.pwn).
 
0 0 hvala 0
7 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

   int minutes = minutesRemainder; //32
     long double secondsRemainder = (minutesRemainder - minutes) * 60; 

 

nije li ovo (0 - 0) * 60?

https://www.youtube.com/channel/UCgos5WloYoxCvCeUIi47ZxQ
Poruka je uređivana zadnji put uto 10.9.2019 9:30 (andrijam).
12 godina
odjavljen
offline
Programiranje u C++-u - pitanja i odgovori

Napravio sam ovaj kod. Uzima string podataka, i njega razbija na pojedine podatke.

Preko sscanfa sam izdvojio ime podatka i vrijednost istog. Sad kad trebam provjeriti da li je podatak taj i taj(znači, ime podatka), provjera ne radi.

Koristim C-string jel će se kod vrtiti na Arduinou koji nema baš puno memorije.

 

 

 

 char data[] = "v 35,rpm 80,temp 25,dist 31051999,vbat 33";
 char *dio;

 dio = strtok(data, ",");

 while (dio != NULL)
 {
  long value = 0;
  char *type;
  printf("%s\n", dio);

  sscanf(dio, "%s %d", type, &value);
  printf("-----Type: %s\n", type);
  printf("-----Value: %d\n\n", value);

  if (type == "temp") printf("Jel vruce lega?\n");

  dio = strtok(NULL, ",");
 }

 

 

Ako bi mogla pomoć mala. Zahvaljujem
Poruka je uređivana zadnji put pet 27.9.2019 14:18 (Dex.pwn).
 
0 0 hvala 0
12 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori

Napravio sam sve, radilo je kak treba, no za Arduino sscanf je killer. Previše ROMa zauzima.

Tako da sam odlučio koristiti metodu koju koristim za razdvajanje komandi.

Radi super za prvu komandu, no onda tu stane.

 

 

 char data[] = "v=35,rpm=80,temp=25,dist=31051999,vbat=33";
 char *dataPart;

 dataPart = strtok(data, ",");

 while (dataPart != NULL)
 {
  long cmdValue = 0;
  char *cmd;

  printf("Izdvojeni dio: %s\n", dataPart);

  cmd = strtok(dataPart, "=");
  cmdValue = atoi(strtok(NULL, "="));

  printf("%s | %d\n", cmd, cmdValue);

  printf("Izdvojeni dio OPET: %s\n\n", dataPart);
  dataPart = strtok(NULL, ",");
 }

Izlaz mi je
Izdvojeni dio: v=35
v | 35
Izdvojeni dio OPET: v
Ako bi mogla mala pomoć. Prednostavljam da trebam napraviti "kopiju" ulaznih podataka.
E-mail:
Lozinka:
 
vrh stranice