Hailstone Serien i C
Hailstone Serien i C
Hejsan!
Jag vet inte riktigt hur jag ska få "The Hailstone" Serien att skrivas ut som denna text, någon som kan ge mig en vägledning?
Enter a Positive Integer(startvalue) for Hailstone: 35
The Hailstone series is: 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Reglerna för Hailstone är:
1. Den första heltalet i serien måste vara ett positivt tal.
2. Om första siffran är udda, ska det andra siffran i serien var = första / 2.
3. ... Men om första siffran är udda ska den andra siffran var 3x så stort som det första+1.
4. Samma regel gäller mellan andra och tredje siffran, dvs. om andra siffran är jämn så är 3:e siffran = 2:a/2, men om andra siffran är udda så är det tredje 3 ggr det 2:a+1
5. Dessa regler repeteras till siffran '1' visas.
Min Källkod:
#include <stdio.h>
int main()
{
unsigned long int Value;
printf( "Enter a positive integer(startvalue) for Hailstone: \n");
scanf( "%d", &Value);
while (Value != 1)
{
if (Value%2 == 0)
{
Value/= 2;
}
else
{
Value = Value * 3 + 1;
}
}
printf( "The Hailstone series produced is: %d\n", Value);
system("Pause"); //Kan remmas bort!!!
return 0;
}
Jag vet inte riktigt hur jag ska få "The Hailstone" Serien att skrivas ut som denna text, någon som kan ge mig en vägledning?
Enter a Positive Integer(startvalue) for Hailstone: 35
The Hailstone series is: 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Reglerna för Hailstone är:
1. Den första heltalet i serien måste vara ett positivt tal.
2. Om första siffran är udda, ska det andra siffran i serien var = första / 2.
3. ... Men om första siffran är udda ska den andra siffran var 3x så stort som det första+1.
4. Samma regel gäller mellan andra och tredje siffran, dvs. om andra siffran är jämn så är 3:e siffran = 2:a/2, men om andra siffran är udda så är det tredje 3 ggr det 2:a+1
5. Dessa regler repeteras till siffran '1' visas.
Min Källkod:
#include <stdio.h>
int main()
{
unsigned long int Value;
printf( "Enter a positive integer(startvalue) for Hailstone: \n");
scanf( "%d", &Value);
while (Value != 1)
{
if (Value%2 == 0)
{
Value/= 2;
}
else
{
Value = Value * 3 + 1;
}
}
printf( "The Hailstone series produced is: %d\n", Value);
system("Pause"); //Kan remmas bort!!!
return 0;
}
SV: Hailstone Serien i C
outputen buffras så om du vill att den ska skrivas ut i varje steg så måste du antingen skriva ut en ny rad, eller flusha stdout med fflush(stdout);
Kod: Markera allt
#include <stdio.h>
int main()
{
unsigned long int Value;
printf( "Enter a positive integer(startvalue) for Hailstone:");
fflush(stdout);
scanf( "%d", &Value);
printf( "The Hailstone series produced is: %d", Value);
while (Value != 1)
{
if (Value%2 == 0)
{
Value/= 2;
}
else
{
Value = Value * 3 + 1;
}
printf("%d,", Value);
fflush(stdout);
}
printf("\n");
return 0;
}
Senast redigerad av 1 gasol, redigerad totalt 15 gånger.
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
SV: Hailstone Serien i C
Det var inte riktigt rad
för
rad
jag menade, utan snarare att de hänger ihop i ett mening, som detta:
The Hailstone series is: 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Alltså, att han lägger alla utmatningar på samma rad.
Hoppas någon förstår mig bättre nu.
/Joakim
för
rad
jag menade, utan snarare att de hänger ihop i ett mening, som detta:
The Hailstone series is: 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1.
Alltså, att han lägger alla utmatningar på samma rad.
Hoppas någon förstår mig bättre nu.
/Joakim
SV: Hailstone Serien i C
Testade du koden som jag skrev i min förra post?
Den producerar följande resultat:
Enda felet emot vad du vill att den ska skriva ut är väl att det är ett komma tecken efter 1:an istället för en punkt? Eller har jag helt missuppfattat vad du vill göra?
Den producerar följande resultat:
Kod: Markera allt
<arlong-park /home/gasol
> gcc hal.c && ./a.out
Enter a positive integer(startvalue) for Hailstone:35
The Hailstone series produced is: 35106,53,160,80,40,20,10,5,16,8,4,2,1,
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
SV: Hailstone Serien i C
Jag hade i förra posten bara försökt efterlikna, det du hade skrivit.
När jag tog bort min gamla kod och kopierade rakt av, fungerade det.
Tack!
När jag tog bort min gamla kod och kopierade rakt av, fungerade det.
Tack!
SV: Hailstone Serien i C
okey bra det som är lite klurigt är att linux buffrar din output så även om du kör printf("4") så kommer det inte att skrivas ut förens det är tillräckligt mycket i ut buffern eller tills du skriver en ny rad printf("\n"), eller tills du kör fflush(stdout).
The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
- per9000
- Inlägg: 931
- Blev medlem: 07 maj 2007, 11:06
- OS: Ubuntu
- Utgåva: 23.04 Lunar Lobster
- Ort: Västerås
- Kontakt:
SV: Hailstone Serien i C
Är du säker på att den skriver efter varje ny rad? Det låter lite suboptimalt. Är det samma sak om man skriver till fil?gasol skrev: okey bra det som är lite klurigt är att linux buffrar din output så även om du kör printf("4") så kommer det inte att skrivas ut förens det är tillräckligt mycket i ut buffern eller tills du skriver en ny rad printf("\n"), eller tills du kör fflush(stdout).
/Per
SV: Hailstone Serien i C
User space buffering finns i 3 lägen
_IONBF unbuffered
_IOLBF line buffered
_IOFBF fully buffered
_IONBF gör att alla bytes som kommer kommer att skrivas direkt till filen/devicen
_IBLBF är default beteendet för stdout.
_IOFBF är jag inte riktigt säker, men jag tror att den innebär att en write endast gör om hela buffern är fylld.
Filer är normalt block buffrade, så att endast en skrivning görs när ett helt block är klart att skrivas.
Angående att stdout är line buffrat så går det liksom inte göra det på något mer optimalt sätt, utan om du vet att du ska skriva sjukt mycket (rader) till stdout så får du ändra till fully buffered och skicka med en egen buffer and sedan fflusha när du vill att output ska skrivas.
kolla setbuf(3) för mer info om du är sugen
_IONBF unbuffered
_IOLBF line buffered
_IOFBF fully buffered
_IONBF gör att alla bytes som kommer kommer att skrivas direkt till filen/devicen
_IBLBF är default beteendet för stdout.
_IOFBF är jag inte riktigt säker, men jag tror att den innebär att en write endast gör om hela buffern är fylld.
Filer är normalt block buffrade, så att endast en skrivning görs när ett helt block är klart att skrivas.
Angående att stdout är line buffrat så går det liksom inte göra det på något mer optimalt sätt, utan om du vet att du ska skriva sjukt mycket (rader) till stdout så får du ändra till fully buffered och skicka med en egen buffer and sedan fflusha när du vill att output ska skrivas.
kolla setbuf(3) för mer info om du är sugen

The Black Mountain Scorpion Hoedown Bluegrass Experience Gang
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.
From Left to Right: Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle, Wizard on Bicycle.