Vektorer m.m. i visual basic 2015

Permalänk

Vektorer m.m. i visual basic 2015

Hej!

Är helt nybörjare inom programmering av c++ och läser nu en kurs i detta. Har klarat tidigare uppgifter men nu har jag kört fast.
Uppgiften lyder såhär:

"Uppgiften ska innehålla:
En analysdel
Pseudokoden eller strukturdiagram
Väl kommenterad källkod.
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 antar att man ska använda vektorer men jag känner mig helt lost när jag ska börja göra en källkod till programmet. Är det någon som har någon idé om hur jag ska börja?

Mvh

Permalänk
Medlem

Börja du med analysdelen. Undersök problemet, lös det för hand, utveckla en effektiv metod och skriv därefter ner den som pseudokod. För den här uppgiften är vektorer inte nödvändiga, så haka inte upp dig på det.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk

@LemonIllusion:
Tack för snabbt svar!
Såhär ser min analysdel ut. Har pseudokod samt källkod kvar och det är där jag kör fast.

a. Vilket resultat vill vi ha?
Vi vill ha ett program som frågar efter ett antal tal och skriver ut summan och medelvärdet av de inmatade talen. Programmet ska även skriva ut det största och det näst största talet.

b. Vilka informanter är tillgängliga och hur tillförs dessa programmet?
Programmet frågar efter ett antal tal som programmet ska göra beräkningar med. Talen fylls i av användaren via tangentbordet.

c. Hur kan man få fram resultatet i allmänna drag?
Summan räknas ut genom att alla talen adderas.
Medelvärdet räknas ut genom att summan av alla talen divideras med antalet tal.
Det största talet sorteras fram.
Det nästa största talet sorteras fram.

d. Hur ser gränssnittet ut mellan användaren och programmet om det finns en kommunikation mellan användaren och programmet?
”Ange ett antal tal, avsluta med 0:” syns på skärmen. Användaren fyller i valfritt antal tal och avslutar med 0. Därefter presenteras summan av talen, medelvärdet av talen, det största talet samt det näst största talet.
Exempel:
Ange ett antal tal, avsluta med 0: 5 7 2 4 3 0

Summa: 21
Medelvärde: 3,5
Största tal: 7
Näst största tal: 5

Förslag på hur jag ska gå vidare med psedukod samt källkod?

Permalänk

@LemonIllusion:
Förslag på pseudokod:

Skriv ut texten ”Ange ett antal tal, avsluta med 0”:
När användaren avslutar med 0, läs in talen.
Beräkna summa.
Beräkna medelvärde.
Sortera talen i storleksordning.
Skriv ut texten ”Summa = , Medelvärde =, Största talet =, Näst största talet =”.

Känns som det är för enkelt? Och vet ändå inte hur jag går vidare med källkoden...

Permalänk
Medlem
Skrivet av Morticana:

@LemonIllusion:
Förslag på pseudokod:

Skriv ut texten ”Ange ett antal tal, avsluta med 0”:
När användaren avslutar med 0, läs in talen.
Beräkna summa.
Beräkna medelvärde.
Sortera talen i storleksordning.
Skriv ut texten ”Summa = , Medelvärde =, Största talet =, Näst största talet =”.

Känns som det är för enkelt? Och vet ändå inte hur jag går vidare med källkoden...

Var menar du att du fastnar? Din pseudokod är korrekt. Om du vill läsa in all input till en vektor, börja med att skapa en vektor och läs in talen till den.

Det finns även en annan metod för det här som kräver mindre minne och beräkningskapacitet. Allt som efterfrågas går att beräkna efter varje tal matats in utan att komma ihåg mer än en handfull värden som summa, hur många tal som matats in, maxvärden osv.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk

@LemonIllusion:
Okej, bra då vet jag att pseudokoden är okej.

Börjar med källkoden såhär:

