Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse

Holder på med boken Deitel Deitel, C++ How to program.

Holder på en oppgave der eg skal skrive inn to nummer. Resultatet skal vise forskjellen mellm de to tallene.

 

Løser den slik " difference = integer1 - integer2 "

Men når integer1 < integer2 ender egg opp med - forteikn.

Prøvde å løyse det med ei IF setning, men fekk det ikkje til.

Er det kanskje en annen måte å skrive det på slik at programmet ikkje viser fortegn?

Lenke til kommentar
Holder på med boken Deitel Deitel, C++ How to program.

Holder på en oppgave der eg skal skrive inn to nummer. Resultatet skal vise forskjellen mellm de to tallene.

 

Løser den slik  " difference = integer1 - integer2 "

Men når integer1 < integer2 ender egg opp med - forteikn.

Prøvde å løyse det med ei IF setning, men fekk det ikkje til.

Er det kanskje en annen måte å skrive det på slik at programmet ikkje viser fortegn?

8541502[/snapback]

 

noe ala dette?

 

int main()
{
int Tall1 = 45;
int Tall2 = 15;

int Delta;
if(Tall1 < Tall2)
 Delta = Tall2 - Tall1;
else
 Delta = Tall1 - Tall2;

return 0;
}

Lenke til kommentar

Jepp, det er det. Det finnes en funksjon kalt abs() som returnerer absoluttverdien til et tall.

 

Eksempelkode:

 

#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
int x1, x2;

cout << "Skriv inn tall nummer 1: ";
cin >> x1;
cout << "Skriv inn tall nummer 2: ";
cin >> x2;

cout << "Forskjellen mellom tallene er " << abs(x1-x2) << "." << endl;

return 0;
}

Lenke til kommentar
Ny oppgave. Skal få brukeren til å skrive inn 5 tall. Programmet skal printe dei 5 tallene med mellomrom mellom kvart tall. Skal bruke "integer division and modulus operators".

Noen som har et lite hint?

8552965[/snapback]

Er dette det som kalles outsourcing? :!:

Lenke til kommentar

Skjønte ikke helt hvorfor jeg skulle bruke modulus.

Men jeg skrev den slik

 

cout << "Enter five numbers: ";

    cin  >> integer1 >> integer2 >> integer3 >> integer4 >> integer5;

   

    if ( integer1 % 2 == 0 )

    cout << integer1;

    else

    cout << integer1;

   

    if ( integer2 % 2 == 0 )

    cout << "  " << integer2;

    else

    cout << "  " << integer2;

   

    if ( integer3 % 2 == 0 )

    cout << "  " << integer3;

    else

    cout << "  " << integer3;

   

    if ( integer4 % 2 == 0 )

    cout << "  " << integer4;

    else

    cout << "  " << integer4;

   

    if ( integer5 % 2 == 0 )

    cout << "  " << integer5;

    else

    cout << "  " << integer5 << endl;

Lenke til kommentar

Problem med sentinel-controlled repetition:

Skal skrive et program som lar brukeren sjå hvor mye bensin han bruker per miles i gallons.

 

Problemet er at sentinel verdien ikkje avslutter kalkuleringa slik den skal.

Slik skreiv eg programmet:

 

// a program that calculates how many gallons you use per mile

// by Alf-Henning Drage

 

#include <iostream>

 

using std::cout;

using std::cin;

using std::endl;

using std::fixed;

 

#include <iomanip>        // parameterized stream manipulators

 

using std::setprecision;  // sets numeric output precision

 

int main()      // function main and program execution

{

    int total = 0;              // sum of gallon

    int gallonCounter = 0;      // number of times the user entered miles/gallon

   

    double gallon;              // the gallon value               

    double miles;                // how many miles the user enters

    double milesgallon;          // calculate miles per gallon

    double average;              // average use of gallon of all values entered

   

    // processing phase

   

    cout << "Enter gallons used (-1 to end): ";        // prompt user to enter gallons used

    cin >> gallon;                                    // stores gallon in memory

   

    cout << "Enter miles driven: ";                    // prompt the user to enter driven miles

    cin >> miles;                                      // stores miles in memory

 

    milesgallon = static_cast< double >( miles ) / gallon ;

    cout << "The miles/gallon for this tank was: " << setprecision(6)

        << fixed << milesgallon << endl;

   

    while ( gallon != -1 ) {

          total = total + gallon;                      // add gallon to total

          gallonCounter = gallonCounter + 1;          // increment counter

   

    cout << "Enter gallons used (-1 to end): ";        // prompt user to enter gallons used

    cin >> gallon;                                    // stores gallon in memory

   

    cout << "Enter miles driven: ";                    // prompt the user to enter driven miles

    cin >> miles;                                      // stores miles in memory

 

    milesgallon = static_cast< double >( miles ) / gallon ;

    cout << "The miles/gallon for this tank was: " << setprecision(6)

        << fixed << milesgallon << endl;

}

   

    // termination phase

    // if user enered at least 1 mile or gallon

    if ( gallonCounter != 0 ) {

       

        //calculate average of miles per gallon used

        average = static_cast< double >( total ) / gallonCounter;

       

        // display average with 6 digits of precision

        cout << "The overall miles/gallon was: " << setprecision( 6 )

              << fixed << average << endl;

             

              }  // end if part of if/else

 

    else // if no grades were entered, output appropriate message

      cout << "No grades were entered" << endl;

         

   

    system("pause");              // stops program from shut down when started

   

    return 0;                    // indicate sucessful termination

}  // end function main

