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

Hjälp m. C++, simpelt program

Rekommendera Poster

humlan2

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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
.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.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
humlan2

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!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
humlan2
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!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
humlan2
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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...