Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Mala pomoch kod c ':'

[es] :: C/C++ programiranje :: Mala pomoch kod c ':'

[ Pregleda: 3254 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

StratOS
Slovenija

Član broj: 2234
Poruke: 989
*.ce.sik.si



+1 Profil

icon Mala pomoch kod c ':'22.01.2004. u 10:12 - pre 245 meseci
Posto ne programishem u c-u - pitalica :

Code:

/* Process the data */
int processData(int *dat) {
    int loop;
    int res = 0;

    for(loop = 0; loop < 30; loop++) {
        res += (dat[loop] ? (dat[loop] - 50) : 69) ? dat[loop] : 69;
        while (res > 300000) {
            res -= dat[loop] ? dat[loop] : 169;
        }
    }
    
    return *res;
}

Imam jedan problem, radi se o jednom puzzle site-u, molio bi da mi netko malo pomogne kod ove stvari, naime malo matematicki.

processData funkcija citha 30 linija iz jednog file-a (numerickih)
dat[loop]

znaci res se povecava odnosno smanjuje ako je vechi od 300000
- je minus
+ je plus
: je podeljeno (celibroji ili float ?)
? je operacija, koju treba da nadjem !

Pomoc je potrebna za ':', dali je rezultat celi broji (rounded) ili float ?


Pozdrav StratOS
"Multitasking - ability to f##k up several things at once."
"It works better if you plug it in."
"As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications."
"The one who is digging the hole for the other to fall in is allready in it."
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.landspitali.is

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: Mala pomoch kod c ':'22.01.2004. u 10:56 - pre 245 meseci
Citat:
StratOS:
Posto ne programishem u c-u - pitalica :

Code:

res += (dat[loop] ? (dat[loop] - 50) : 69) ? dat[loop] : 69;
...
res -= dat[loop] ? dat[loop] : 169;



Nisam siguran da sam bas shvatio sta konkretno hoces. Elem, a ? b : c je konstrukcija koja oznacava: ako je a tacno, vrati b, u suprotnom vrati c.

U kôdu koji si poslao u petlji se proverava da li je dat[loop] tacno, pri cemu se vraca dat[loop] - 50, u protivnom 69, zatim se proverava da li je cela ta konstrukcija tacna, pri cemu se vraca dat[loop] u protivnom 69, gde se sve to na kraju dodaje varijabli res.

Zatim, ukoliko je res vece od 30000, proverava se da li je dat[loop] tacno, pri cemu se vraca dat[loop], u suprotnom se vraca 169 i rezultat se oduzima od varijable res.

Dalje je poprilicno jasno.

Poz,
alex.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

leka
Dejan Lekić
senior software engineer, 3Developers
Ltd.
London, UK

Član broj: 234
Poruke: 2534
*.racasse.se

Sajt: dejan.lekic.org


+2 Profil

icon Re: Mala pomoch kod c ':'22.01.2004. u 11:07 - pre 245 meseci
: nije podeljeno, a ? je tercijerni operator i u C-u i u C++-u sa
sledecom sintaksom:
(uslov) ? (izraz1) : (izraz2)

veoma cesto ces naci ovako nesto:

var1 = (uslov) ? (izraz1) : (izraz2)

Uslov je takodje izraz. Ako je uslov tacan, onda se evaluira izraz1, ako
nije onda se evaluira izraz2

U jezicima koji nemaju ovo gore programeri prosto pisu:

if (uslov)
var1 = izraz1;
else
var1 = izraz2;

Dejan Lekic
software engineer, MySQL/PgSQL DBA, sysadmin
 
Odgovor na temu

yooyo

Član broj: 4891
Poruke: 1101
62.108.111.*



Profil

icon Re: Mala pomoch kod c ':'22.01.2004. u 15:07 - pre 245 meseci
Citat:
StratOS:
Posto ne programishem u c-u - pitalica :

Code:

/* Process the data */
int processData(int *dat) {
    int loop;
    int res = 0;

    for(loop = 0; loop < 30; loop++) {
        res += (dat[loop] ? (dat[loop] - 50) : 69) ? dat[loop] : 69;
        while (res > 300000) {
            res -= dat[loop] ? dat[loop] : 169;
        }
    }
    
    return *res;
}



Klasicno bombardovanje memorije...

Program ce puci jer je res int a ne pointer, a processData kao rezultat vraca sadrzaj
lokacije na koju pokazuje res. Obizrom na ludu petlju, res moze dobiti ko zna kakvu vrednost, pa ce return *res sigurno prouzrokovati pad programa.


yooyo
 
Odgovor na temu

blaza
n/a

Član broj: 961
Poruke: 743
*.vdial.verat.net



+3 Profil

icon Re: Mala pomoch kod c ':'22.01.2004. u 18:21 - pre 245 meseci
Na stranu return *res, ovo je analogan kod datom:
Code:

int loop;
int res = 0;
for(loop = 0; loop <30; loop++)
{
    res += dat[loop];
    if(dat[loop] == 50)
        res +=19;
    while (res > 300000)
        res -= dat[loop];
    }
}


Sirina int tipa (16 ili 32 bita) utice na rezultat.
Ako su int varijable 16-bitne moze se pisati : while (res > -27680)...
O_o
 
Odgovor na temu

[es] :: C/C++ programiranje :: Mala pomoch kod c ':'

[ Pregleda: 3254 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.