Lenke til kommentar
Problem med sentinel-controlled repetition:

Skal skrive et program som lar brukeren sjå hvor mye bensin han bruker per miles i gallons.

 

Problemet er at sentinel verdien ikkje avslutter kalkuleringa slik den skal.

Slik skreiv eg programmet:

 

Klikk for å se/fjerne innholdet nedenfor
// a program that calculates how many gallons you use per mile

// by Alf-Henning Drage

 

#include <iostream>

 

using std::cout;

using std::cin;

using std::endl;

using std::fixed;

 

#include <iomanip>        // parameterized stream manipulators

 

using std::setprecision;  // sets numeric output precision

 

int main()      // function main and program execution

{

    int total = 0;              // sum of gallon

    int gallonCounter = 0;      // number of times the user entered miles/gallon

   

    double gallon;              // the gallon value               

    double miles;                // how many miles the user enters

    double milesgallon;          // calculate miles per gallon

    double average;              // average use of gallon of all values entered

   

    // processing phase

   

    cout << "Enter gallons used (-1 to end): ";        // prompt user to enter gallons used

    cin >> gallon;                                    // stores gallon in memory

   

    cout << "Enter miles driven: ";                    // prompt the user to enter driven miles

    cin >> miles;                                      // stores miles in memory

 

    milesgallon = static_cast< double >( miles ) / gallon ;

    cout << "The miles/gallon for this tank was: " << setprecision(6)

        << fixed << milesgallon << endl;

   

    while ( gallon != -1 ) {

          total = total + gallon;                      // add gallon to total

          gallonCounter = gallonCounter + 1;          // increment counter

   

    cout << "Enter gallons used (-1 to end): ";        // prompt user to enter gallons used

    cin >> gallon;                                    // stores gallon in memory

   

    cout << "Enter miles driven: ";                    // prompt the user to enter driven miles

    cin >> miles;                                      // stores miles in memory

 

    milesgallon = static_cast< double >( miles ) / gallon ;

    cout << "The miles/gallon for this tank was: " << setprecision(6)

        << fixed << milesgallon << endl;

}

   

    // termination phase

    // if user enered at least 1 mile or gallon

    if ( gallonCounter != 0 ) {

       

        //calculate average of miles per gallon used

        average = static_cast< double >( total ) / gallonCounter;

       

        // display average with 6 digits of precision

        cout << "The overall miles/gallon was: " << setprecision( 6 )

              << fixed << average << endl;

             

              }  // end if part of if/else

 

    else // if no grades were entered, output appropriate message

      cout << "No grades were entered" << endl;

         

   

    system("pause");              // stops program from shut down when started

   

    return 0;                    // indicate sucessful termination

}  // end function main

8608270[/snapback]

 

Alt ser ut til å fungere, men jeg vet ikke hvordan det skal fungere :D

Men hvorfor bruker du static_cast på .. vel noe. Jeg finner ingen grunn til å gjøre det.

Lenke til kommentar

Fant etterhvert ut problemet. Tror jeg må lære meg litt tålmodighet til debugging.

Problemet var

 

cout << "Enter gallons used (-1 to end): ";        // prompt user to enter gallons used

    cin >> gallon;                                    // stores gallon in memory

   

    cout << "Enter miles driven: ";                    // prompt the user to enter driven miles

    cin >> miles;                                      // stores miles in memory

 

Når jeg trykte -1 for å avslutte spurte den først "miles driven" før den avslutta

 

Løysninga var å ta "miles driven" inn i while setninga.

 

Static cast må vel vere der for å bruke desimal tall? Eller har jeg misforstått?

 

 

Programmet vart slik etter korreksjon:

 

#include <iostream>

 

using std::cout;

using std::cin;

using std::endl;

using std::fixed;

 

#include <iomanip>

 

using std::setprecision;

 

int main()

{

    int gallonCounter = 0;

    double average;

    double totalGallons;

    double gallons;

    double miles;

    double milesgallon;

    double totalmilesgallons;

   

    cout << "Enter the gallons used (-1 to end): ";

    cin >> gallons;

   

    while ( gallons != -1 ) {

    totalGallons = totalGallons + gallons;

    gallonCounter = gallonCounter + 1;

   

    cout << "How many miles driven on the current tank? ";

    cin >> miles;

   

   

   

    milesgallon = static_cast< double >( miles ) / gallons;

    cout << "The miles/gallon for this tank was " << setprecision(6)

        << fixed << milesgallon << endl;

   

    totalmilesgallons = totalmilesgallons + milesgallon;

   

    cout << "Enter the gallons used (-1 to end): ";

    cin >> gallons;

       

        }        // end function while

   

    if ( gallons == -1 ) {

    average = static_cast< double >( totalmilesgallons ) / gallonCounter;   

    cout << "The overall average miles/gallon was " << setprecision(6)

        <<  fixed << average << endl;

        }

   

   

   

   

    system("pause");

    return 0;

   

}  // end function main

