Permalänk

Hjälp med loppar! C#

Hej!

Jag behöver hjälp med skapa ett program i C# som i en loop skriver ut hundra tal från 0 till 99 och det skrivs 10 tal på 10 rader. Exempel på programkörning ser du nedan.

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

Permalänk
Medlem

Hur långt har du kommit hittills?

Permalänk

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int sida; Console.Write(" Ange önskad storlek: "); Int32.TryParse(Console.ReadLine(), out sida); Console.WriteLine(); for (int i = 0; i < sida; i++) { for (int star = 0; star < sida; star++) { Console.Write(" *"); /// vill ha siffor här } Console.WriteLine(); int antal; Console.WriteLine("Nu är det avklarade"); Console.ReadKey(); } } } }

Permalänk

Antar att du pluggar grundläggande programmering i C#? Det finns lite olika lösningar på detta, den ena lösningen fulare än den andra. Du skulle kunna infoga en radbrytning efter var tionde utskrift så får du med radbrytningen, men det bästa hade varit att du använde dig av de metoder som står i uppgiften.

Permalänk
Medlem
Skrivet av Eriksonson:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void Main(string[] args) { int sida; Console.Write(" Ange önskad storlek: "); Int32.TryParse(Console.ReadLine(), out sida); Console.WriteLine(); for (int i = 0; i < sida; i++) { for (int star = 0; star < sida; star++) { Console.Write(" *"); /// vill ha siffor här } Console.WriteLine(); int antal; Console.WriteLine("Nu är det avklarade"); Console.ReadKey(); } } } }

För denna uppgiften skulle jag rekommendera att du tar en titt på Modulo operatorn som finns i C#.

Då kan du få fram om ett tal är jämnt delbart med något annat. ex. 10

Visa signatur

| EVGA Z170 FTW | i7 6700k | ASUS RTX 3070 | 16GB DDR4 3200MHz | Cooler Master V850 | Samsung 840 Evo 250GB + 2x WD Black 500GB + Seagate 2TB SSHD + Samsung 970 Evo M.2 500GB |

Permalänk

Ja jag är ny börjare och jag har fastnat där, det finns inget jag kan göra mer

Permalänk
Medlem

using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; namespace Rextester { public class Program { public static void Main(string[] args) { int sida; Console.Write(" Ange önskad storlek: "); Int32.TryParse(Console.ReadLine(), out sida); Console.WriteLine(); int counter = 0; for (int i = 0; i < sida; i++) { if (counter == 10){ Console.WriteLine(); counter = 0; } Console.Write(i + " "); /// vill ha siffor här counter++; } Console.WriteLine(); Console.WriteLine("Nu är det avklarade"); } } }

Basically, jag har lagt en counter som räknar från 0 till 10. Och när countern är 10, så lägger jag printar jag ut en ny rad.
Hoppas att du förstår lösningen!

EDIT:

Detta blir outputten när jag anger 100:

Ange önskad storlek: 100

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
Nu är det avklarade

Permalänk
Medlem

Kan ge dig ett tips på hur du skule kunna göra, men du får klura lite själv också.
Använd en if-sats med else i for-loopen, och modulus 10

Visa signatur

There is always a price to pay for convenient

Permalänk
Medlem

Se här:

https://docs.microsoft.com/en-us/dotnet/csharp/language-refer...

för dig typ: if (i % 10 ) console.writeline();

// LZ

Permalänk
Medlem

Kanske hjälper det om jag pekar ut att talen

0, 1, 2, 3
10, 11, 12, 13
20, 21, 22, 23
30, 31, 32, 33

är lika med talen

0*10 + 0, 0*10 + 1, 0*10 + 2, 0*10 + 3
1*10 + 0, 1*10 + 1, 1*10 + 2, 1*10 + 3
2*10 + 0, 2*10 + 1, 2*10 + 2, 2*10 + 3
3*10 + 0, 3*10 + 1, 3*10 + 2, 3*10 + 3
.

Ser du mönstret? Försök beskriva det med for-loopar. "För varje rad från 0 till n, i den raden för varje kolumn från 0 till m, skriv ...".

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4

Permalänk

C# for loop -andra raden

Hej har precis börjat programmeringskurs. Men fastnar ofta på uppgifterna vi får.

Uppgift:
Skapa ett program som i en loop skriver ut hundra tal från 0 till 99 och det skrivs 10 tal på 10 rader.

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

__________________________________________________________

hittills jag har kommit fram till:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i<11; i++)
{
Console.Write(i + ", ");
}
for(int i=11; i<21; i++)
{
Console.Write(i + ", ");
}
Console.ReadLine();
}
}
}

____________________________________________________

men de blir ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 )

hur ska jag avbryta raden från 11 och börja den från andra raden sådär?
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
11, 12, 13, 14, 15, 16, 17, 18, 19, 20

Tack för hjälpen

Permalänk

C# for loop -andra raden

Hej har precis börjat programmeringskurs. Men fastnar ofta på uppgifterna vi får.

Uppgift:
Skapa ett program som i en loop skriver ut hundra tal från 0 till 99 och det skrivs 10 tal på 10 rader.

0 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99

__________________________________________________________

hittills jag har kommit fram till:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp3
{
class Program
{
static void Main(string[] args)
{
for (int i = 0; i<11; i++)
{
Console.Write(i + ", ");
}
for(int i=11; i<21; i++)
{
Console.Write(i + ", ");
}
Console.ReadLine();
}
}
}

____________________________________________________

men de blir ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 )

hur ska jag avbryta raden från 11 och börja den från andra raden sådär?
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
11, 12, 13, 14, 15, 16, 17, 18, 19, 20

Tack för hjälpen

Permalänk
Medlem

@Eriksonson:

Räcker med en enda for-loop och en if-else med lämpligt villkor, typ modulus eller annat lämpligt.

Principen är: så länge som i är mindre än 100 så kolla om i är jämnt delbart med 10, om inte skriv ut i, annars skriv ut i på ny rad.

Edit: Finns en likadan tråd med samma frågeställning för bara någon dag sdan.

Visa signatur

There is always a price to pay for convenient

Permalänk
99:e percentilen
Skrivet av Eriksonson:

for (int i = 0; i<11; i++) { Console.Write(i + ", "); } for(int i=11; i<21; i++) { Console.Write(i + ", "); }

Ett bra tips är att använda [code]-taggar när du klistrar in kod, så blir den lättare att läsa. Exempel:

[code]
Console.Write("Hello World!");
[/code]

I koden ovan har du lagt två loopar efter varandra, identiska sånär som på start- och slutvärde för i. Du skulle lika gärna ha kunnat skriva så här:

for (int i = 0; i<21; i++) { Console.Write(i + ", "); }

Det finns framförallt ingenting som säger att någon radbrytning ska skrivas ut.

Jag ser också att du håller på att bygga en våt lösning. Det ska du försöka undvika. Målet är att en sats som Console.Write(i + ", "); bara ska förekomma på ett enda ställe i din kod. Observera att en for-loop är en sats (statement) som alla andra och således kan förekomma inuti en annan loop:

for (int i = 0; i < 12; i++) { // ... for (int j = 0; j < 4; j++) { Console.Write("i is " + i + " and j is " + j); } // ... }

Visa signatur

Skrivet med hjälp av Better SweClockers

Permalänk
Medlem

En for loop som går mellan 0 och 99, du ska inte behöva ha flera stycken loopar efter varandra (eller i varandra).

Sedan för att skriva ut en newline (eller tom rad), kolla upp "remainder operator" % (också känd som modulo) som ger dig resten efter division. Med hjälp av den kan du kontrollera om du har skrivit 10 tecken och behöver skriva en radbrytning.

Permalänk
Hedersmedlem

Det finns hundra sätt att göra det här på.

Bara några jag kommer på:

En loop från 1 till 100. Skriv ut ett tal för varje gång genom loopen, och gå ner till nästa rad om talet är delbart med 10. (Tips, använd % för att kolla delbarhet)

En yttre loop med i från 1 till 10, en inre loop med j från 0 till 9, skriv ut 10*i + j i inre loopen, skriv ut en nyrad i yttre loopen (efter den inre loopen).

En yttre loop med i från 0 till 90 (i steg om 10), en inre loop med j från i+1 till i+10.

Sätten är många, kör på det sättet du verkar känna är enklast.

Permalänk
Avstängd

Det är ett ganska enkelt problem och du har gjort det onödigt komplicerat. Det räcker med en väldigt enkel loop, dock råder jag dig att försöka lösa den själv först. Jag har inte testat nedan, men det är som sagt inget komplicerat.

for (int i = 0; i < 100; i++) { if(i%10 == 0) Console.WriteLine(); Console.Write(i + ", "); }

Dold text
Permalänk

Tack för alla, problemet är löst !

tack igen!

Permalänk
Hedersmedlem

@Eriksonson *Trådar sammanfogade i enlighet med §3.3*

Observera att vi inte tillåter flera trådar om samma ämne, det går alldeles utmärkt att fortsätta diskussionen här.

Visa signatur

Danskjävel så krattar som en skrivare...