#include<iostream>
#include <vector>
#include<conio.h>
#include<iomanip>
#include<string>
using namespace std;
float summa;
float medelvärde;
float stor;
float nstor;
int main() {
int tal;
cout << "Ange ett antal tal, avsluta med 0.";
_getch;
return 0;
}

När jag kompilerar det här kommer den svarta rutan fram men sen försvinner den. Hur gör jag för att den ska stanna kvar?
Sen måste jag ju ha in några parametrar (tror jag det heter) i "float-satserna", men hur vet jag vad jag ska skriva där när jag inte vet hur många tal användaren matar in?

Har aldrig programmerat med vektorer så vet inte riktigt hur jag ska skriva då? Har läst på om det med förstår inte :/

Permalänk
Medlem
Skrivet av Morticana:

@LemonIllusion:
Förslag på pseudokod:

Skriv ut texten ”Ange ett antal tal, avsluta med 0”:
När användaren avslutar med 0, läs in talen.
Beräkna summa.
Beräkna medelvärde.
Sortera talen i storleksordning.
Skriv ut texten ”Summa = , Medelvärde =, Största talet =, Näst största talet =”.

Känns som det är för enkelt? Och vet ändå inte hur jag går vidare med källkoden...

Ser bra ut, men du kan göra det mer detaljerat. Vet inte hur noggranna ni ska vara egentligen men så här kan det se ut:

Med "<-" menar man att ett värde tilldelas (t.ex. a = 1, a tilldelas värdet 1)
- Uppmana användaren att mata in ett tal, avslutas med 0.
- numberArray <- [tal1, tal2, tal3 ... talN, 0] (användaren matar in talen i en lista)
- sum <- tal1 + tal2 + .... talN (summera antalet tal/listan som användaren matade in, N stycken)
- meanValue <- sum/N (dividera med antalet tal, N stycken tal)
- sortedArray <- sortera listan i storleksordning
- maxValue <- ta fram största värdet i sortedArray
- nextMaxValue <- ta fram näst största värdet i sortedArray
- Skriv ut resultatet

Men som sagt så funkar din version också. Bara att fortsätta

Går att göra ännu mer detaljerat med komponenterna (for-loop, if-sats, indexering, utskrift etc). T.ex. att man skriver:

(gå igenom alla tal för summan) sum <- 0 for i <- 0 to N sum <- sum + array[i] end

Det beror som sagt hur detaljerad du vill vara i din pseudokod. Tycker din version funkar också (på en väldigt grundlig nivå). Vilken nivå läser du kursen på?

Edit: Ops glömde att det var i Visual basic

Permalänk

@Alotiat:
Tack för svar!
Det är på gymnasienivå, programmering 1 så första kursen. Med andra ord ganska basic

Försöker köra på med källkoden men vet inte riktigt hur jag ska gå vidare. Har kommit såhär långt:

#include<iostream>
#include <vector>
#include<conio.h>
#include<iomanip>
#include<string>
using namespace std;
float summa;
float medelvärde;
float stor;
float nstor;
int main() {
int tal;
cout << "Ange ett antal tal, avsluta med 0.";
_getch;
return 0;
}

... men vet inte om jag är ute och cyklar helt.

På något sätt behöver jag få in en vektor tror jag , samt parametrar till funktionerna. Något förslag på hur jag kan gå vidare?

Permalänk
Medlem
Skrivet av Morticana:

@Alotiat:
Tack för svar!
Det är på gymnasienivå, programmering 1 så första kursen. Med andra ord ganska basic

Försöker köra på med källkoden men vet inte riktigt hur jag ska gå vidare. Har kommit såhär långt:

#include<iostream>
#include <vector>
#include<conio.h>
#include<iomanip>
#include<string>
using namespace std;
float summa;
float medelvärde;
float stor;
float nstor;
int main() {
int tal;
cout << "Ange ett antal tal, avsluta med 0.";
_getch;
return 0;
}

... men vet inte om jag är ute och cyklar helt.