Lenke til kommentar

Hmm. Nytt problem nå.

Programmet virker fint første gang jeg køyrer det.

Andre gangen stopper programmet når den skal regne ut average.

Må starte maskinen på nytt for at programmet skal funke igjen.

 

edit: etter å forandret "totalmilesgallons" til "totalMilesGallons" og "milesgallon til "milesGallon" funker programmet fint.

Skulle denne forandringen ha noe å si på hvordan programmet funker?

Endret av ahdrage
Lenke til kommentar
Static cast må vel vere der for å bruke desimal tall? Eller har jeg misforstått?

8616275[/snapback]

 

Du har nok det ja.

 

In general you use static_cast when you want to convert numeric data types such as enums to ints or ints to floats, and you are certain of the data types involved in the conversion. static_cast conversions are not as safe as dynamic_cast conversions, because static_cast does no run-time type check, while dynamic_cast does.

 

 

Hmm. Nytt problem nå.

Programmet virker fint første gang jeg køyrer det.

Andre gangen stopper programmet når den skal regne ut average.

Må starte maskinen på nytt for at programmet skal funke igjen.

 

edit: etter å forandret "totalmilesgallons" til "totalMilesGallons" og "milesgallon til "milesGallon" funker programmet fint.

Skulle denne forandringen ha noe å si på hvordan programmet funker?

8616388[/snapback]

 

Jeg syntes det er veldig rart at du overhode må restarte maskinen jeg programmet ditt involverer ikke noe som kan lage slike problemer etter det jeg har sett. Navnendring av variablene burde ikke ha noe å si.

Lenke til kommentar
Jeg bruker Visual c++ 2005 Express Edition, men hvor er "compile" knappen?

8617757[/snapback]

 

Du kan trykke F7

eller du kan gå på menyen build, der vil du finne det meste av det du trenger, VS kaller ofte kompilering+linking for build så det er build du er på jakt etter kan jeg tenke meg.

 

Jeg vil lære meg c++ språket for å programmere spill, er Accelerated C++ en god bok for en total nybegynner som så vidt har hørt om programmering?

8617757[/snapback]

 

Det er helt greit og ha som mål og lære seg å lage spill, men du må "desverre" gjennom mye annet før du kan starte å programmere spill og til det syntes jeg og flere andre at Accelerated C++ er en god bok. Når du føler deg god nok kan du skifte fokus over på spill, men hvis du skiftere for fort vil du veldig fort støte på problemer.

 

Lykke til

Lenke til kommentar

Driver med et program som skal bestemmer om en person er over kreditt grensa si.

Her er koda

// this program determines whether a person has exceeded their credit limit or not
// by 

#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::fixed;

#include <iomanip>
using std::setprecision;

int main()
{
   int accountNumber;
   double beginningBalance;
   double totalCharges;
   double totalCredits;
   double creditLimit;
   double newBalance;
   
   cout << "Enter account number (-1 to end): ";
   cin >> accountNumber;
   
   while ( accountNumber != -1 ){
         cout << "Enter beginning balance: ";
         cin >> beginningBalance;
         
         cout << "Enter total charges: ";
         cin >> totalCharges;
         
         cout << "Enter total credits: ";
         cin >> totalCredits;
         
         cout << "Enter credit limit: ";
         cin >> creditLimit;
   
   newBalance = beginningBalance + totalCredits;

   
   if ( newBalance > creditLimit ) { 
      cout << "Account:      " << accountNumber << endl;
      cout << "Credit limit: " << creditLimit << endl;
      cout << "Balance:      " << newBalance << endl;
      cout << "Credit limit exceeded" << endl;
    
    cout << "\nEnter account number (-1 to end) : ";
       cin >> accountNumber;
    
} 
  
   else 
       cout << "\nEnter account number (-1 to end) : ";
       cin >> accountNumber;
        
    
    
}
        

      system("pause");
      return 0; 
      }

 

Problemet mitt er:

      if ( newBalance > creditLimit ) { 
      cout << "Account:      " << accountNumber << endl;
      cout << "Credit limit: " << creditLimit << endl;
      cout << "Balance:      " << newBalance << endl;
      cout << "Credit limit exceeded" << endl;
    
    cout << "\nEnter account number (-1 to end) : ";
       cin >> accountNumber;
    
} 
  
   else 
       cout << "\nEnter account number (-1 to end) : ";
       cin >> accountNumber;

 

Programmet starter slik det skal igjen når personen ikke går over kredittgrensa.

Men når personen går over kredittgrensa får eg berre "Enter account number" også stopper programmet.

Kan tenke meg at problemet er at programmet ikkje går tilbake til while loopen etter at kreditten er overstiget. Men veit ikkje korsen eg skal få programmet tilbake til while loopen. Kan tenke meg noke sånt som "goto", men det skal vel ikkje være nødvendig å bruke?

 

edit: la til blokk rundt else og da funka programmet.

Endret av ahdrage
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...