Permalänk
Administrativ avgift

C# tid för ett mattetest

Hej har ett problem då jag inte har en aning om hur jag ska fixa tid från att när man klickar på starta testet till att man rättar testet och hur lång tid det tog ska skrivas ut i en label ex 5.22 sekunder. Bara ett ex uppgiften löd :

Förutom vilka tal som var rätt/fel (gjord med 10 tal osv ) så ska tiden det tog att räkna ut de 10 talen ska visas med 2 decimaler. Tips: Se DateTime, TimeSpan och Math.Round. Man ska trycka ENTER när man är redo att börja testet.
Exempel:
Du hade 10 rätt av 10. Du klarade testet på 15.34 sekunder.

Och jag fattar inte våran lärare alls då hon är typ vikarie och kan inte ens programmeringspråket-.- Sökes hjälp i mina dystra tider. Fattar att jag ska få ex datetime - datetime efter knappen så får jag ett tal emellan men sen resten.... får inte ihop koden för allt så en förvirrad gymnasiestudent söker tips!

Visa signatur

Jonsbo i100| 7950x3D | B650-i | 2x16GB DDR5 CL30@6000 | 2TB m.2 | 4090 TUF | SF600 | Samsung G9 49 OLED | Quest Pro | Noctua fans | Custom loop

Permalänk
Medlem

klistra in koden för hur långt du har kommit så kan vi hjälpa dig. Du lär dig inget någon här skriver ihop hela uppgiften.

Permalänk
Administrativ avgift
Skrivet av Wickit:

klistra in koden för hur långt du har kommit så kan vi hjälpa dig. Du lär dig inget någon här skriver ihop hela uppgiften.

Hela datetime är ju en externa sak så jag tänkte att uppgiften inte behövs För tiden är ju en helt annan funktion men visst här kommer koden direkt copy från min och jag lär mig även bäst av exempeln

Koden

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace markus_räknare
{
public partial class Form1 : Form
{
Random slumptal = new Random();
List<int> tal = new List<int>();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{

int slumpat = slumptal.Next(1, 10);

tal.Add(slumpat);

}
label1.Text = tal[0].ToString();
label2.Text = tal[1].ToString();
label3.Text = tal[2].ToString();
label4.Text = tal[3].ToString();
label5.Text = tal[4].ToString();
label6.Text = tal[5].ToString();
label7.Text = tal[6].ToString();
label8.Text = tal[7].ToString();
label9.Text = tal[8].ToString();
label10.Text = tal[9].ToString();
label11.Text = tal[10].ToString();
label12.Text = tal[11].ToString();
label13.Text = tal[12].ToString();
label14.Text = tal[13].ToString();
label15.Text = tal[14].ToString();
label16.Text = tal[15].ToString();
label17.Text = tal[16].ToString();
label18.Text = tal[17].ToString();
label19.Text = tal[18].ToString();
label20.Text = tal[19].ToString();

}

private void button2_Click(object sender, EventArgs e)
{
int counter = 0;

double answer1 = tal[0] * tal[1];
double answer2 = tal[2] * tal[3];
double answer3 = tal[4] * tal[5];
double answer4 = tal[6] * tal[7];
double answer5 = tal[8] * tal[9];
double answer6 = tal[10] * tal[11];
double answer7 = tal[12] * tal[13];
double answer8 = tal[14] * tal[15];
double answer9 = tal[16] * tal[17];
double answer10 = tal[18] * tal[19];

if (textBox1.Text == Convert.ToString(answer1))
{
label21.Text = "Du svarade rätt";
counter++;
}
else
{
label21.Text = "Svaret är fel.";
}

if (textBox2.Text == Convert.ToString(answer2))
{
label22.Text = "Du svarade rätt";
counter++;
}
else
{
label22.Text = "Svaret är fel.";
}
if (textBox3.Text == Convert.ToString(answer3))
{
label23.Text = "Du svarade rätt";
counter++;
}
else
{
label23.Text = "Svarat är fel.";
}
if (textBox4.Text == Convert.ToString(answer4))
{
label24.Text = "Du svarade rätt";
counter++;
}
else
{
label24.Text = "Svarat är fel.";
}
if (textBox5.Text == Convert.ToString(answer5))
{
label25.Text = "Du svarade rätt";
counter++;
}
else
{
label25.Text = "Svarat är fel.";

}
if (textBox6.Text == Convert.ToString(answer6))
{
label26.Text = "Du svarade rätt";
counter++;
}
else
{
label26.Text = "Svarat är fel.";
}

if (textBox7.Text == Convert.ToString(answer7))
{
label27.Text = "Du svarade rätt";
counter++;
}
else
{
label27.Text = "Svarat är fel.";
}

if (textBox8.Text == Convert.ToString(answer8))
{
label28.Text = "Du svarade rätt";
counter++;
}
else
{
label28.Text = "Svarat är fel.";
}

if (textBox9.Text == Convert.ToString(answer9))
{
label29.Text = "Du svarade rätt";
counter++;
}
else
{
label29.Text = "Svarat är fel.";
}

if (textBox10.Text == Convert.ToString(answer10))
{
label30.Text = "Du svarade rätt";
counter++;
}
else
{
label30.Text = "Svarat är fel.";
}

label31.Text = "Antal rätt: " + counter.ToString() + "/10";
button2.Visible = false;

}
}

}

