Just nu i M3-nätverket
Gå till innehåll

C++ Uppgift.


TheSpoon

Rekommendera Poster

Hej.

 

Vi har fått en svår uppgift i Programering A. Jag har frågat min lärare om hjälp med hon kan inte förklara uppgifter särskilt bra:/.

Om någon som kan detta har tid att hjälpa mig eller lösa den åt mig skulle jag vara väldigt väldigt tacksam. :

 

 

Inlämningsuppgift i C++.

 

 

Skriv ett program som läser in startnummer, starttid och måltid för en godtycklig följd av tävlande i en idrottsgren. Startnummer för en tävlande kan vara ett heltal större än noll (0), Start- och måltid anges som tre heltal: timme, minut och sekund.

 

Exempel på utskrift av ledtext och inmatning för en tävlande när programmet körs:

 

Startnummer? 33

Starttid? 17(timmar) 30(minuter) 15(sekunder)

Måltid? 18(timmar) 228minuter) 35(sekunder)

 

Denna utskrift/inmatning ska upprepas så länge som startnumret är större än (inte lika med) noll.

 

Startnummer och sluttid (måltid minus starttid) ska beräknas för den tävlande som för tillfället har den bästa (lägsta) sluttiden (för de så här långt inmatade). Därefter ska inmatning av nästa tävlande upprepas.

Om ett startnummer mindre än ett (1) matas in skall programmet skriva ut segrarens startnummer och sluttid samt det totala antalet tävlande. Sluttiden skall skrivas ut som tre tal, timmar, minuter och sekunder. Exemplet ovan ger sluttiden: 0 tim, 52 min, 20 sek. Därefter skall programmet avslutas.

 

Exempel på komplett programkörning:

 

Startnummer? 33

Starttid ? 17 30 15

Måltid? 18 22 35

 

Startnummer? 14

Starttid? 23 35 00

Måltid? 0 12 24

Startnummer? –1

 

Vinnare är startnr: 14

Tim: 0 Min: 37 Sek: 24

Antal tävlande: 2

 

Notera:

 

Programmet ska på ett korrekt sätt hantera fallet när midnatt passeras mellan starttid och måltid.

 

De tävlande (startnumren) kan matas in i vilken ordning som helst.

Förutsätt att samma startnummer ej kan matas in mer än en gång.

 

Förutsätt att inmatade timmar (0-23), minuter (0-59) och sekunder (0-59) är korrekta.

 

Ingen begränsning finns för antalet tävlande.

 

Arrayer får inte användas.

 

Inmatning görs med tangentbordet och utskrift sker på skärmen.

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Nu har jag ingen aning om hur mycket du redan kan.

 

En början: Skriv den del av programmet som läser in data för de olika tävlande (tills inmatningen ska avslutas) men strunta i att beräkna nåt tills vidare.

 

Länk till kommentar
Dela på andra webbplatser

Har typ kommit så långt, men inte mycket längre. Detta är ett väldigt stort program och jag orkar verkligen inte sitta och göra allt på en dag eftersom jag fortfarande är amatör. Jag uppskattar all hälp jag kan få, så tack så mycket :)

 

Länk till kommentar
Dela på andra webbplatser

Går det du har att kompilera och köra utan problem?

Om inte så klistra in den kod dur har (innanför KOD-taggar) om du vill ha hjälp med att få det korrekt.

 

Länk till kommentar
Dela på andra webbplatser

Vi har en bra början. Det jag helst vill ha hjälp med är ungefär hur programet skall vara uppbyggt, det är ju väldigt mycket grejer som skall ingå.

 

[inlägget ändrat 2008-12-03 01:02:17 av TheSpoon]

[inlägget ändrat 2008-12-03 01:02:34 av TheSpoon]

Länk till kommentar
Dela på andra webbplatser

Ja, koden behöver delas upp i metoder och klasser. Har du funderat på vilka klasser du ska ha? Och vilka metoder som behövs?

 

Länk till kommentar
Dela på andra webbplatser

Klistra in den kod ni har kommit fram till här (använd KOD-taggar) så blir det lättare att hjälpa er på traven. Det finns som alltid många olika sätt att lösa det på.

 

Det kan lätt kännas som en jobbig uppgift därför är det bra att ta den steg för steg. Att översätta problemtexten till ett "recept" som ska följas steg för steg tycker jag är ett bra sätt attt tänka. Här är ett förslag på "recept". Jämför gärna själv med problemtexten.

 

1. Skriv ut fråga.

2. Läs in svar.

