Permalänk

C++ Programmering B hjälp

Tja alla sweclockers!
Tänkte ställa en fråga om ni kan hjälpa mig. Så här ligger det till, jag har läxa till imorgon i Programmering B där vi arbetar med enkla satser och behöver er hjälp. Läxan är till imorgon så jag skulle bli väldigt väldigt tacksam om ni kunde hjälpa mig!
Frågan lyder såhär:

1. Lägg till en bit kod i programmet som visar könsfördelningen i vectorn, alltså hur många kön det finns. Mata ut resultatet till skärmen. Deklarera två int variabler som räknas upp vid varje genomlöpning av vectorn. Använd if-else satsen. För att det skall fungera så använd bara m och k vid inmatningen av könet till vectorn.

Jag har alltså redan skapat en vector, jag behöver bara hjälp med att fixa en fungerande if else sats som räknar ut hur många kön det finns i programmet!

Väldigt tacksam för hjälp!
MVH Martin.

#include <iostream> #include <CONIO+.H> #include <string> #include <vector> #include <iomanip> #include "svtecken.h" using namespace std; struct Person { string namn; double alder; char kon; }; int main() { teckenbyt(); Person inmatning; vector<Person>personlista; cout << "Mata in namn" << endl; getline(cin,inmatning.namn); while(inmatning.namn!="") { cout << "Mata in ålder" << endl; cin >> inmatning.alder; cout << "Mata in kön" << endl; cin >> inmatning.kon; personlista.push_back(inmatning); cin.ignore(1000,'\n'); cout << "Mata in ett namn igen" << endl; getline(cin,inmatning.namn); } for(unsigned int i=0; i<personlista.size(); i++) { cout << endl << setw(15) << personlista[i].namn << setw(10) << right << personlista[i].alder << setw(5) << right << personlista[i].kon; } cout << "\n\n"; double summa=0; for(int i=0; i<personlista.size(); i++) summa=summa+personlista[i].alder; cout << "Medelåldern blir " << summa/personlista.size() << "."; cout << "\n\n"; int ant_man=0, ant_kvinnor=0; char ch='\0'; if (ch=='m'&&ch=='M') ant_man++; else (ch=='k'&&ch=='K'); ant_kvinnor++; cout << "Antalet män är " << ant_man << " " << " och antalet kvinnor är " << ant_kvinnor << " "; // cout << endl << personlista[0].namn; getch(); return 0; }

Så här långt har jag kommit hittills, fast den vägrar o räkna rätt!

Visa signatur

Phenom II X3 720 2.8 Ghz | Gigabyte MA770-UD3 | Corsair 8500C5 2x2Gb | XXX HD4870 512mb | Corsair VX 450W | OS Win 7 RC x64

Permalänk
Medlem

Skulle ju rekommendera dig att klistra in din nuvarande kod i första inlägget inom "[CODE]" taggar. Då utan "".

Visa signatur
Permalänk

Så !

Visa signatur

Phenom II X3 720 2.8 Ghz | Gigabyte MA770-UD3 | Corsair 8500C5 2x2Gb | XXX HD4870 512mb | Corsair VX 450W | OS Win 7 RC x64

Permalänk
Medlem

int ant_man=0, ant_kvinnor=0; char ch='\0'; if (ch=='m'&&ch=='M') ant_man++; else (ch=='k'&&ch=='K'); ant_kvinnor++; cout << "Antalet män är " << ant_man << " " << " och antalet kvinnor är " << ant_kvinnor << " ";

Tja, det där ser inte rätt ut tycker jag. Du bör ju för det första gå igenom alla element (personer) i din lista och läsa variabeln "kon" som du sedan jämför mot liten ELLER stor bokstav.
Som det ser ut nu så tilldelar du en variabel värdet '\0' och kollar sedan en gång om den är lika med 'm' OCH 'M' (vilket aldrig kommer hända). Variabeln har ju dock inget att göra med personens kön, eller ens med någon person i listan. Nästa rad, bör i alla fall vara "else if", och samma sak där med att vilkoret aldrig kommer uppfyllas eftersom bokstaven inte kan vara stor och liten. Som det står nu så ska jämförelsen göras om "ch" inte är 'M' och 'm' (d.v.s. alltid), men inget görs. Dessutom så har du ett semikolon efter vilkoret, vilket för en if-sats skulle innebära att ingenting ska göras om villkoret är uppfyllt, så ant_kvinnor ökas oavsett.