Dold text

Har inte börjat med datetime för att jag inte fattar hur man ska använda den.

Fixat spoiler-taggen
Visa signatur

Jonsbo i100| 7950x3D | B650-i | 2x16GB DDR5 CL30@6000 | 2TB m.2 | 4090 TUF | SF600 | Samsung G9 49 OLED | Quest Pro | Noctua fans | Custom loop

Permalänk
Medlem

DateTime.Now representerar datumet och tiden just nu.
Det du ska göra är att när man börjar göra testet så skapar du en sån och sparar undan i en instansvariabel. När du sen är klar med testet skapar du en till. Sen kollar du skillnaden mellan dessa två object.

DateTime then = DateTime.Now; Thread.Sleep(500); DateTime now = DateTime.Now; TimeSpan time = now - then; string elapsedTime = time.ToString()

thread.sleep() behöver du inte då den bara symboliserar tiden som det tar och göra klart testet.

ett ytterligare tips är att spara konstanta strängar som konstanter.
tex

private const string CORRECT_ANSWER = "Du svarade rätt"; sen när du ska använda den så skriver du bara label25.Text = CORRECT_ANSWER;

Detta är för att om du tex vill ändra texten som skrivs ut så behöver du nu göra det på 25 olika ställen, använder du konstanter så behövs det bara ändras på 1.

Permalänk
Medlem

Jag skulle nog inte använda datetime utan en Stopwatch, då har man en enkel klocka som man kan starta och stoppa. Måste du använda datetime så kan du skriva DateTime.Now för att få ut vad datum och tid är just nu.

Skickades från m.sweclockers.com

Permalänk
Medlem

Ett tips är att lägga dina tal, labels och answers i vardera listor som du sedan itererar. Blir mer lättläst kod men också bättre kod.

Permalänk
Medlem
Permalänk
Administrativ avgift
Skrivet av Wickit:

DateTime.Now representerar datumet och tiden just nu.
Det du ska göra är att när man börjar göra testet så skapar du en sån och sparar undan i en instansvariabel. När du sen är klar med testet skapar du en till. Sen kollar du skillnaden mellan dessa två object.

DateTime then = DateTime.Now; Thread.Sleep(500); DateTime now = DateTime.Now; TimeSpan time = now - then; string elapsedTime = time.ToString()

thread.sleep() behöver du inte då den bara symboliserar tiden som det tar och göra klart testet.

ett ytterligare tips är att spara konstanta strängar som konstanter.
tex

private const string CORRECT_ANSWER = "Du svarade rätt"; sen när du ska använda den så skriver du bara label25.Text = CORRECT_ANSWER;

Detta är för att om du tex vill ändra texten som skrivs ut så behöver du nu göra det på 25 olika ställen, använder du konstanter så behövs det bara ändras på 1.

Mycket fina tack men dock ska den skrivas ut med 2 decimaler och jag fick som sagt tips om math.round och även Timespan antar att det förstnämna är det som ska användas för att skriva ut dubbla decimaler nu har jag lite väl många decimaler -.- och killar som nämner stopwhatch så ska vi lära oss att använda timespan osv just för att vi har databashantering och i där så kan det vara bra att kunna använda dessa för att få ut datum för post inlägg osv.

Visa signatur

Jonsbo i100| 7950x3D | B650-i | 2x16GB DDR5 CL30@6000 | 2TB m.2 | 4090 TUF | SF600 | Samsung G9 49 OLED | Quest Pro | Noctua fans | Custom loop

Permalänk
Medlem

Vill du utöka sedan så kan du skriva ett mer generiskt test med klasser, arv och interface. Tror det är en lagom svår uppgift.
Ett leksaksexempel i pseudokod kunde se ut enligt följande:

Interface BasicMtest double t1,t2 double result BasicMtest() t1 = Random() t2 = Random() BasicMtest(n1,n2) t1 = n1 t2 = n2 result = calc(n1,n2) bool isOkAnswer(input) return input == result bool toString() return "What is " + probstring() + " ?" class AddTest: BasicMtest calc(n1,n2) return n1+n2 string probstring() return n1+"+"n2 class MulTest: BasicMtest calc(n1,n2) return n1*n2 string probstring() return n1+"*"n2 class DivTest: BasicMtest calc(n1,n2) return n1/n2 string probstring() return n1+"/"n2 class SubTest: BasicMtest calc(n1,n2) return n1-n2 string probstring() return n1+"-"n2 allatest = List<BasicMtest>() for i = 0 to 4 allatest.append(new AddTest()) for i = 0 to 4 allatest.append(new MulTest()) for i = 0 to 4 allatest.append(new SubTest()) for i = 0 to 4 allatest.append(new DivTest()) correct = 0 wrong = 0 for test in allatest print test.toString() user_input = input("result:") if test.isOkAnswer(user_input) correct = correct + 1 else wrong = wrong + 1 if correct == allatest.length() print "Everything correct!" else print "You had: " + correct + " correct answers and: " + wrong + " wrong answers"

