2013-10-07, 21:02
  #1
Medlem
FyriFisens avatar
Tjena Flashbackare.

Nu är det såhär att jag precis börjat läsa c++ (som hobby) och jag tänke börja göra någonting enkelt så vad jag vill skapa är ett enkelt litet program som räknar ut vilket nästa tal i det binära talystemet är (1 2 4 8 16 32...) men jag fastnade lika snart på ett problem.

När den räknat till 1152921504606846976 så stannar den eftersom min kod säger åt while loopen att sluta loopa när talet är större än eller lika stort som 9999999999999999999.
så min fråga lyder: finns det något enkelt sätt att t.ex. bestämma hur många gånger den skall loopa? eller kanske räkna talet i all oändlighet?
jag har lekt runt med alla värden men kan icke få de att funka.

OBS: ha tålamod och tänk på att jag är helt färsk inom detta ämne.

tack på förhand!

Kod:
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int main(){
    system("COLOR A"); //Jag vet att det är lite p12igt men jag är ett stort fan av matrix så släpp det nu!
        cout << "Binara talsystemet." << endl << endl;

    long long int x = 1; // anledningen till "long long int" är för att jag skall kunne få ut alla tal i klartext istället för typ 1.453452e+12
        while(x <= 9999999999999999999999999){ //det var de högsta talet jag kunde få hehe men antar att det finns betydligt enklare sätt att bestämma detta på ^^
            cout << "Binary:   " << x << endl;
                x  = x*2;

        }
system("pause");
return 0;
}
Citera
2013-10-07, 21:24
  #2
Medlem
pponmms avatar
Antingen kan du använda en for-loop för att få något att hända ett visst antal gånger:
Kod:
for( int i = 0; i < 5; i++ )
{
	// gör detta 5 gånger
}

Eller så kan du göra en oändlig loop på detta sätt:
Kod:
while( true )
{
	// upprepa i all oändlighet (eller tills man använder nyckelordet break
}

Lycka till! Och fråga gärna om du behöver hjälp med något annat eller om jag var för otydlig!
Citera
2013-10-07, 21:54
  #3
Medlem
FyriFisens avatar
Citat:
Ursprungligen postat av pponmm
Antingen kan du använda en for-loop för att få något att hända ett visst antal gånger:
Kod:
for( int i = 0; i < 5; i++ )
{
	// gör detta 5 gånger
}

Eller så kan du göra en oändlig loop på detta sätt:
Kod:
while( true )
{
	// upprepa i all oändlighet (eller tills man använder nyckelordet break
}

Lycka till! Och fråga gärna om du behöver hjälp med något annat eller om jag var för otydlig!
Tack för snabbt svar skall testa det snart. Ha de gött
Citera
2013-10-07, 23:05
  #4
Medlem
FyriFisens avatar
Citat:
Ursprungligen postat av pponmm
Antingen kan du använda en for-loop för att få något att hända ett visst antal gånger:
Kod:
for( int i = 0; i < 5; i++ )
{
	// gör detta 5 gånger
}

Eller så kan du göra en oändlig loop på detta sätt:
Kod:
while( true )
{
	// upprepa i all oändlighet (eller tills man använder nyckelordet break
}

Lycka till! Och fråga gärna om du behöver hjälp med något annat eller om jag var för otydlig!


Kod:
#include <cstdlib>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>


using namespace std;

int main(){

system("COLOR A");

int number = 0;
long long int x = 1;
    cout << "This is a simple binary counter" << endl;
    cout << "Type a number: ";
    cin >> number;



        for( int i = 0; i < number; i++ ){
            cout << "Binary:   " << x << endl;
                x = x*2;
                    Sleep(30);
}





system("pause");
return 0;

}


Jag gjorde lite ändringar, har fortfarande de problemet att jag bara kan räkna 63 st eftersom det blir för långt för "long long int" att skriva ut vet du om det finns någon annan int som kanske kan skriva ut över 20 siffror? ursäkta om det är lite otydligt om du vill kan du gärna testa koden så kommer du märka vad jag menar
Citera
2013-10-07, 23:41
  #5