Jag skulle gissa på att den säger att listan innehåller inga män och en kvinna, eller?

Permalänk
Medlem

Du behöver göra en iteration som löper över personlistan och kollar om personlista[i].kon == 'm' || personlistan.kon == 'M' då man++ annars kvinna++.

nu vet jag inte vad som står i svtecken.h men jag antar att den gör så att åäö fungerar i cmd.
det räcker att skriva setlocale(LC_ALL, "swedish"); i början av main så får du svenska tecken.

Permalänk

Tack för era svar, men jag får fortfarande inte till det!
KaZZiM, förstår inte riktigt vad du menar?

Visa signatur

Phenom II X3 720 2.8 Ghz | Gigabyte MA770-UD3 | Corsair 8500C5 2x2Gb | XXX HD4870 512mb | Corsair VX 450W | OS Win 7 RC x64

Permalänk

Du har helt rätt Thomas H. Fast hur får jag programmet att kunna räkna hur många män respektive kvinnor det finns?

Visa signatur

Phenom II X3 720 2.8 Ghz | Gigabyte MA770-UD3 | Corsair 8500C5 2x2Gb | XXX HD4870 512mb | Corsair VX 450W | OS Win 7 RC x64

Permalänk
Medlem

Gå igenom hela listan, kolla ifall personlista[i].kon är MAN eller KVINNA, och öka då respektive int variabel med 1.

typo
Visa signatur

| Antec P183 | AMD Phenom 2 940 | Corsair XMS2 DDR2 8192 MB | XFX HD4870 | Gigabyte MA-790X-UD3P | Corsair VX 450W | Primärt OS: Arch Linux | Windows 7 x64 |

Permalänk

Kan inte personlista[i].kon vara både man eller kvinna? I fall det inte går, hur gör man dem seperata?

Visa signatur

Phenom II X3 720 2.8 Ghz | Gigabyte MA770-UD3 | Corsair 8500C5 2x2Gb | XXX HD4870 512mb | Corsair VX 450W | OS Win 7 RC x64

Permalänk
Medlem

Person.kon är en char variabel, vilket innebär att den kan lagra ett tecken (eller en byte för att vara exakt). Vad innebörden av det den lagrar är beror ju helt på hur du definerar det i programmet. Nu verkar det ju dock som om värdet 'm' ska vara man och 'k' en kvinna, och mer behövs ju inte (om du nödvändigtvis måste ha något som är varken man eller kvinna, eller något som är båda så räcker det ju med att kolla om värdet är varken 'k' eller 'm', om du inte vill tilldela ett specifikt värde för båda könen / inget kön).

Du bör alltså gå igenom hela listan, element för element, och plocka ut din variabel "kon" ur elementet. Exempel på hur du kan göra det står ju i din egen kod när medelåldern beräknas. Om värdet är lika med 'k' (och vill du ha stöd för stor bokstav också så får du använda ett logiskt eller, ||, och kolla om det är 'K') så är personen en kvinna och du kan öka på din räknare. Annars så kan du kolla om det är 'm' (eller 'M') om du vill, eller så antar du bara att det är en man om det inte är en kvinna. Sen tar du nästa element och kollar vilket kön den har, o.s.v.

Permalänk
Medlem

det finns ju bara en char kon variabel i varje Person objekt. Alltså kan personen bara ha ett kön... dock om man matar in något annat än 'm' eller 'k' så kommer den inte räkna upp. Du behöver en kontroll så att man inte kan mata in dålig data för då fallerar programmet. Man måste tänka på allt som "kan" hända om den som använder programmet gör fel. Den siste idioten är inte född än.