Just nu i M3-nätverket
Gå till innehåll

Printa * istället för antal förekomster


AnnaGK

Rekommendera Poster

Nu behöver jag er expert-hjälp igen för att klara av uppgiften.

Nedan kod fungerar på så sätt att jag får en * för varje bokstav men jag vill ju ha en *gånger 2 för varje procent som bokstaven förekommer i en text.

Koddelen som räknar ut procenten fungerar perfekt. Men "som vanligt" får jag inte med procenten till nästa funktion fastän jag har gjort variabel i main Har kortat av den lite så att det bara är de funktioner som jag har problem med som kommer med.

 

Tacksam för hjälp!

 


// Funktionen berakna_histogram_abs
void berakna_histogram_abs(const string &str, int f[]);

//Funktionen abs_till_rel
void abs_till_rel(const string &str, int f[],int & b, double Procent);

// Funktionen plotta_histogram
void plotta_histogram(int f[], double &Procent);

//--------------------------------------------------------
int main()
{
 	string rad;
cout<<"Mata in en rad text: ";
getline(cin,rad);

int b;
frekvenser(rad,;

int f[ANTAL_BOKSTAVER];
berakna_histogram_abs(rad,f);

double Procent;
abs_till_rel(rad, f, b, Procent);

plotta_histogram(f,Procent);

  return 0;
}

//--------------------------------------------------------
//Funktionen abs_till_rel
void abs_till_rel(const string &rad, int f[],int & bokstaever, double Procent)
{
//cout << "RESULTAT FOR BOKSTAEVERNA A-Z" << endl;
cout << "Totala antalet bokst\x84ver: " << bokstaever << endl;
//cout << "Bokstavsfordelning: " << endl;
for (int i=0; i<ANTAL_BOKSTAVER; i++)
{
   	char b = char (i+'A');
   	//cout << b << ": "<< f[i]<<endl;
   	Procent = f[i]/(double)rad.length()*100;
   	cout << setprecision(4)<< b << ": " << Procent << endl;
}
}

// Funktionen plotta_histogram
void plotta_histogram (int f[], double &Procent)
{
int x = int (Procent);

  for(int i=0; i<ANTAL_BOKSTAVER; i++)
{
   	char b= char(i+'A');
   	cout << b << ": ";
   	cout << x << ": ";
   	for(int j=0; j<=f[i]*2*x; j++)
   	cout << "*";
   	cout << endl;
}

}

Länk till kommentar
Dela på andra webbplatser

Det ser lite ut som att du har blandat ihop in- och ut-parametrar (argument) till funktioner.

 

double Procent = inparameter, det som händer i funktionen med Procent returneras inte

Länk till kommentar
Dela på andra webbplatser

Jag testade att lägga in så att void abs_till_rel(const string &str, int f[],int & b, double Procent);

var en int abs_till_rel(const string &str, int f[],int & b, double Procent); och så satte jag in return Procent; men det resulterade inte i något annat svar. Men det är så jag ska göra?

 

 

 

Länk till kommentar
Dela på andra webbplatser

Om du returnerar Procent så ska du inte ha det som en parameter dessutom.

 

Så vitt jag kan se finns det ingen anledning till att ha bokstaever som en in+ut-parameter i stället för som inparameter.

Länk till kommentar
Dela på andra webbplatser

När man skickar parametrar till en funktion så kan man göra det 'by value' eller by reference. Att skicka en parameter by value innebär att man värdet för parametern som skickas med i anropet till funktionen kopieras. Att skicka en parameter by reference innebär att man istället kopierar adressen för parametern och på så sätt skriver man till samma minnesutrymme. Ett annat alternativ är att låta funktionen returnera värdet på parametern som kopierades by value.

 

Låt mig ge dig ett exempel

 

//by value
void myFunc1(int aParam)
{
//värdet för 'myValue' har kopierats till 'aParam'
aParam = aParam + 1;
//aParam är nu lika med 2
//myValue har ej ändrats

//När funktionen avslutats så upphör aParam att 
//existera och vi tappar bort värdet som tilldelats 
}

//by reference
void myFunc2(int &aParam)
{
//Adressen för 'myValue' har kopierats till 'aParam'
//detta innebär att myValue och aParam nu pekar
//på samma adress (d.v.s. samma minne)
aParam = aParam + 1;
//aParam är nu lika med 2

//myValue är nu lika med 2
//obs att det ej är möjligt att
//myValue = 2
//då denna funktion ej känner till variabeln myValue 
//När funktionen avslutats så upphör aParam att 
//existera med då både aParam och myValue pekar
//på samma adress så kan vi nå värdet (2) via myValue
//från main 
}

int myFunc3(int aParam)
{
//värdet för 'myValue' har kopierats till 'aParam'
aParam = aParam + 1;
//aParam är nu lika med 3
//myValue har ej ändrats

//Vi returnerar värdet för aParam
return aParam; 
}


int main()
{
  int myValue = 1;
  myFunc1(myValue);
  //myValue är lika med 1
  //aParam är okänd
  //myValue är nu 1
  myFunc2(myValue);
  //myValue är nu 2
  myValue = myFunc3(myValue);
  //myValue är nu 3
}

Länk till kommentar
Dela på andra webbplatser

Tack för era tips och lösningar, de är ovärderliga i min utveckling!

Nu är jag nästan klar med min uppgift. Har en sista funktion kvar men den vill sej inte riktigt. Får följande felmeddelande: error: invalid types `double[int]' for array subscript

 

Alla rader med som får felet ligger i funktionen Tolka (ex: sum[j]= sum[j]+ skillnad*skillnad;):

 

Och så hände det igen. Testade lite fram och tillbak. Lade in antal spåk i Sum och då fungerade den.

Lycklig, lycklig, lycklig!

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...