Medlem
Citat:
Ursprungligen postat av FyriFisen
Jag gjorde lite ändringar, har fortfarande de problemet att jag bara kan räkna 63 st eftersom det blir för långt för "long long int" att skriva ut vet du om det finns någon annan int som kanske kan skriva ut över 20 siffror? ursäkta om det är lite otydligt om du vill kan du gärna testa koden så kommer du märka vad jag menar

Nej, alla inbyggda typer har en fix storlek och därmed en övre gräns för hur mycket de kan lagra. Du måste isf använda fler variabler (array/vector) per tal, alltså dela upp dem, och då måste du skriva egna funktioner/metoder för de operationer du vill göra på denna "datatyp" - vänsterskift (multiplikation med 2) och utskrift i decimalform.

Du får in (minst) 19 decimala siffror i en long long. Du låter en lagra de lägsta (längst till höger), nästa lagra de 19 till vänster till det, osv tills talet tar slut. Multiplikation fungerar exakt som den vanliga uppställningen från skolan, bara att du har basen 19e10 istället för 10. Istället för att räkna med siffror mellan 0 och 9, räknar du med long-longs. Du multiplicerar den lägre long-longen med alla long-longar från det andra talet, osv. Sen adderar du altihop, så du behöver en additionsfunktion också.

Alternativt använder du ett bibliotek där någon redan har gjort jobbet åt dig. Jag vet inte om det finns i C++11's standardbibliotek, eller om man måste ladda hem något separat.
Citera
2013-10-08, 07:54
  #6
Medlem
FyriFisens avatar
Citat:
Ursprungligen postat av alef-noll
Nej, alla inbyggda typer har en fix storlek och därmed en övre gräns för hur mycket de kan lagra. Du måste isf använda fler variabler (array/vector) per tal, alltså dela upp dem, och då måste du skriva egna funktioner/metoder för de operationer du vill göra på denna "datatyp" - vänsterskift (multiplikation med 2) och utskrift i decimalform.

Du får in (minst) 19 decimala siffror i en long long. Du låter en lagra de lägsta (längst till höger), nästa lagra de 19 till vänster till det, osv tills talet tar slut. Multiplikation fungerar exakt som den vanliga uppställningen från skolan, bara att du har basen 19e10 istället för 10. Istället för att räkna med siffror mellan 0 och 9, räknar du med long-longs. Du multiplicerar den lägre long-longen med alla long-longar från det andra talet, osv. Sen adderar du altihop, så du behöver en additionsfunktion också.

Alternativt använder du ett bibliotek där någon redan har gjort jobbet åt dig. Jag vet inte om det finns i C++11's standardbibliotek, eller om man måste ladda hem något separat.

Hmm intressant. Tack för hjälpen jag ska kolla lite närmre på det
Citera
2013-10-27, 12:05
  #7
Medlem
FyriFisens avatar
Kod:
int main(){

system("COLOR F");
system("title Binary");
unsigned long long BinNumber = 0;
unsigned long long x = 1;
unsigned long long n = 0;

    cout << "This is a simple binary counter" << endl;
    cout << "Type a number: ";
    cin >> BinNumber;



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

                system("COLOR A");
    cout << "BINARY:   " << n << endl << x << endl << endl;
                n = n++;
                x = x*2;
                Sleep(10);


}


 system("COLOR F");


  system("pause");
return 0;

}

Det ser ut såhär nu, och jag sitter fast.
Citera
2013-10-27, 12:18
  #8
Medlem
christerys avatar
Citat:
Ursprungligen postat av FyriFisen
Det ser ut såhär nu, och jag sitter fast.

n = n++; var ju lite roligt... den har jag inte sett förut.

Vad är felet? har du problem med oändligt stora tal med dom inbyggda datatyperna så har du redan fått svar.
Citera
2013-11-12, 18:06
  #9
Medlem
Citat:
Ursprungligen postat av FyriFisen

Det ser ut såhär nu, och jag sitter fast.

n++ betyder n = n + 1, inte n + 1.

Skriv inte n = n++ om du vill öka n med ett, skriv bara n++ eller n += 1.
Citera

Skapa ett konto eller logga in för att kommentera

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

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in