Uppgift med funktioner... (c++, visual studie 2015)

Permalänk

Uppgift med funktioner... (c++, visual studie 2015)

Hej!

Har fått i skoluppgift att jag ska göra en källkod som bygger på ett antal funktioner med olika in- och utparametrar. Tror ni denna koden blir godkänd då?
Jag har löst uppgiften med att få från summa, medelvärde, största talet och näst största talet men vet ej om jag har löst "enligt uppgiften" (i och med att det står att funktioner ska användas...)

Jag är total nybörjare och har inte förstått mig på hur jag ska använda funktioner så bra så därför löste jag uppgiften såhär.
Om det är helt galet, är det någon som vet hur jag skulle kunna lösa uppgiften med fler funktioner?? :S

#include <iostream> using namespace std; int main() { int input; int sum = 0; int total = 0; int largest; int secondLargest; cout << "Ange ett antal tal, for att berakna ange 0:"; while (cin >> input) { if (!input) { break; } total++; sum += input; if (total == 1) { largest = input; secondLargest = input; } else if (input > largest) { secondLargest = largest; largest = input; } else if (input > secondLargest) { secondLargest = input; } } cout << "Summan ar:"; cout << sum << endl; cout << "Medelvardet ar:"; cout << (float)sum / total << endl; cout << "Storsta talet ar:"; cout << largest << endl; cout << "Nast storsta talet ar:"; cout << secondLargest << endl; cin >> input; return 0; }

Permalänk
Hedersmedlem

Om nu uppgiften är att "använda funktioner" så finns nog risk för att du inte anses uppfylla kraven. Problemet som har valts är väl dock inte jättelämpligt för att brytas ned i olika funktioner, men man skulle väl till exempel kunna tänka sig att spara alla inmatningar i listor (om ni till exempel har använt vector) och skicka in dem till funktioner för att beräkna min, max och medel istället för att beräkna dessa direkt.

Permalänk
Mattecoach

Nu är jag betydligt mer van vid Java än C++, men...

Kan du inte bara definiera funktioner för varje "block"?

Dvs, spara t.ex. värden som matas in i en lista, anropa sedan funktioner "total", "sum", "mean" och "largest" med listan som invärde. Eller?

Permalänk
Medlem

Är funktionernas signaturer (in/ut-parametrar) angivna i uppgiften? I så fall lär din kod inte bli godkänd, eftersom den inte använder några funktioner (förutom den obligatoriska main-funktionen).

Permalänk

@Elgot:
Mja, uppgiften lyder såhär så jag antar att han vill att jag ska använda funktioner på ett annat sätt...
"Skriv ett program som frågar efter ett antal tal och skriver ut summan och medelvärdet av de inmatade talen. Användaren ska ange 0 i slutet av talserien. Programmet ska dessutom skriva ut det näst största och det största talet. Programmet ska vara uppbyggt av ett antal funktioner med olika in och ut parametrar."

Jag tänkte först att jag skulle arbeta med en vector men förstod inte hur jag skulle göra då jag inte vet hur många tal användaren matar in eller vilka tal som kommer att matas in. Överallt där jag läser om vectorer så är talen redan förutbestämda...
Har du något förslag hur man ska börja om man vill använda en vector och funktioner? Jag antar att man på något sätt ska använda sig av en whileloop iaf..

Jag är ju som sagt nybörjare på det här och det känns för avancerat för mig, men är sista uppgiften på kursen så ska väl vara svårt...

Permalänk

@PuMaH:

Det är säkert inte så svårt. Det du skriver låter logiskt, men hur gör man det i programmet? :S

Permalänk

@perost:

Uppgiften lyder såhär:

"Skriv ett program som frågar efter ett antal tal och skriver ut summan och medelvärdet av de inmatade talen. Användaren ska ange 0 i slutet av talserien. Programmet ska dessutom skriva ut det näst största och det största talet. Programmet ska vara uppbyggt av ett antal funktioner med olika in och ut parametrar."

Jag tror att han vill ha in fler funktioner men jag får liksom inte ihop det :/

Permalänk
Hedersmedlem
Skrivet av Morticana:

Jag tänkte först att jag skulle arbeta med en vector men förstod inte hur jag skulle göra då jag inte vet hur många tal användaren matar in eller vilka tal som kommer att matas in. Överallt där jag läser om vectorer så är talen redan förutbestämda...

Fördelen med vector är att den sköter sig själv så man inte behöver tänka på hur stor den kommer att bli. När man väl har skapat den kan man lägga till värden sist med push_back()

std::vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3);

Man kan sedan hämta element 0 till v.size() med hakparenteser:

std::cout << v[0] << std::endl; std::cout << v[v.size()-1] << std::endl;

Permalänk

@Elgot:

Tack för snabbt svar! Tyvärr förstår jag inte riktigt hur du menar. Har som sagt inte arbetat med vectorer tidigare utan bara läst om det.

Det du skriver om v.push.back (1); osv. Innebär det att det är tre tal som matas in?

Jag menar för jag vet ju inte om användaren matar in 2 tal eller 10 tal?
Men det kanske är det du menar med v.size nedanför?

Kan man använda den källkoden jag har och lägga till funktioner samt vector eller bör man börja om från början?

Permalänk
Hedersmedlem
Skrivet av Morticana:

Det du skriver om v.push.back (1); osv. Innebär det att det är tre tal som matas in?

Precis.

Skrivet av Morticana:

Jag menar för jag vet ju inte om användaren matar in 2 tal eller 10 tal?
Men det kanske är det du menar med v.size nedanför?

Det behöver man som sagt inte veta. Innan man har kört push_back kommer v.size() ge 0, efter första gången 1 och efter 10:e gången 10...

Skrivet av Morticana:

Kan man använda den källkoden jag har och lägga till funktioner samt vector eller bör man börja om från början?

Du borde kunna återanvända en hel del; beräkningarna vill du nog göra ungefär likadant som nu fast med tal från en vector.

Permalänk

@Elgot:

Okej men skriver jag något sånt här då, eller skriver jag på fel ställe?

#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <int> myVector;
myVector.push_back(1);
myVector.push_back(2);
myVector.push_back(3);
myVector.push_back(4);
cout << myVector[0] << endl;
cout << myVector[myVector.size() - 1] << endl;

int input;
int sum = 0;
int total = 0;
int largest;
int secondLargest;

cout << "Ange ett antal tal, for att berakna ange 0:";
while (cin >> input) {
if (!input) {
break;
}
total++;
sum += input;
if (total == 1) {
largest = input;
secondLargest = input;
}
else if (input > largest) {
secondLargest = largest;
largest = input;
}
else if (input > secondLargest) {
secondLargest = input;
}
}
cout << "Summan ar:";
cout << sum << endl;
cout << "Medelvardet ar:";
cout << (float)sum / total << endl;
cout << "Storsta talet ar:";
cout << largest << endl;
cout << "Nast storsta talet ar:";
cout << secondLargest << endl;
cin >> input;
return 0;
}

Nu har jag egentligen bara tagit hjälp av det du skrivit och satt in det i min källkod. Hur får jag in vektorn i själva beräkningarna? Jag behöver använda funktioner också men vet inte vilka.. ?