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

Hjälp m. C++, simpelt program


humlan2
 Share

Rekommendera Poster

Jag har nyligen börjat en programmeringskurs i C++ och har problem med en uppgift. 

 

"Skriv ett program som frågar efter antal rader och ritar upp nedanstående figur beroende på det heltal man har matat in. Frågan om antal rader ska upprepas efter utskriften för att ny figur ska kunna ritas upp. Om man anger 0 som antal rader så ska programmet avslutas."

Ex angett tal 4:

*

**

***

****

 

Jag antar att det är bäst att använda en do-while loop som yttre loop och forloop som inre. Ska jag ha forloopen i "do" kodblocket? Samt hur ska jag skriva cout:en korrekt? Har fastnat halvvägs. 

Forloopen borde väl se ut såhär: for(int i=1;i<(value+1) +1;i++) samt inre forloop: for(int j=0;j<i;j++)? 

Borde jag använda if + else m. (value!=0) och bool true/false? 

 

Vore jättesnällt om någon ville fixa en snabb källkod eller förklara hur jag ska "placera" looparna. Tack på förhand :)

Länk till kommentar
Dela på andra webbplatser

Jag har egentligen aldrig använt C++, men du bör kunna använda två for-loopar. En yttre och en inre. Det finns nog en liten fallgrop i dina till och från värden i for-looparna, men det bör bli tydligt när du provar att sätta ihop dem.

 

Jag är osäker på hur cout fungerar, men i mitt testprogram i C# så gjorde jag en Print i den inre for-loopen och en PrintLine i den yttre. Det verkar ha gjort susen.

 

Jag tänker inte ge dig koden jag skrev, poängen är att du ska lösa detta själv, men du har fått en beskrivning på en möjlig lösning och så säger jag till dig som jag säger till de kollegor jag guidat till att börja utveckla. Fokusera på en sak i taget, försök inte göra allt på en gång. Fokusera enbart på loop, när du tycker att den verkar fungera, fokusera på att skriva ut stjärnorna. Då kommer du lösa detta i ett nafs.

  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

Ja det har du helt rätt i! 
Jo jag märkte det ang. forlooparna. Ändrat till detta: 

for (int i = 1; i <(rader+1); i++){

        for (int k = 0; k<i; k++){

 

resultatet blir då såhär: (matat in 5)

*****

 *  

  *   

   *    

    *     

     *   

Försökt hitta den motsvarande koden till C#'s kod "if (int.TryParse(input, out value))" som funkar likt på c++, hittar inget så ska lösa det på något annat sätt. 

Hur såg dina for-loopar ut? Cout är ju C#'s motsvarande console.writeline. 

Löser det nog, är nästan där. :) Tack!

Länk till kommentar
Dela på andra webbplatser

7 timmar sedan, skrev .M:

Jag har egentligen aldrig använt C++, men du bör kunna använda två for-loopar. En yttre och en inre. Det finns nog en liten fallgrop i dina till och från värden i for-looparna, men det bör bli tydligt när du provar att sätta ihop dem.

 

Jag är osäker på hur cout fungerar, men i mitt testprogram i C# så gjorde jag en Print i den inre for-loopen och en PrintLine i den yttre. Det verkar ha gjort susen.

 

Jag tänker inte ge dig koden jag skrev, poängen är att du ska lösa detta själv, men du har fått en beskrivning på en möjlig lösning och så säger jag till dig som jag säger till de kollegor jag guidat till att börja utveckla. Fokusera på en sak i taget, försök inte göra allt på en gång. Fokusera enbart på loop, när du tycker att den verkar fungera, fokusera på att skriva ut stjärnorna. Då kommer du lösa detta i ett nafs.

Ja det har du helt rätt i! 
Jo jag märkte det ang. forlooparna. Ändrat till detta: 

for (int i = 1; i <(rader+1); i++){

        for (int k = 0; k<i; k++){

 

resultatet blir då såhär: (matat in 5)

*****

 *  

  *   

   *    

    *     

     *   

Försökt hitta den motsvarande koden till C#'s kod "if (int.TryParse(input, out value))" som funkar likt på c++, hittar inget så ska lösa det på något annat sätt. 

Hur såg dina for-loopar ut? Cout är ju C#'s motsvarande console.writeline. 

Löser det nog, är nästan där. :) Tack!

Länk till kommentar
Dela på andra webbplatser

Postad (redigerade)
21 minuter sedan, skrev .M:

Du kan förenkla din första for loop, finns ett bättre sätt än rader + 1.

 

Enligt denna frågeställning så kan cin läsa siffror redan. Du behöver inte parsa om dem om jag förstår saken rätt.

https://stackoverflow.com/questions/13421965/using-cin-get-to-get-an-integer

Löste den såhär sen, gjorde om flera ggr men efter en hel del fel gick det bra. Det är bättre att lära sig själv, givetvis. Behövde bara lite mer tålamod.

(Ingen parse behövdes, googlade en del på det) 

 

#include<iostream>

using namespace std;

 

int main()

{

    //deklarationer

    int value;

    string sign = "*";

    do //do-while loop för upprepning

    {

 

    //utskrift

    cout << "Hur många rader? Avsluta med 0: "<< endl;

    cin>>value; //inmatning av värde

    

    //for-loop för rader

    for(int i=0;i<value;i++)

    {

        //for-loop för antal tecken

        for (int j=0; j<=i; j++)

        {

            cout<<sign; //utskrift i ***

        }

        cout<<endl; //radbrytning för figur

    }

}while(value!=0); //upprepar programmet om !=0

 

    return 0;

 

    }

Redigerad av humlan2
  • Gilla 1
Länk till kommentar
Dela på andra webbplatser

 Share



×
×
  • Skapa nytt...