Programmering c++ akut hjälp, class och funktioner
Hej, har flera gånger tagit del av gamla trådar här på sweclockers för tidigare problem i livet. Men nu är det äntligen dags att tillföra ett eget problem.
Först och främst ja jag har sökt, tro mig jag har sökt..
Är lite trött i huvudet i skrivande stund då klockan är mycket så ha överseende med eventuella felstavningar eller knäppa formuleringar.
Mitt problem är att jag kört fast på en uppgift där jag skall skapa ett program med en klass. Person som skall innehålla namn och ålder, detta var inget problem.
Sedan en funktion för linjär sökning, vet inte om det fungerar ännu då hela programmet lär sättas samman innan det får testas. Men tror att det är rätt.(fast ändå inte då operanderna inte vill fungera i min kod).
(Tilläggas här skall väl också göras att jag är väldigt färsk på området programmering).
Sedan är det en funktion för bubblesort. Tror även jag fått till själva koden men det är själva sammansättningen som får mig att slita håret från huvudet.
Själva problemet i sig är väl att jag saknar kunskapen för vilka metoder jag skall använda för att koppla samman det då de vanliga sakerna inte vill fungera för mig. Till exempel familj[4] = pers1.get_alder; Måste jag lägga..
Okej där har jag löst 1 fel själv ska bara vara pers1.
Jaha men det var redan innan jag fått svar väldigt givande att skriva hit märker jag. Har redan rätt ut det mesta.
(OBS ej testat ni hittar säkert fel och saker som inte kommer fungera men enligt compilatorn är det bara operanderna just nu som det verkar.
Håller verkligen tummarna för att ni kan komma med bra information. Kan ni bara leda mig på rätt väg så skulle jag vara otroligt tacksam.
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Person
{
private:
string namn; // Lägger dessa i privat för att det känns fel att ha denna information public.
int alder;
public: //Här innuti använder jag get/set för att enkelt kunna hämta/ange namn/ålder på eventuella personer.
void skrivut() //Funktionen skrivut som kan anropas i samband med en person för att skriva ut informationen om denne person. Enligt cout nedan.
{
cout << "Personen /x84r " << alder << "/x86r gammal och heter " << namn << "." << endl; //Utskrift vid anrop av funktionen skrivut()
}
string get_namn()
{
return namn;
}
void set_namn(string set)
{
namn = set;
}
int get_alder()
{
return alder;
}
void set_alder(int set)
{
alder = set;
}
};
int linsok(Person p[], int n, int a)//Funktion för linjär sökning av ålder
{
int i=0;
for(i=0;i<n;i++) //Söker igenom hela array:n.
{
if(p[i] == a) //Om p[i] är lika med sökt värde så returneras i. *****FEL: Operanden == no operator matching these operands. Antar att det har med pekare att göra. Eftersom p[i] är * som jag förstått det ska något likt -> användas men då blir det ändå problem (expression must have pointer type)*****
{
return cout << p[i] <<endl;
}
}
return -1; //annars returneras -1.
};
void bubblesort(Person p[], int n) //sorteringsalgoritm.
{
int i, j, funnen=1, temp; //Deklarerar de värden som krävs vid sorteringen
for(i=0; i<=n-1 && funnen; i++)
{
funnen=0;
for(j=0; j<n-1; j++) //Går igenom hela listan
{
if(p[j] > p[j+1]) //Om p[j] är större än p[j+1] flyttas p[j] till en temporär plats i temp för att sedan få sin rätta plats. *****FEL: Samma sak gäller här operanden fungerar inte.******
{
temp = p[j]; ******FEL: kan inte konvertera class person * to int*****
p[j] = p[j+1];
p[j+1] = temp;
funnen = 1; //Loppen pågår tills dess att inget tal i arrayn behöver flyttas.
}
}
}
return;
};
int main()
{
int age = 0;
Person familj[4]; //Deklarerar array:n familj med 4 platser
{
Person pers1; //Familjemedlemmar skapas.
Person pers2;
Person pers3;
Person pers4;
pers1.set_alder(14); //Familjemedlem 1 blir tilldelad en ålder.
pers1.set_namn("olof"); //Familjemedlem 1 blir tilldelad ett namn.
pers1.skrivut(); //Familjemedlem 1's tilldelade ålder & namn skrivs ut.
pers2.set_alder(6);
pers2.set_namn("Lisa");
pers2.skrivut();
pers3.set_alder(37);
pers3.set_namn("Lena");
pers3.skrivut();
pers4.set_alder(42);
pers4.set_namn("Erik");
pers4.skrivut();
{
familj[1] = pers1; //Tilldelar varje familjemedlem en plats i arrayn.
familj[2] = pers2;
familj[3] = pers3;
familj[4] = pers4;
{
bubblesort(familj, sizeof(familj)); //Anropar funktionen bubblesort för att sortera array:n familj[4].
{
cout << familj <<endl;
cout << "Ange en /x86lder att s/x94ka efter./n Avsluta med ENTER." << endl; //Skriver ut anvisningar till användaren
cin >> age; //Låter användaren mata in åldern att söka efter.
}
linsok(familj, sizeof(familj), age); //Söker efter det angivna värdet och om detta hittas returneras det
}
}
}
system("PAUSE");
return EXIT_SUCCESS;
}
Kommer markera med *** där det är operand fel. Ursäkta om jag strukturerat koden konstigt som sagt hållit på i 1 vecka med programmering så är väldigt färsk.
Först till en viktigt fråga för mig. Visst är familj[4] en array och inte en vector.
Detta är vad som står om min uppgift för den delen:
Deklarera en vektor familj med fyra personer:
Person familj[4];
Har förstått det så i böckerna jag läser/på forumet så blir lite kluven när läraren alltid refererar till att det heter vektor.
Iaf. Tror problemet ligger i main delen. Kanske deklarera familj[4] med bara ålder först sedan sortera och därmed lägga till namn? Men som sagt är verkligen ute på hal is atm. Håller tummarna för att få goda och bra råd från er erfarna sweclockers! Tack på förhand och hoppas jag uppförde mig och väl i mitt första "inlägg".
Varma hälsningar, Tobbe. PS. Ska lämnas in idag så snabba svar/råd är tas emot med öppen famn! Nu... Mot sängen!