Jag har varit frånvarande från skolan i ett antal veckor på grund av en sjukdom, och har då missat mycket av våra programmeringslektioner. Istället för att jag skulle behöva göra om de prov och uppgifter jag har missat gav min lärare mig en uppgift som jag ska lösa tills på fredag. Innan ni slutar läsa, NEJ jag ber er INTE göra mitt skolarbete åt mig, jag vill endast ha några tips och lite hjälp som skulle kunna underlätta uppgiften för mig.
Jag har läst C# nu i en och en halv termin, så jag har grundkunskaper antar jag. Alla tips är välkomna!
[B]Uppgiften[/B]
En gubbe står på X-axeln i ett koordinatsystem och kastar en granat mot ett förbestämt mål som befinner sig någonstans på X-axeln.
För att beräkna var gubben träffar med granaten använder man sig utan en andragradsfunktion (ax^2+bx+c=0), där användaren anger abc-variablerna för att tala om för programmet hur han vill kasta.
Hittills har jag skrivit en pseudokod på hur jag vill att programmet ska fungera:
Placera granaten på koordinat 3 (målområde 2, 3, 4)
Skriv ut ”Granaten har placerats på en koordinat”
Så länge det är miss, loopa nedanstående.
Läs in användarens värden på abc
Beräkna (ax^2+bx+c=0)
Om x = mellan 2 och 4 när y = 0 //Träff på antingen koordinat 2, 3 eller 4 på X-axeln samt 0 på Y-axeln ger träff
Skriv ut ”Träff”
Annars
Skriv ut ”Miss! Försök igen.”
Läs in nya koordinater.
Det jag har problem med nu är hur jag ska börja. Har suttit i flera timmar och bara stirrat in i skärmen, utan att komma på något vettigt.
Har ni några bra tips eller förslag på hur jag enklast skriver den här koden?
Men det du behöver fixa först är en spelplan, eftersom den är 2D behövs en X och en Y.
Dvs du behöver en lista med listor i sig. Antingen om du kör med Arrayer eller generiska listor. Då kan du ha kordinater
GameArea[0][0] = Y = 0, X = 0
GameArea[1][5] = Y = 1, X = 5
Sedan får du arbeta med den med diverse for-loppar eller linq queries :).
Jag ber om ursäkt för att jag postade i fel forum. Jag hittade inget C# forum.
Okej. Kan jag till exempel skapa en vektor med följande (och en likadan för y-axeln):
string [] x = new string [5];
x[0] = "1";
x[1] = "2";
x[2] = "3";
x[3] = "4";
x[4] = "5";
for (int i = 0, i < x.Lenght; i++)
{
Console.WriteLine(x[i]);
}
Har för mig det var såhär man skrev en vektor, kan ha fel någonstans. Men frågan var om man kan skapa en sådan här vektor för x och y, och använda dom som "spelplanen"?
En början fast nu tror jag att jag egentligen hjälpte till för mycket.
public class Game
{
private List<List<String> _gamePlan;
private int _y;
private int _x;
public Game(int x, int y)
{
_x = x;
_y = y;
}
public void StartNewGame()
{
CreateGamePlan();
}
private void CreateGamePlan()
{
_gamePlan = new List<List<string>();
for(int x = _x; x>_x;y--)
{
var xList = new List<string>();
_gamePlan.Add(xList);
for(int y = _y; y>_y;y--)
{
_xList.Add(string.Format("x = {0}, y = {1}", x, y);
}
}
}
}
Om jag ska vara ärlig så förstår jag inte ett smack av den där koden... Har inte hunnit komma så långt i programmeringen än. Jag skrev fel i min post förresten, jag har läst programmering i en halv termin, inte en och en halv termin.
Jag ska sätta mig imorgon och börja skriva de saker jag kan. Kommer posta i tråden om jag fastnar någonstans!
Tack än en gång för att hjälp, det uppskattas verkligen! :)
Det jag inte förstår är hur jag ska kunna få in formeln i min kod.. Hur vet jag vad de olika "x-en" är? Skriver man bara ett enkelt "x", eller hur gör man :q
Det här är vad jag har såhär långt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Skriv in en koordinat mellan 1 och 5.");
string va = Console.ReadLine();
Console.WriteLine("Skriv in en till koordinat mellan 1 och 5.");
string vb = Console.ReadLine();
Console.WriteLine("Skriv in den sista variabeln mellan 1 och 5");
string vc = Console.ReadLine();
Console.Write(va * x ^ 2 + vb * x + vc);
if (x > 2 && x < 4 && y == 0)
{
Console.WriteLine("Träff!");
}
else
{
Console.WriteLine("Miss! Försök igen.");
}
}
}
}
Du får bygga din formel lite, den går inte att stoppa in i C# rakt av. Tror jag i alla fall inte.
Det är ju X du ska räkna ut.
Du måste lösa ut X ur formeln så att den hamnar på en sida av likhetstecknet.
Vågar inte säga med säkerhet men A, B och C står nog inte för koordinater utan kanske vinkel, styrka och startposition på x-axel.
Har du testat att kompilera din kod?
Såg att du läser ut a,b,c till strängarna va,vb,vc som du sedan försöker använda i en mattematisk formel.
Det kommer inte att fungera, du måste först konvertera strängarna till tal innan du kan göra det.
Du får bygga din formel lite, den går inte att stoppa in i C# rakt av. Tror jag i alla fall inte.
Det är ju X du ska räkna ut.
Du måste lösa ut X ur formeln så att den hamnar på en sida av likhetstecknet.
Vågar inte säga med säkerhet men A, B och C står nog inte för koordinater utan kanske vinkel, styrka och startposition på x-axel.
Har du testat att kompilera din kod?
Såg att du läser ut a,b,c till strängarna va,vb,vc som du sedan försöker använda i en mattematisk formel.
Det kommer inte att fungera, du måste först konvertera strängarna till tal innan du kan göra det.
Okej. Så om jag använder Convert.ToInt32(eller bör jag använda Convert.ToDouble?) för att konvertera va, vb, och vc, kan jag då stoppa in dom i min formel?
Vad menar du att jag bör kompilera min kod till?
Om jag inte kan stoppa in min formeln i C# rakt av, hur bör jag då göra för att mitt program ska kunna räkna ut var användarens koordinater träffar? Det är precis detta jag har problem med just nu...
Jag har ingen som helst aning om hur jag ska kunna använda min formel i min kod. Har i stort sett inte kommit nånstans nu på två dagar. Behöver verkligen hjälp :(
Jag kan tyvärr inte hjälpa dig med den matematiska biten.
Du kan söka på googel efter hur man löser en andragradsekvation eller testa att fråga din lärare om den biten. Tycker att han borde kunna hjälpa dig med det eftersom uppgiften handlar om programmering och inte om mattematik.
Jag har sökt och sökt, men det jag har hittat har varit på en högre mattenivå än vad jag klarar av att förstå. Jo, jag skulle kunna göra det, enda nackdelen är att jag ligger hemma och inte kan ta mig till skolan och deadline är ikväll 23.59. Tanken var att jag skulle göra det här hemma för att få ett godkänt betyg i Programmering A för att jag har varit borta så mycket.
Är det här gymnasienivå? Det var lääänge sedan jag höll på med andragradsekvationer på detta sättet men jag tror att (ax^2+bx+c=0) bara är ett vanligt sätt att illustrera en andragradsekvation på. Inte just ett kast.
Vad ska du ha för lösning? Räcker det med att veta vart granaten kommer träffa? I sådana fall behöver du inga loopar utan det räcker med en mattematisk formel.
För att få hur långt ett kast blir tror jag man kan använda sig av följande formel:
sträckan = 2 * (utgångshastigheten^2 / 9,82) * sin(vinkel) * cos(vinkeln)
Här har du två okända variablar och läraren ville ha tre. Jag antar att den tredje kanske är vart på x-axeln som personen står. Då blir nog formeln så här:
Nu är det bara att skriva in denna formel i C# och skicka in parametrarna utgångshastighet, vinkel och position (position känns rätt onödig). Svaret är variabeln sträcka.
Det stod specifikt i pappret jag fick med uppgiften på att det ska lösas med hjälp av andragradsfunktionen (ax^2+bx+c=0) där man ska ange abc för att se var granaten träffar. Saken är att vi inte ens har börjat med såna här formler i matten än, så jag vet inte hur man löser den. :l
Mitt tips är att ringa läraren och fråga över formeln. Andragradsekvationer är slutet av matte b (om jag inte minns fel).
Du kan med hjälp av (ax^2+bx+c=0) få fram s = 2*(v0^2/g)*sin(a)*cos(a)
sin(a)*cos(a) = utgångshastigheten
g = 9,82 och detsamma som tyngdkraften (fysik)
Fråga mig inte hur man kommer fram till det. Jag har tyvärr inte tid att sätta mig in det. Jag tycker ändå läraren kan hjälpa dig med matten eller åtminstone godkänna om du omvandlar formeln.
Testa googla parabel eller kaströrelse så kanske du hittar nån mer bra information.
Andragradsekvationer kan lösas enkelt med en lösningsformel, tex. PQ-formeln eller min personliga favorit x=-B±√(B^2-4A*C)/2A . Ser väldigt krångligt ut på en datorskärm, men principen bygger på att du bara matar in dina värden från A,B och C i ekvationen och trycker på enter på miniräknaren.
Grundsättet att skriva en andragradare är ax^2+bx+c=0
Det ger dig följande info till min lilla favoritformel:
A = kommer för dig vara det tal som står framför ett upphöjt X, tex 2X^4 (2 är värdet du söker)
B = kommer för dig vara det tal som står framför ett X värde som INTE är upphöjt till 2 tex: 4X (4 är värdet du söker)
C = kommer för dig vara det tal som saknar variabel (X alltså) (ett reallt tal) tex: 14, 32 osv.
Det som står under ROTEN AV får aldrig bli negativt, då har du räknat fel/missat parenteserna i miniräknaren.
Lycka till, och fråga gärna om du undrar något över ekvationerna
Anton
Kan tilläggas, en andragradare ger ofta 2 st svar (x=). Detta beror visserligen på hur grafen ser ut, men vi kan förenkla det lite eftersom det inte är matte du vill lära dig här egentligen.
Alltså:
Räkna uppgiften 2 gånger
en gång med X=-B + √
en gång med X=-B - √
Lägg märke till att det är + i första och - i andra
Detta kommer ge dig 2 svar
X1 = ditt svar
och
X2 = ditt svar
258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e