3. Beräkna sluttid för de inlästa värdena.

4. Om sluttiden är den hittills bästa, spara undan de inmatade värdena (som en eventuell vinnare).

5. Om startnumret är större än 0, upprepa från steg 1.

6. Skriv ut sparade värdena (från steg 4).

 

En enkel variant behöver varken metoder eller klasser men om man vill går det naturligtvis att använda båda två. Steg 3 kanske skulle göras som en funktion/metod för tydlighetens skull.

 

Men som sagt, klistra in eran lösning hittills här.

 

Länk till kommentar
Dela på andra webbplatser

#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
   long time, timesec, timemin, timehour, startsec, startmin, starthour, finnishsec, finnishmin, finnishhour;
   int antal_tavlande, tavlande_nr;

   cout<<"skriv un hur m\x86nga t\x84vlande som var med i t\x84vlingen"<<endl;
   cin>>antal_tavlande
if (antal_tavlande==1)
        {
                     //tror den här är onödig, men har kvar den så att jag inte glömmer. har en likadan längre ner.
        }    
   cout<<" skriv in vilken tid du startade i HH MM SS "<<endl;
   cin>>starthour>>startmin>>startsec;  /* do-while och antal_tavlande-- 
   tills den blir 1 (eller 0 får se), 
   sen innuti gör jag en if sats som kollar om den förra tävlande hade
    kortare tid än den före, else (continue), sen cout tavlande_nr, - 12 skriv in er HH:MM:SS etc etc
   måste kolla så att det inte är så att vi måste rangordna alla tävlande lr bara ta med 
   vem som vann, annars blir det jobbigt xP */
   cout<<" skriv in vilken tid du gick i m\x86l i HH MM SS "<<endl;
   cin>>finnishhour>>finnishmin>>finnishsec;

if (starthour>23 || startmin>59 || startsec>59 || finnishhour>23 || finnishmin>59 || finnishsec>59)
        {
                  cout<<" du har skrivit fel tid, kan inte vara mer \x84n 59 minuter / sekunder, eller 23 timmar. "<<endl;      
        }
else if (starthour>finnishhour)
        {
                  timehour=23-starthour;
                  timehour=timehour+finnishhour;

                       if (finnishmin<startmin)
                                 {
                                           timemin=59-startmin;
                                 }
                        else
                                 {           
                                            timemin=finnishmin-startmin;
                                 }
                  timehour=timehour*3600;
                  timemin=timemin*60;
                  time=timehour+timemin;

        }
else          
        {
                  timehour=finnishhour-starthour;
                  timemin=finnishmin-startmin;
                  timehour=timehour*3600;
                  timemin=timemin*60;
                  timesec=startsec+finnishsec;
                  time=timehour+timemin+timesec;
        }
if (antal_tavlande==1)
        {
                  cout<<"grattis, tävlande nr*** vann med tiden *** "<<endl;    //fixa så att det står i HH:MM:SS      
        }       


   system("PAUSE");
   return EXIT_SUCCESS;
}

 

 

 

Gör vilka ändringar ni vill. Som sagt programmet är långt ifrån klart. Ska försöka uppdatera er senare hur det går för mig.

 

Länk till kommentar
Dela på andra webbplatser

Det ser väl ut som en bra början! :thumbsup:

 

Som jag fattar uppgiften så är det bara vinnaren som behöver kommas ihåg så det stämmer med vad ni gjort.

 

Loopen runt alltihop saknas ju vilket du också skrivit. Du ska inte fråga efter antalet tävlande utan du ska läsa in startnumret och fortsätta loopen tills man skriver in -1 som startnummer. T ex så här:

 

int startnummer = 0;
while(true)
{
  cout << "Startnummer";
  cin >> startnummer;
  if(startnummer==-1)
     break;
  (fortsätt här)
}
(hit kommer du när man skrivit -1 som startnummer.

 

"if (antal_tavlande==1)" kommer förstås att försvinna, de ersätts av loopen.

 

Ett alternativt sätt att beräkna tiden som nog är lite mer överskådligt: Beräkna hur många sekunder efter midnatt som starten skedde och samma sak med målgången (lägg till 24*60*3600 om målgång är nästa dag). SLuttiden är då enkel att beräkna, bara att dra bort starttiden från sluttiden.

 

Fråga gärna om det är något av det jag skrivit som är oklart!

 

 

[inlägget ändrat 2008-12-04 17:26:47 av lizardKng]

Länk till kommentar
Dela på andra webbplatser

  • 2 veckor senare...

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...