Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Apua aloittelijalle C++ koodin kanssa

Sivun loppuun

Jurpo [04.03.2011 22:41:02]

#

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <time.h>
#include <stdio.h>
#include <cstring>


using namespace std;

int main ()
{
   int clo = clock();

   srand ( ( unsigned ) time ( 0 ) );
   int random_integer;
   int a = 0;
   int lowest = 0, highest = 1000;
   int size = ( highest - lowest ) + 1;

   for ( int n = 0;  n < 10000;  n++ )
   {
   random_integer = lowest + int ( size * rand() / ( RAND_MAX + 1.0 ) );

   if ( random_integer >= 1000 )
   a++;
   }

   int lineaarihaku(int random_integer[], int taulu)

   for ( int i = 0 ; i < 1000; i++ )
   {
   if (taulu[i] == 3689)
   return i;
   return -1;
   }

   final=clock() - init;
   cout << (clock() - clo) << endl;
   return 0;

}

Oheinen koodi antaa seuraavan virheilmoituksen

"ComeauTest.c", line 31: error: expected a ";" (perhaps on the previous statement)

     for ( int i = 0 ; i < 1000; i++ )
     ^

"ComeauTest.c", line 38: warning: parsing restarts here after previous syntax error

     final=clock() - init;
                         ^

Koodi ei ole mitään kaunista

Oma taito / älli ei riitä että keksisin missä on vika voisiko joku viisaampi auttaa...

Mod. huom: Riittäisikö älli kuitenkin kooditagien käyttöön?

Grez [04.03.2011 22:46:29]

#

Sulta puuttuu lineaarihaku -funktion esittelyn lopusta ; (jos nyt ylipäätään funktioita voi esitellä funktion sisällä)

Missä toi init -muuttuja on määritelty. En näe funktiossa sitä, eli onko se joku vakio tms ?

Metabolix [04.03.2011 22:47:53]

#

Koodissasi on useamikin asia pielessä, mutta mainitsen nyt vain virheistä suurimman ja akuuteimman: kääntäjän ilmoittamaa riviä 31 edeltävä koodirivi on joko väärin (kuten Grez sanoi) tai aivan väärässä paikassa, ja jos seuraava for-silmukka yrittää olla lineaarihaku-nimisen funktion sisältö, sekin on aivan väärässä paikassa. Tuliko mieleesi lukea mitään opasta, jossa kerrottaisiin, miten funktiot toimivat?

Jurpo [04.03.2011 23:12:43]

#

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <time.h>
#include <stdio.h>
#include <cstring>


using namespace std;

int main ()
{
   int clo = clock();

   srand ( ( unsigned ) time ( 0 ) );
   int random_integer;
   int a = 0;
   int lowest = 0, highest = 1000;
   int size = ( highest - lowest ) + 1;

   for ( int n = 0;  n < 10000;  n++ )
   {
   random_integer = lowest + int ( size * rand() / ( RAND_MAX + 1.0 ) );

   if ( random_integer >= 1000 )
   a++;
   }

   int lineaarihaku(int random_integer[], int taulu);

   for ( int i = 0 ; i < 1000; i++ )
   {
   if (taulu[i] == 3689)
   return i;
   return -1;
   }

   cout << (clock() - clo) << endl;
   return 0;

}
"ComeauTest.c", line 35: error: identifier "taulu" is undefined
if (taulu[i] == 3689)

Äskeinen oli ensimmäinen viestini ja siinä tuli mukana vahingossa koodin aiempi versio. Ohessa nytten se versio missä vika on.

Grez [04.03.2011 23:13:49]

#

No eikös tuo sano hyvinkin selvällä englanninkielellä sen, mikä on vikana. Eli yrität käyttää muuttujaa, jota ei ole määritelty.

Varmaankin kuitenkin rivien 31-38 olisi tarkoitus olla mainin ulkopuolella... Eli jotenkin tälleen: (en tosin silti keksi mitä ton pitäisi tehdä, enkä miksi tuolle lineearihaku funktiolle annetaan toi random_integer -taulukko jos se ei sitä käytä ja varmaant taulu pitäisi antaa toisessa muodossa kun sitä käytetään taulukkona.. Mutta joo, pientä.)

#include <cstdlib>
#include <iostream>
#include <ctime>
#include <time.h>
#include <stdio.h>
#include <cstring>


using namespace std;

int lineaarihaku(int random_integer[], int taulu) {

   for ( int i = 0 ; i < 1000; i++ )
   {
   if (taulu[i] == 3689)
   return i;
   return -1;
   }
}

int main ()
{
   int clo = clock();

   srand ( ( unsigned ) time ( 0 ) );
   int random_integer;
   int a = 0;
   int lowest = 0, highest = 1000;
   int size = ( highest - lowest ) + 1;

   for ( int n = 0;  n < 10000;  n++ )
   {
   random_integer = lowest + int ( size * rand() / ( RAND_MAX + 1.0 ) );

   if ( random_integer >= 1000 )
   a++;
   }

   cout << (clock() - clo) << endl;
   return 0;

}

Jurpo [04.03.2011 23:16:06]

#

No niin on mutta miten saan sitten tuohon määriteltyä sen muuttujan ???
Kun kerran koodi toimii erillisenä mutta ei silloin kun yhdistän ne ??

Grez [04.03.2011 23:16:59]

#

Mitä sä nyt sitten yhdistelet?

Jurpo [04.03.2011 23:18:25]

#

ohjelman kaksi eri osaa arpojan ja lineaari haun tai en tiedä onko yhdistäminen oikea sana ??

Grez [04.03.2011 23:20:20]

#

No yhdistäminen sanana on varmaan ihan oikein, mutta tapa miten yhdistät vaikuttaisi olevan hyvinkin väärä.

Olisko sulla ne erilliset toimivat versiot näyttää, niin voisi sanoa niistä jotain?

Jurpo [04.03.2011 23:25:22]

#

Ne on olemassa mutta niitä ei ole sovitettu tällaiseen taulukko käyttöön.
Siinä se minulla suurin ongelma juuri on kun vasta opiskelen c++ ja en oikeen vielä osaa / ymmärrä tehdä ohjelmia jotka toimisivat eri vaiheissa. Siis aluksi tekisi taulukon jossa olisi arvotut numerot ja sitten toinen osa hakisi siitä lineaarisesti tietyn luvun ja lopuksi siitä pitäisi saada mitattua aika joka meni koko toimintoon.

Grez [04.03.2011 23:30:22]

#

No joo siis tosiaan funktioita ei ole tapana esitellä/määritellä toisten funktioiden sisällä


Eli ihan yksinkertainen esimerkki olisi

int testi(int a) {
    return a*2;
}
int main() {
    int tulos = testi(3);
    cout << "Tulos: " << tulos << endl;
    return 0;
}

Eli tuossa on testi-niminen funktio määritelty ennen mainia ja mainissa sitten käytetään eli kutsutaan sitä.

Jurpo [04.03.2011 23:37:17]

#

Kiitoksia hyvästä vinkistä.

Pitää ruveta vielä kehittämään omaa ohjelmaani että saan nuo arvotut luvut taulukkoon ja sen edelleen siirettyä lineaarihakuun eli oppia ikä kaikki.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta