webForumDet fria alternativet

C# hjälp sökes!

.NET

17 svar · 2 650 visningar · startad av epod

Medlem sedan apr. 20108 inlägg
Frågan#1

Hejsan!

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?

Alla svar är uppskattade!

MVH

Medlem sedan aug. 20003 575 inlägg
#2

Detta är C/C++ forumet.

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 :).

Medlem sedan apr. 20108 inlägg
#3

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"?

Medlem sedan juni 200032 967 inlägg
#4

Spontant ser jag två fel i din for-slinga: kommatecknet efter 0 bör nog vara ett semikolon, och det heter length.

Flyttas från C/C++ till .NET-forumet.

Mvh

Medlem sedan aug. 20003 575 inlägg
#5

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);
                }
           }
      }
}
Medlem sedan apr. 20108 inlägg
#6

Tack för svaren!

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! :)

Medlem sedan apr. 20108 inlägg
#7

Okej, jag har börjat skriva lite.

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.");
            }

        }
    }
}
Medlem sedan juni 20031 837 inlägg
#8

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.

Medlem sedan apr. 20108 inlägg
#9

The_Hulk skrev:

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...

Medlem sedan aug. 20003 575 inlägg
#10

Som du säger behöver du konvertera dom det går inte att räkna med strängar eftersom det lika gärna kan vara text,

Medlem sedan apr. 20108 inlägg
#11

Det här går inte fort frammåt :OO

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 :(

Medlem sedan juni 20031 837 inlägg
#12

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.

Medlem sedan apr. 20108 inlägg
#13

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.

Medlem sedan juli 20041 183 inlägg
#14

Ä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:

sträckan = 2 * (utgångshastigheten^2 / 9,82) * sin(vinkel) * cos(vinkeln) + xposition

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.

Medlem sedan apr. 20108 inlägg
#15

Japp, det är Programmering A åk 1 på gymnasiet.

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

Medlem sedan juli 20041 183 inlägg
#16

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.

Medlem sedan mars 200584 inlägg
#17

Hej!

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

Medlem sedan mars 200584 inlägg
#18

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
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)