Visa signatur

weeeee

Permalänk
Administrativ avgift

Tackar alla för hjälp om alla undra så var det en MVG-uppgift i programmering A och därmed har jag nu MVG i programmering A som slutbetyg! Tackar alla som medverkat o hjälpt mig MvH glad gymnasieelev

Visa signatur

Jonsbo i100| 7950x3D | B650-i | 2x16GB DDR5 CL30@6000 | 2TB m.2 | 4090 TUF | SF600 | Samsung G9 49 OLED | Quest Pro | Noctua fans | Custom loop

Permalänk
Medlem

Får man MVG för det där!?

Jan Björlunds flumskola fick precis ett ansikte....

Permalänk

Programmering på gymnasienivå är ett skämt... Knappt på Universitet det är några riktiga krav på att skriva bra kod. Varierar givetvis med vad och var du går, men många kurser/program har pinsamt låg nivå. Det är först på Uppsattserna som du granskas kritiskt.
Programmering A när jag läste i gymnasiet var hur lätt som helst, men i C-kursen så fick vi sätta oss in i c++ och OpenGL, och då var det lite klurigare.

Permalänk
Medlem
Skrivet av Misspenguin:

Programmering på gymnasienivå är ett skämt... Knappt på Universitet det är några riktiga krav på att skriva bra kod. Varierar givetvis med vad och var du går, men många kurser/program har pinsamt låg nivå. Det är först på Uppsattserna som du granskas kritiskt.
Programmering A när jag läste i gymnasiet var hur lätt som helst, men i C-kursen så fick vi sätta oss in i c++ och OpenGL, och då var det lite klurigare.

Håller helt med. Läst Programmering A, B, C, Övriga (C#, C# med klasser och C++ (lite)) och webbutveckling (html, xhtml, bygga hemsida med PS, CSS) på gymnasienivå samt problemorienterad mjukvaruutveckling på universitet.. konstigt att uppgifterna är så lätta. Fick ca 31 st att göra på en månad, var klar på 2 timmar. Examen på mjukvaruutveckling handlade helt om att kunna med pseudokod beskriva en applikations nödvändiga funktioner och klasser men alldeles för få praktiska program man faktiskt skulle göra där man faktiskt lärde sig något.

Allt du behöver göra på gymnasiet är att vara med på lektionen och göra som tillsagd, alltså i princip: bygg en hello world applikation. Så har du helt plötsligt klarat programmering A.

All kod du behöver:

private DateTime now; private DateTime started; private TimeSpan span; private int count; private int correct; private string corrAnswerQ1 = "2"; public Form1() { InitializeComponent(); count = 10; } private void Form1_Load(object sender, EventArgs e) { started = DateTime.Now; } private void button1_Click(object sender, EventArgs e) { //Fråga: 1+1 = ? if (qBox1.Text == corrAnswerQ1) { correct++; } //där count förekommer för att räkna antalet korrekta svar. now = DateTime.Now; span = now - started; MessageBox.Show(string.Format("Du hade rätt av {0}/{1}.Du klarade testet på {2} sekunder.", correct, count, span.TotalSeconds.ToString("#.##"))); } private void button2_Click(object sender, EventArgs e) { started = DateTime.Now; //starta om testet //någon tänkbar loop för att tömma input här typ som: foreach (Control c in Form1.ActiveForm.Controls) { if (c is TextBox) { ((TextBox)c).Clear(); } } }

Dold text

En klass skulle se ut ungefär såhär (slarvigt gjord)

private DateTime Start; private DateTime Ended; private TimeSpan span; public Test(DateTime start) { this.Start = start; } public void TestEnded() { this.Ended = DateTime.Now; } public string ReturnTestDuration() { return ((span) = Ended - Start).TotalSeconds.ToString("#.##"); }

Användande av klass:

private Test t; private int count; private int correct; private string corrAnswerQ1 = "2"; public Form1() { InitializeComponent(); count = 10; t = new Test(DateTime.Now); } private void button1_Click(object sender, EventArgs e) { t.TestEnded(); MessageBox.Show(string.Format("Du hade rätt på {0}/{1} frågor och det tog {2} sekunder att att slutföra testet.", correct, count, t.ReturnTestDuration())); }

Dold text

Resultat är densamma för både klass och inte klass
Visar en MessageBox med texten (exempelvis): " Du hade 10 rätt av 10. Du klarade testet på 15.34 sekunder. "

Visa signatur

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
Felkod40