Permalänk
Medlem

C++ pseudokod

Hej, håller på med en uppgift då jag ska skriva en pseudokod och jag har läst lite olika trådar här på forumet om andra som frågat om hjälp och så men jag har lite problem med det ändå.

Uppgiften beskrivs: Skriv pseudokod för att beräkna medelvärdet av talen i en vektor bestående av n st. heltal (där n är ett heltal större än 0).

Sedan ska jag även göra ett aktivitetsdiagram för samma problem men det känns som när jag väl klarat skrivit pseudokod så borde jag klara rika ett aktivitetsdiagram.

Det här har jag skrivit hitills

Skriv ut ”Ange åldern på tio personer” Skapa en vektor för tio personer Mata in åldern på tio personer Räkna ut vad medelåldern blir hos de tio personerna Skriv ut ”Medelvärdet hos de tio personerna”

Vill gärna ha tips på hur jag ska försöka tänka eller ändra på sen ifall man ska sedan ska göra ett program på denna pseudokod så kommer jag förmodligen göra en metod för medelvärdet och kan man skriva i pseudokoden på något speciellt sätt när man kallar på något från sin metod eller är det så simpelt som t.ex " anropa funktionen medel". För det kommer ju även i uppgiften efter då jag ska skriva ett program på denna pseudokod jag ska skriva och jag tänker mig att jag kommer ju göra en for-loop och jag tycker att jag borde haft ordet for med någonstans i pseudokoden för att beskriva den men det är sånt jag inte riktigt vet hur jag ska få till.

Blev mycket text nu vet inte ifall någon fattar vad jag menar men om någon snäll själ vill försöka hjälpa så är det mycket uppskattat.

Permalänk
Medlem

Nu har jag inte skrivit mycket pseudokod, men ska det inte vara lite mer kodspecifik? Ungefär såhär tänker jag:

Skriv ut ”Ange åldern på tio personer” v: Skapa en vektor för tio personer for i = 1:n Mata in ålder i vektorn (eller v[i] = ålder) end Function: Räkna ut vad medelåldern blir hos de tio personerna Skriv ut ”Medelvärdet hos de tio personerna”

Edit: Function: borde ha sitt funktionsnamn för den funktion du anropar, t.ex. calculate_mean(v, n) eller något liknande samt vilken variabel du sparar medelvärdet i efter anropet. Dvs spara det som returneras.

Men din version funkar också skulle jag tro

Skrivet av blewz:

Blev mycket text nu vet inte ifall någon fattar vad jag menar men om någon snäll själ vill försöka hjälpa så är det mycket uppskattat.

Ja det blev många rader utan punkt. Läs gärna igenom stycket för där är det nästan 5 rader utan punkt och väldigt många "och". Ett litet tips bara

Permalänk
Medlem
Skrivet av blewz:

Hej, håller på med en uppgift då jag ska skriva en pseudokod och jag har läst lite olika trådar här på forumet om andra som frågat om hjälp och så men jag har lite problem med det ändå.

Uppgiften beskrivs: Skriv pseudokod för att beräkna medelvärdet av talen i en vektor bestående av n st. heltal (där n är ett heltal större än 0).

Sedan ska jag även göra ett aktivitetsdiagram för samma problem men det känns som när jag väl klarat skrivit pseudokod så borde jag klara rika ett aktivitetsdiagram.

Det här har jag skrivit hitills

Skriv ut ”Ange åldern på tio personer” Skapa en vektor för tio personer Mata in åldern på tio personer Räkna ut vad medelåldern blir hos de tio personerna Skriv ut ”Medelvärdet hos de tio personerna”

Vill gärna ha tips på hur jag ska försöka tänka eller ändra på sen ifall man ska sedan ska göra ett program på denna pseudokod så kommer jag förmodligen göra en metod för medelvärdet och kan man skriva i pseudokoden på något speciellt sätt när man kallar på något från sin metod eller är det så simpelt som t.ex " anropa funktionen medel". För det kommer ju även i uppgiften efter då jag ska skriva ett program på denna pseudokod jag ska skriva och jag tänker mig att jag kommer ju göra en for-loop och jag tycker att jag borde haft ordet for med någonstans i pseudokoden för att beskriva den men det är sånt jag inte riktigt vet hur jag ska få till.

Blev mycket text nu vet inte ifall någon fattar vad jag menar men om någon snäll själ vill försöka hjälpa så är det mycket uppskattat.

I min värld så är det där snarare en övergripande beskrivning av funktionen hos ett tänkt program än någon form av pseudokod. Det är på så väldigt hög nivå att det inte egentligen beskriver hur någon intressant del av lösningen ser ut.
Exempel: "Räkna ut vad medelåldern blir hos de tio personerna" är ju inte en egen operation som finns i något programmeringsspråk någonsin. Det borde vara en divisionsoperation med några tidigare namngivna variabler.

Poängen med pseudokod är att kunna beskriva eller diskutera kod men slippa oroa sig över den exakta syntaxen så länge det framgår tydligt vad som avses.
Den borde helt enkelt i stora drag ha motsvarande struktur och operationer som faktisk kod skulle få, men behöver inte vara uttryckt på ett sätt som accepteras av c++-kompilatorn (om det nu är c++ du skulle skriva programmet i sedan), så länge läsaren förstår vad som avses.

Dessutom är jag lite förvirrad angående målet, uppgiftsbeskrivningen handlar bara om att räkna ut medelvärdet för ett antal tal i en vektor. Din pseudokod blandar in personer och åldrar och gör en massa annat, tar inmatning, skriver ut saker hit och dit och har dessutom ett steg som egentligen bara är en omformulering av hela uppgiftsbeskrivningen utan att göra den mer till kod alls, snarare mindre ("Räkna ut vad medelåldern blir hos de tio personerna").

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

@Alotiat: Ja det känns lite som min pseudokod skulle behöva vara lite mer kodspecifik. Men som sagt jag är nybörjare och har aldrig skrivit någon egen pseudokod. Men som du skrev som exempel så ser din bättre ut, tycker jag själv när man läser den.
Tack för tipset om punkter också blev lite väl långa meningar.

@evil penguin: Jag känner nog att det kanske blev lite fel när jag börja tänka att man skulle ändra till räkna ut medelåldern då det inte hade något egentligen med själva uppgiften att göra. Tänkte att man skulle kunnat ändra den lite så det inte blir exakt lika som uppgiften.
Men kanske gör det svårare för mig själv när jag tänker så.
Det var lite därför jag skrev för jag vill ha tips och synpunkter då jag ej vet exakt vad jag håller på med när det kommer till pseudokod. Men jag väl ändra och försöka skriva det på ett bättre sätt så skriver jag in den här när jag väl fått till en del.

Tack för snabba svar @Alotiat och @evil penguin

Permalänk
Medlem
Skrivet av blewz:

@Alotiat: Ja det känns lite som min pseudokod skulle behöva vara lite mer kodspecifik. Men som sagt jag är nybörjare och har aldrig skrivit någon egen pseudokod. Men som du skrev som exempel så ser din bättre ut, tycker jag själv när man läser den.
Tack för tipset om punkter också blev lite väl långa meningar.

@evil penguin: Jag känner nog att det kanske blev lite fel när jag börja tänka att man skulle ändra till räkna ut medelåldern då det inte hade något egentligen med själva uppgiften att göra. Tänkte att man skulle kunnat ändra den lite så det inte blir exakt lika som uppgiften.
Men kanske gör det svårare för mig själv när jag tänker så.
Det var lite därför jag skrev för jag vill ha tips och synpunkter då jag ej vet exakt vad jag håller på med när det kommer till pseudokod. Men jag väl ändra och försöka skriva det på ett bättre sätt så skriver jag in den här när jag väl fått till en del.

Tack för snabba svar @Alotiat och @evil penguin

Om du kan skriva lösningen i c++ och klipper ut de kodraderna som faktiskt har med själva frågan att göra så tycker jag att detta borde kunna accepteras rakt av, alternativt vara en alldeles utmärkt grund.
Att svaret önskas i form av pseudokod säger ju egentligen bara att det ställs lägre krav på exakt hur lösningen är formulerad än om det skulle krävas fungerande c++-kod, det är rimligen inte tänkt att göra uppgiften svårare.

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

Hej, igen nu har jag funderat lite och skrev om hela pseudokoden. Jag tycker att den känns simpel och den borde ju inte vara så svår då det inte är någon jätte beräkning.

vektor har 10 heltal räkna ut summan av de 10 heltal dela summan med antal heltal summan blir medelvärdet

Vill mest höra lite vad ni tycker om den jag vet att det står väl inte direkt så mycket kodspecifikt. Men det kanske är något jag lär mig med tiden att skriva ju mer jag blir van att skriva program också då jag är nybörjare på det hela.

Permalänk
Medlem
Skrivet av blewz:

Hej, igen nu har jag funderat lite och skrev om hela pseudokoden. Jag tycker att den känns simpel och den borde ju inte vara så svår då det inte är någon jätte beräkning.

vektor har 10 heltal räkna ut summan av de 10 heltal dela summan med antal heltal summan blir medelvärdet

Vill mest höra lite vad ni tycker om den jag vet att det står väl inte direkt så mycket kodspecifikt. Men det kanske är något jag lär mig med tiden att skriva ju mer jag blir van att skriva program också då jag är nybörjare på det hela.

Det är lite bättre men jag tycker nog att du skulle vara mer konkret, särskilt om detta är i sammanhanget nybörjarkurs.
Exempelvis, hur går du tillväga för att räkna ut summan av talen?

Jag står nog fast vid att det skulle kunna vara en bra idé att du helt enkelt skrev detta på riktigt i c++ och hade det som utgångspunkt istället, då tvingas du att faktiskt tänka på vad man behöver göra om det känns svårt att sätta fingret på.

Har indenteringen i ditt nya förslag någon mening? Det upplevs rätt godtyckligt.

Varför 10? Det var väl n, inte 10?

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

En till reflektion:
Jag får lite känslan att du är rädd att svaret ska se ut som kod, men detta är isf baserat på en missuppfattning.

Det ska se ut som kod, bara att det inte behöver vara något särskilt språk.

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem

@evil penguin: Jag har gjort som du sa nu och skrivit koden för att räkna ut medelvärdet så nu ska jag bara få till pseudokod.
Det är nog mer att jag känner mig osäker på vart jag ska börja kan ju skriva koden så får du se den också.

#include <iostream> #include <clocale> int main() { setlocale(LC_ALL, "swedish"); int tal[10]; tal[0] = 1; tal[1] = 6; tal[2] = 7; tal[3] = 23; tal[4] = 73; tal[5] = 12; tal[6] = -26; tal[7] = 83; tal[8] = -55; tal[9] = 29; int sum = 0; for (int i = 0; i < 10; i++) { sum = sum + tal[i]; } std::cout << "Medelvärdet av talen är: " << sum / 10; std::cin.get(); return 0; }

Sen är jag väl inte super snabb på att komma på hur jag ska göra saker men hellre får det ta tid och jag kanske lär mig och förstår det än snabbt och inte lär mig något av det.

Permalänk
Medlem
Skrivet av blewz:

@evil penguin: Jag har gjort som du sa nu och skrivit koden för att räkna ut medelvärdet så nu ska jag bara få till pseudokod.
Det är nog mer att jag känner mig osäker på vart jag ska börja kan ju skriva koden så får du se den också.

#include <iostream> #include <clocale> int main() { setlocale(LC_ALL, "swedish"); int tal[10]; tal[0] = 1; tal[1] = 6; tal[2] = 7; tal[3] = 23; tal[4] = 73; tal[5] = 12; tal[6] = -26; tal[7] = 83; tal[8] = -55; tal[9] = 29; int sum = 0; for (int i = 0; i < 10; i++) { sum = sum + tal[i]; } std::cout << "Medelvärdet av talen är: " << sum / 10; std::cin.get(); return 0; }

Sen är jag väl inte super snabb på att komma på hur jag ska göra saker men hellre får det ta tid och jag kanske lär mig och förstår det än snabbt och inte lär mig något av det.

Jag skulle säga att ovanstående, även om det innehåller lite stökigheter som inte är relevanta, är närmare vad jag skulle förvänta mig som svar på frågan.

Dock måste då få bort det här att du hårdkodat 10 på några ställen, det är n som gäller.

Jag skulle säga att om du fixar ^^^ och klipper ut själva essensen (kodraderna som räknar ut medelvärdet), så man slipper se allt som egentligen inte har med frågan att göra, och bara noterar i inledningen att du har en vektor tal med n element, så skulle jag tycka att det såg rimligt ut även om det ju är slående likt c/c++-syntax.

Visa signatur

Desktop spel m.m.: Ryzen 9800X3D || MSI X870 Tomahawk Wifi || MSI Ventus 3x 5080 || Gskill FlareX 6000 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Arbetsstation: Ryzen 7945HX || Minisforum BD790i || Asus Proart 4070 Ti Super || Kingston Fury Impact 5600 65 GB || WD SN850 2TB || Samsung 990 Pro 2TB || Fractal Ridge
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av blewz:

Hej, igen nu har jag funderat lite och skrev om hela pseudokoden. Jag tycker att den känns simpel och den borde ju inte vara så svår då det inte är någon jätte beräkning.

vektor har 10 heltal räkna ut summan av de 10 heltal dela summan med antal heltal summan blir medelvärdet

Vill mest höra lite vad ni tycker om den jag vet att det står väl inte direkt så mycket kodspecifikt. Men det kanske är något jag lär mig med tiden att skriva ju mer jag blir van att skriva program också då jag är nybörjare på det hela.

Du beskriver fortfarande funktionerna på för hög nivå... "Räkna ut summan av de 10 heltalen" är ju en operation som inbegriper att loopa över alla talen och addera de till en annan variabel som innehåller den löpande summan, så i pseudokoden måste du visa att du gör exakt det.

Skillnaden är att när du skriver pseudokod så kan du t.ex. skriva:

for i = 0 to 9 { sum = sum + vector[i] } print "Medelvärdet är: " + sum / 10

eller ännu lite längre från korrekt C-syntax:

for each number in vector { add number to sum } print "Medelvärdet är: " + sum divided by 10

Edit: Har inte läst så noga om de gällde 10 tal eller godtyckligt antal tal, så de två exemplen gör inte exakt samma sak ska sägas.

Visa signatur

"Kom inte hit och trassla till saker med fakta"

Permalänk
Medlem

@evil penguin: Tror jag börjar fatta lite mer nu tack vara jag fått skriva lite med dig. Så det jag kommit fram till nu är detta.

vektor tal [n]; sum = 0; for (int i =0; < n; i++) { sum = sum + tal[i]; } skriv ut medelvärdet << sum / n;

Det där med att jag skulle skriva n fattar jag nu och att man inte behövde vara specifik och skriva 10... Är väl lite trög men det kommer sakta men säkert hoppas jag.

Permalänk
Medlem
Skrivet av blewz:

@evil penguin: Tror jag börjar fatta lite mer nu tack vara jag fått skriva lite med dig. Så det jag kommit fram till nu är detta.

vektor tal [n]; sum = 0; for (int i =0; < n; i++) { sum = sum + tal[i]; } skriv ut medelvärdet << sum / n;

Det där med att jag skulle skriva n fattar jag nu och att man inte behövde vara specifik och skriva 10... Är väl lite trög men det kommer sakta men säkert hoppas jag.

Ja det kommer med tiden. Men som sagt; ha alltid för vana att undvika siffror och bokstäver om du inte vet vad du gör. Det är nästan alltid bättre att köra med variabler. Bra variabelnamn ger så mycket värdefull information för dig och för andra som läser koden. Ett exempel:

int sum = 10 + 4; // Säger inte så mycket mer än att summan blir 14 Jämför: int sum = salary + bonus; // Ger mycket mer information. Talar bland annat om att någonstans i din kod // finns en fastställd lön och bonus, att det handlar om någon form av valuta, att det vissa fall kan leda till formatering etc.

Permalänk
Medlem

det här är inte C++ men

float medel(int ... vec){ long temp = 0; int len = vec.length; for(int i=0; i<len; i++){ temp+=vec[i]; } return temp/float(len); }

Visa signatur

mobo Asus M4A88TD-M EVO/USB3 cpu 1100T kylare Noctua NH-D14
gpu RX 460 passive ram 16GB DDR3 1600MHz ssd Samsung 850 EVO 250GB
psu Corsair AX 850 skärmar 3 * 40" NEC P401

Permalänk
Medlem

@Alotiat: Tack för tipset. Det ska jag lägga på minne också.