På något sätt behöver jag få in en vektor tror jag , samt parametrar till funktionerna. Något förslag på hur jag kan gå vidare?

Om kursen inte gått igenom vektorer än är det nog inte tänkt att du ska använda en. Du kan göra detta helt utan att lagra talen, men då måste du omarbeta din metod.

Använd std::cin för att läsa in talen.

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Inaktiv

Tycker också att din pseudokod är lite oklar. Du skulle behöva genomarbeta den till att i princiop vara rader kod, men skriven med ord. När pseudokoden är klar borde du alltså kunna översätta varje rad till kod och programmet fungerar. Börja med det så skall du se att det går enklare.

Man ser tydligt att du har 2 problem i din uppgift
1. Du vet inte hur du ska lösa den exakt <- fixa det först
2. Du kan inte syntaxen på programmeringsspårket utantill <- det kan vi hjälpas åt att snyta fram när du vet exakt vad du vill ha

Du borde också fundera på hur du löser det utan att spara alla talen i en lista

Permalänk
Medlem

Använda aldrig svenska variabelnamn!

Permalänk
Medlem
Skrivet av KaZZoA:

Använda aldrig svenska variabelnamn!

Det är helt ok att använda svenska variabelnamn i en skoluppgift, medan man lär sig eller till och med på en arbetsplats om det stämmer överens med rådande konventioner. Förmodligen har läraren i kursen tänkt på samma sätt.

Visa signatur

Kom-pa-TI-bilitet

Permalänk

@LemonIllusion:

Kursen går igenom vektorer samt funktioner i samma avsnitt som denna uppgiften så jag utgår från att det ska användas.
Om jag förstår det rätt så skulle jag kunna skriva något sånt här:

int tal [10]

och då är det en vektor (lista?) med 10 tal?

men eftersom jag inte vet hur många tal användaren matar in, hur ska jag veta vad man skriver inom hakparentesen?

Sen vet jag inte riktigt var jag ska infoga vektorn samt hur jag tilldelar index.

Har fått in "cin" nu så att svarta rutan inte försvinner

Permalänk

@Alotiat:

Hoppas det är okej att jag lånar lite av din pseudokod. Är tacksam för hjälpen

Permalänk

@anon81912:

Okej, skulle pseudokoden kunna preciseras såhär:

Skriv ut texten ”Ange ett antal tal, avsluta med 0”:
När användaren avslutar med 0, läs in talen.
Användaren matar in talen i en lista.
Beräkna summa genom att summera antalet tal som användaren matade in.
Beräkna medelvärde genom att dividera summan med antalet tal.
Sortera talen i storleksordning.
Ta fram största värdet av talen.
Ta fram näst största värdet av talen.
Skriv ut texten ”Summa = , Medelvärde =, Största talet =, Näst största talet =”.
Skriv ut resultatet.

Eller är det fortfarande för enkelt?

Det jag vill med uppgiften är att göra ett programmet som består av funktioner. Jag vill ha med en vektor där alla talen matas in. Vet dock inte hur jag ska göra med vektorn.

Har kommit såhär långt i min källkod, tips för fortsättning?
Antar att vektorn ska in någonstans i början? :S

#include<iostream>
#include <vector>
#include<conio.h>
#include<iomanip>
#include<string>
using namespace std;
float summa;
float medelvärde;
float stor;
float nstor;
int main() {
int tal;
cout << "Ange ett antal tal, avsluta med 0:";
cout << endl;
cin >> tal;
_getch;
return 0;
}

Permalänk

@KaZZoA:

Läraren gör det i sina exempel så jag gör det också. Men det ser kanske proffsigare ut med engelska namn

Permalänk
Permalänk
Inaktiv
Skrivet av Morticana:

@Killbom:

Okej, skulle pseudokoden kunna preciseras såhär:

Skriv ut texten ”Ange ett antal tal, avsluta med 0”:
När användaren avslutar med 0, läs in talen.
Användaren matar in talen i en lista.
Beräkna summa genom att summera antalet tal som användaren matade in.
Beräkna medelvärde genom att dividera summan med antalet tal.
Sortera talen i storleksordning.
Ta fram största värdet av talen.
Ta fram näst största värdet av talen.
Skriv ut texten ”Summa = , Medelvärde =, Största talet =, Näst största talet =”.
Skriv ut resultatet.

Eller är det fortfarande för enkelt?

Ja, du har undvikit att tänka på / förklara samtliga svåra moment.

Hur vet du om användaren avslutar med 0?
Hur läser du in talen?
Borde du inte läsa in talet innan du kollar om det är 0?
Hur matar du in dem i en lista?
Hur vet du hur många tal användaren matade in?
Hur tar du fram det största talet?
Hur tar du fram det nästa största talet?

Varför är du fortfarande så himla sugen på att ha en lista? Det är enklare utan...

Permalänk

@anon81912:

Okej

Jag har nog hakat upp mig på att det ska vara en lista eftersom uppgiften kräver att den ska bygga på ett antal funktioner med parametrar... Men hur ska jag tänka om jag inte ska ha lista då? Kan du hjälpa mig?

Anledningen till att jag undvikit är nog för att jag inte riktigt vet hur jag ska göra.. Okej, svar på dina frågor..

Hur vet du om användaren avslutar med 0?
Eftersom jag uppmanar användaren att avsluta med 0, kan jag inte då förvänta mig att han/hon gör det?

Hur läser du in talen?
Genom cin?

Borde du inte läsa in talet innan du kollar om det är 0?

Hur matar du in dem i en lista?
Det är här jag ville ha en vektor med ett index(?) men om det går utan lista, men ändå använda ett antal funktioner som kanske det är lättare.

Hur vet du hur många tal användaren matade in?
Det vet jag inte, det beror på användaren... Kan man kalla talen x eller nåt kanske?

Hur tar du fram det största talet?
Genom att sortera listan i storleksordning, därefter borde programmet kunna ta fram högsta talet, hur vet jag inte...

Hur tar du fram det nästa största talet?
Vet ej...

Är nybörjare inom det här...

Permalänk
Inaktiv

@Morticana
Det är ju lite klurigt att göra allt över forum, men jag kan påbörja uppgiften åt dig, så ska vi se om du kanske kan fortsätta

//skapa variabler largest = 0 secondLargest = 0 ammountOfNumbers = 0 sum = 0 number = 0 läs in data i number loop medan number inte är 0 lägg till number i sum öka ammountOfnumber med 1 kolla om number är större än largest ... ... läs in data in number slut loop skriv ut sum dela sum med ammountOfNumbers //medelvärde .... //programmet avslutas

Permalänk

@anon81912:

Jo jag förstår.. Men tackar för all hjälp jag kan få!

Jag skulle ljuga om jag sa att jag förstår allt du skrivit men ska se om jag lyckas lösa och skriva klart pseudokoden. Tar gärna emot mer hjälp sedan

Återkommer om ett tag när jag klurat på pseudokoden lite mer Tack!!

Permalänk

@anon81912:

Har fyllt på lite iaf

Skapa variabler. Benämns alla "=0" här bara för att vi inte vet talen?
largest = 0 Blir dessa typ int largest = 0 osv. i källkoden då?
secondLargest = 0
amountOfNumbers = 0
sum = 0
number = 0

Läs in data i number.
Loop medan number inte är 0.
Lägg till number i sum.
Öka amountOfNumber med 1. Det här förstår jag inte. Medelvärde - öka med 1?
Kolla om number är större än largest. Förstår inte det här heller?
Kolla om number är större än secondLargest.

Läs in data i number.
Slut loop.

Skriv ut sum.
Dela sum med amountOfNumber.
Skriv ut amountOfNumber.
Här borde det nog stå något om hur man får fram largest, eller hur?
Skriv ut largest.
Och här borde det stå något om hur man får fram secondLargest?
Skriv ut secondLargest.
Programmet avslutas.

Är jag på rätt väg? Och ytterligare tips på hur jag går vidare?

Permalänk
Skrivet av Morticana:

@Killbom:

Har fyllt på lite iaf

Skapa variabler. Benämns alla "=0" här bara för att vi inte vet talen?
largest = 0 Blir dessa typ int largest = 0 osv. i källkoden då?
secondLargest = 0
amountOfNumbers = 0
sum = 0
number = 0

Läs in data i number.
Loop medan number inte är 0.
Lägg till number i sum.
Öka amountOfNumber med 1. Det här förstår jag inte. Medelvärde - öka med 1?
Kolla om number är större än largest. Förstår inte det här heller?
Kolla om number är större än secondLargest.

Läs in data i number.
Slut loop.

Skriv ut sum.
Dela sum med amountOfNumber.
Skriv ut amountOfNumber.
Här borde det nog stå något om hur man får fram largest, eller hur?
Skriv ut largest.
Och här borde det stå något om hur man får fram secondLargest?
Skriv ut secondLargest.
Programmet avslutas.

Är jag på rätt väg? Och ytterligare tips på hur jag går vidare?

Tror du snöar fast lite mkt i att du måste ha alla inputs innan du kan räkna ut saker.
AmoutOfNumbers är nog tänkt som ett värde i hur många siffror man har matat in hittils (när 0 kommer används de för att räkna ut medelvärde).

Han tycker dessutom du ska spara undan de största värdet samt näst största värdet under tidens gång, i variablerna lergest och secondLargest, hur du bestämmer dom lämnar jag till dig att undersöka.

Permalänk
Inaktiv
Skrivet av fizzyflaskan:

Tror du snöar fast lite mkt i att du måste ha alla inputs innan du kan räkna ut saker.
AmoutOfNumbers är nog tänkt som ett värde i hur många siffror man har matat in hittils (när 0 kommer används de för att räkna ut medelvärde).

Han tycker dessutom du ska spara undan de största värdet samt näst största värdet under tidens gång, i variablerna lergest och secondLargest, hur du bestämmer dom lämnar jag till dig att undersöka.

Japp, det var tanken.

Permalänk

@fizzyflaskan:

Tack för svar!
Okej, jag bör alltså fokusera helt på pseudokoden och släppa källkoden lite så länge? Är det så du menar?
Trodde att de var beroende av varandra och att det var svårt att göra pseudokoden när man inte vet hur det ska stå i källkoden. Med tanke på att pseudokoden väl ska vara källkoden i ord? Men som du säger, är kanske lättare att fokusera på orden först

Okej, då förstår jag vad som menas med amountOfNumber Missförstod att det var medelvärde och inte antal nummer

@anon81912:

Bättre pseudokod nu? Har jag missat något?

Skapa variabler.
largest = 0
secondLargest = 0
amountOfNumbers = 0
sum = 0
average = 0
number = 0

Läs in data i number.
Loop medan number inte är 0.
Lägg till number i sum.
Öka amountOfNumber med 1.
Kolla om number är större än largest.
Kolla om number är större än secondLargest.
Läs in data i number.
Slut loop.

Skriv ut sum.
Dela sum med amountOfNumber.
Skriv ut average.
Sortera fram största talet av number.
Skriv ut largest.
Sortera fram näst största talet av number.
Skriv ut secondLargest.
Programmet avslutas.

Permalänk
Medlem

Du borde fokusera mer på loopen det är det övningen ut på, och använd bara lista om läraren sagt det annars kör utan.

Skickades från m.sweclockers.com

Permalänk

@coopish:

Okej, tack för svar!
Har du något tips på hur jag ska gå vidare för att pseudokoden ska bli okej för att jag ska kunna fortsätta med källkoden?

Permalänk
Medlem

Kör på med koden. Kolla in while eller en do while loop.

Skickades från m.sweclockers.com