Avatar billede zer0c00l Juniormester
20. april 2006 - 11:42 Der er 14 kommentarer og
2 løsninger

Lagring af tal i array

Hej eksperter..

Så er den gal igen :)

Jeg er ved at lave en dynamisk array i c++, som bare ikke vil samarbejde.

Den del af koden, det drejer sig om, ser således ud:

int x, w=0;
double z, gennemsnit, *opsamling;

opsamling = new double[z];

cout << "Indtast antal kast med terning: ";
cin >> z;

for (int y=0 ; y<z ; y++)
{
    x = rand() % 6;
    x=x+1;
    opsamling[y] = x;

    cout << x << " ";
}

for (w=0 ; w=z ; w++)
cout << opsamling[w];

Når jeg kører programmet, skyder den en uendelig lang række tal af sted, hvor hensigten var, at den kun skulle skrive en række med z antal tal.

Hvad er der galt? Der er sikkert meget :) Jeg er en klovn til arrays.
Avatar billede jpk Nybegynder
20. april 2006 - 11:46 #1
for (w=0 ; w=z ; w++)
skal være
for (w=0 ; w<z ; w++)
Avatar billede zer0c00l Juniormester
20. april 2006 - 11:54 #2
Ok det hjalp gevaldigt.. Dog spytter den stadig en lidt for lang talrække ud..
Jeg kørte en test, hvor der blev genereret værdierne: "664532111", men der blev udskrevet: "664533211100384A50".

Hvad kan der være galt?
Avatar billede jpk Nybegynder
20. april 2006 - 12:00 #3
opsamling = new double[z];
skal flyttes ned EFTER
cin >> z;

Du kan jo ikke oprette et array på størrelsen z, før du kender værdien...
Avatar billede zer0c00l Juniormester
20. april 2006 - 12:11 #4
Sorry.. Det var mig, der kopierede det forkert ind..
"opsamling = new double[z];" står allerede efter "cin >> z;"
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:20 #5
Jeg har lige kørt det her:

void main()
{
int x, w=0;
double z, gennemsnit, *opsamling;

cout << "Indtast antal kast med terning: ";
cin >> z;

opsamling = new double[z];

for (int y=0 ; y<z ; y++)
{
    x = ( rand() % 6 ) + 1;
    opsamling[y] = x;

    cout << x << " ";
}

cout << endl;

for (w=0 ; w<z ; w++)
cout << opsamling[w] << " ";

cout << endl;

}

og fik dette som udskrift:
Indtast antal kast med terning: 8
6 6 5 5 6 5 1 1
6 6 5 5 6 5 1 1
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:26 #6
Men altså du laver en lille fejl omkring din brug af rand():

void main()
{
int x, w=0;
srand( time(0) );                   
//Du skal have dette med ellers vil du få de
// samme tal hvergang bibloteket #include <ctime> skal du have med
double z, gennemsnit, *opsamling;

cout << "Indtast antal kast med terning: ";
cin >> z;

opsamling = new double[z];

for (int y=0 ; y<z ; y++)
{
    x = ( rand() % 6 ) + 1;
    opsamling[y] = x;

    cout << x << " ";
}

cout << endl;

for (int w=0 ; w<z ; w++)
cout << opsamling[w] << " ";

cout << endl;

}
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:33 #7
Her har du dit gennemsnit med:

void main()
{
int x, w=0;
srand( time(0) );                   
//Du skal have dette med ellers vil du få de
// samme tal hvergang bibloteket #include <ctime> skal du have med
double z, gennemsnit = 0, *opsamling;

cout << "Indtast antal kast med terning: ";
cin >> z;

opsamling = new double[z];

for (int y=0 ; y<z ; y++)
{
    x = ( rand() % 6 ) + 1;
    opsamling[y] = x;
}

cout << endl;

cout << "Terning kast: " << endl;

for (int w=0 ; w<z ; w++)
{
cout << opsamling[w] << " ";
gennemsnit += opsamling[w];
}

cout << endl;

cout << "Gennemsnit af kast: " << endl;

cout << gennemsnit / z << endl;

cout << endl;

}
Avatar billede zer0c00l Juniormester
20. april 2006 - 12:39 #8
Min random-funktion virker. Jeg har bare ikke skrevet hele koden herinde, da det ikke var den, der var problemer med.

Men jeg forstod ikke helt, hvad du rettede til sidst?

Den kode, du siger virker på din maskine, den virker også på min. Der må altså være en eller anden kodestump i mit program, der gør, at rækken ikke stopper, når den skal..
Avatar billede jpk Nybegynder
20. april 2006 - 12:40 #9
Du ændrer måske w's værdi et eller andet sted..?
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:41 #10
Jeg ved ikke lige hvad der er gået galt med din kode for jeg tror faktisk ikke jeg rettede noget... Meeeen jeg er også lige kommet hjem fra Amsterdam så kan have glemt det;0)
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:42 #11
altså du havde:
for (w=0 ; w<z ; w++)
cout << opsamling[w] << " ";

lavede jeg til:
for (int w=0 ; w<z ; w++) // int w = 0
{
cout << opsamling[w] << " ";
gennemsnit += opsamling[w];
}
Avatar billede zer0c00l Juniormester
20. april 2006 - 12:58 #12
Jeg har lige prøvet at tage udgangspunkt i din kode og stykke for stykke sætte resterne af mit proram ind. Nu virker det :) Ved ikke, hvad der er sket, men der må have ligget en lille kodestump et sted.

Tak for hjælpen ;) Gider du smide et svar fiil123?
Avatar billede fiil123 Nybegynder
20. april 2006 - 12:58 #13
Selvfølgelig det kommer lige her!
Avatar billede zer0c00l Juniormester
20. april 2006 - 13:19 #14
Begge svar første til løsning af problemet. Håber I kan leve med at dele ;)
Avatar billede fiil123 Nybegynder
20. april 2006 - 13:20 #15
Selvføgelig
Avatar billede jpk Nybegynder
20. april 2006 - 13:26 #16
jep, tak for point...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester