Denne tråd er over 6 måneder gammel
Er du sikker på, at du har noget relevant at tilføje?
Hvorfor er programmering så svært og google?Af Giga Nørd Dety | 03-03-2019 23:33 | 4041 visninger | 34 svar, hop til seneste
er på grundforløb til IT ,
normalt er jeg en haj til at google It problemer, men her er jeg på bag bund
vi skal lave noget så simpelt som den lille gange tabel print out
1 2 3 4
2 4 6 8
3 6 9 12
osv til 10 lang og 10 bred ,
Struggler så hårdt, at nu har jeg bar copy pasted den her 10 gange
for (i = 1; i <= 10; i++)
{
Console.Write("{0} ", i);
}
Console.Write("\n\n");
for (i = 2; i <= 11; i++)
{
Console.Write("{0} ", i);
}
Console.Write("\n\n");
""
for (i = 2; i <= 11; i+++) virker ikke
""
så må jeg finde ud af at få den til at gange :D men
i opgaven står der det kan løses med 2 forløkker men holy moly
og i opgaven står der
""
For (int i = 1; i <= 10; i++)
{
for (int j = 1; j <= 10; j++)
}
"" --
Intel Core i5-2500K, Noctua Nh-D14, MSI Z77A-G45 Gaming, Define S, Samung 850EVO 250gb, GTX970 G.Skill Ripjaws 8Gb 1866
du kører et loop på 10.. og I hver loop tæller du op hvor mange gange "den skal springe" i tabellen.-
psuedo koden er noget lig.
For (int i = 1; i <= 10; i++)
{
var tabel_nummer = 1;
For (int j = 1; j <= 10; j++)
{
var tabel_print = tabel_nummer * j;
Console.Write("{0} ", tabel_print);
}
tabel_nummer = tabel_nummer + 1;
}
----
right? -- Sidst redigeret 03-03-2019 23:41 "normalt er jeg en haj til at google It problemer"
Jeg vil anbefale dig, at blive en haj til at løse tingene istedet for at Google dem.
Skru lidt ned for Google. Det kan nogle gange blive en refleks, så du ikke selv finder på løsningerne. -- Hvis du synes det der er svært... så synes jeg du skal lade være med at få andre til at lave dine lektier.
-- Gæstebruger, opret dit eget login og få din egen signatur. for i = 1:10
x(i,:) = i:i:10*i
end
print x ? -- Hvorfor skriver du I når opgaven specifikt siger du skal skrive J? Er nok en grund. :)
Nu er din kode ikke godt formateret, men hvis du inde i loopet bruger den samme variable så kan du kun komme i problemer med dine loops opfører sig underligt. -- 6700K|Maximus VIII Extreme|32GB RAM
Gainward2080ti-GS|PG279Q
Samsung960 PRO 512GB|Samsung 850 PRO 512GB
Samsung850 EVO 250GB|Corsair AX860i --
Sidst redigeret 04-03-2019 00:14 Star med at løse matematikken, ellers kommer du ikke så langt jo.
Du skal bruge værdien i den første løkke til at regne “cellen” ud.
Så første løkke tæller gange anden løkke tæller. -- #2 - Jeg gætter på du aldrig nogensinde Google dig frem til et spørgsmål så :( , Hvorfor overhovedet google hvor høj er Mount Everest er når du bar kan tage der ned med et Målebånd :(
#3 - Syntes det er svært fordi jeg har sammenlagt haft 6 timers C# Programmering i total , og vi er lige kommet til For Løkker , men gør ikke at spørgsmålet irritere mig , -- Intel Core i5-2500K, Noctua Nh-D14, MSI Z77A-G45 Gaming, Define S, Samung 850EVO 250gb, GTX970 G.Skill Ripjaws 8Gb 1866 #8 Men #2 har jo ret: Læs i stedet i din bog omkring for-løkker og byg så et simpelt eksempel op og leg med det. Hvad betyder forskellige værdier, og hvad gør de, osv. Frem for at rykke direkte til Google og regne med at Google kan give dig svaret på opgaven.
Google er ikke en erstatning for at regne tingene ud selv.
Lad mig give dig et hint:
Du kan bruge den variabel, der bliver brugt i den ene for-løkke i den næste (og næste...).
Eksempel (i pseudokode, du kan selv oversætte til det sprog, du bruger):
for(i=0; i<10; i++){
for(k=0; k<10; k++){
print "%d, ", i+k;
}
print "\n";
}
print "\n";
Prøv at se, hvad det gør... og om du kan skrive det om til det, du har brug for. -- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) --
Sidst redigeret 04-03-2019 08:50 #9 - fik løst det på en grim men kreativ måde
for (int i = 1; i <= 10; i++)
{
Console.Write("\n");
Console.Write("{0} ", i);
Console.Write("{0} ", i+i);
Console.Write("{0} ", i+i+i);
Console.Write("{0} ", i+i+i+i);
Console.Write("{0} ", i+i+i+i+i);
Console.Write("{0} ", i+i+i+i+i+i);
Console.Write("{0} ", i+i+i+i+i+i+i);
Console.Write("{0} ", i+i+i+i+i+i+i+i);
Console.Write("{0} ", i+i+i+i+i+i+i+i+i);
Console.Write("{0} ", i+i+i+i+i+i+i+i+i+i);
}
Console.ReadKey();
}
Er klar til at blive ansat hos Microsoft... xD -- Intel Core i5-2500K, Noctua Nh-D14, MSI Z77A-G45 Gaming, Define S, Samung 850EVO 250gb, GTX970 G.Skill Ripjaws 8Gb 1866 --
Sidst redigeret 04-03-2019 09:11 #10 OMG.
Det er den sygeste øjebæ, jeg nogensinde har set :-o ! -- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) #11 Mange veje til rom.. -- Google is your friend! #10
Lav løsningen med to loops.
Det du har lavet nu, bliver et mareridt at udvide. Det princip kan du lige så godt lære nu. -- https://pastebin.com[...]
int[] tableArray = {1,2,3,4,5,6,7,8,9,10};
foreach (var table in tableArray)
{
foreach (var number in tableArray)
{
var value = number * table;
Console.Write($"{value.ToString("00")} ");
}
Console.WriteLine();
}
Console.ReadKey();
det her er den pæne måde at lave det på -- Sidst redigeret 04-03-2019 10:25 #10 vil du ikke lige udvidde til 16x17 matrix ? :-D
1 point for at huske newline, men ellers #facepalm fra en gammel hjælpelærer
(hint: hvis du bliver bedt om at bruge i og j i for loops har du teknisk set heller ikke løst opgaven trods du har faket outputtet ). -- Det bar dæjligt -- i7 8700k 4,9 ghz
GTX 1080TI
16 gb ram
#12 En genvej er den længste vej mellem to punkter (Charles Issawi).
Det er fint nok at lære sig selv at slamkode - man kommer bare som regel selv til at sidde og rode rundt i lortet senere, fordi alle andre i virksomheden ikke vil røre det med en ildtang. ;-)
Happy coding! -- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) rettelse til mig selv i #14
int array burde selv være skrevet som følger
var tableArray = Enumerable.Range(1, 10);
foreach (var table in tableArray)
{
foreach (var number in tableArray)
{
var value = number * table;
Console.Write($"{value.ToString("00")} ");
}
Console.WriteLine();
}
Console.ReadKey();
At skrive int[] tableArray = {1,2,3,4,5,6,7,8,9,10};
er selvfølgelig den fesne måde -- Sidst redigeret 04-03-2019 10:31 #18 Gemme nummerrækkefølgen i et array i hukommelsen i stedet for at bruge loop variablen...
Den var sgu alligevel nu. Helt sikkert den "pæne" løsning.
99% af programmører, der kommer forbi den løsning skal nok læse den et par gange for overhovedet at fatte, hvad der foregår :-0 -- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) --
Sidst redigeret 04-03-2019 10:45 #19
Til at lave det som op snakker om, ud fra de parameter, så ville jeg da gerne se din tilgang, nu hvor var
tableArray = Enumerable.Range(1, 10);
ikke falder i din smag :)
Og nu vi snakker effektivitet, så jeg er også spændt på at se hvor du vil løfte effiktiviteten til et 10x10 matrix.
-- #20 Tror ikke det er et spørgsmål om effektivitet (vi snakker om at iterere 100 gange...)
Men reusability, hvad nu hvis det det inderste loop skulle tage hver 3 tal i stedet for? skulle starte ved 4? skulle stoppe når det kom over 7? eller den samlede (i*j) kom over 20?
Lige her, er et almindeligt For loop bestemt bedre. -- #20
Lad os tage den fra toppen af:
var tableArray = ....
Ok, så tableArray må være et array af tabeller. Det angiver navnet jo.
var tableArray = Enumerable.Range(1, 10);
Så man slår op, hvad "Enumerable.Range(1,10)" og finder ud af, at funktionen ikke returnerer et multidimensionelt objekt. Det kan man så undre sig over. Hvordan kan man så initialisere et array af tabeller med den funktion?
foreach (var table in tableArray)
{
Ok, tableArray inderholder altså tabeller! Fedt. Så ved vi det! Måske har vi misforstået "Enumerable.Range()" alligevel så.
??foreach (var number in tableArray)
{
Øøøh... tableArray indeholder altså numre? Indeholder det ikke tabeller??
?var value = number * table;
Ok. Så vi multiplicerer et nummer med en tabel... Hvad hulen får man så? Multiplicerer man alle elementer i tabellen med nummeret? Er det en vektor-beregninger det her? Er "*" blevet overloadet et sted, så man kan lave vektorberegninger, eller beregner man mon længden af vektoren?
.... og derfra giver man bare op.
Når man så opdager, at det hele går ud på at fylde rammen op med et langt array af fortløbende numre... så bliver man fanme træt.
Undlad venligst at kalde det der "den pæne løsning" :-D
Jeg ser alt for meget af det her slam til daglig.
Min måde (C i det her tilfælde):
for(i=1; i<11; i++){
for(j=1; j<11; j++){
printf("%d ", i*j);
}
printf("\n");
}
printf("\n");
Hvis man ikke forstår ovenstående, så burde man lave noget andet end at programmere. Hvis man ikke kan udvide eller debugge ovenstående, så har man igen brug for et nyt job. I mit eksempel er der kun akkurat lige præcist det, som er brug for. Det bruger absolut kun den mængde RAM, som er brug for, og CPUen arbejder kun lige akkurat så meget, som der er brug for.
Enhver kan tage ovenstående og ændre konstanterne eller tilføje et eller andet.
Lad os sige, at læreren siger:
"Nu skal matricen i stedet se sådan her ud":
10, 9, 8, 7...
20, 18, 16, 14....
30, 27, 24, 21...
...
Det kan jeg opnå ved at ændre på koden til at være:
for(i=1; i<11; i++){
for(j=10; j>=0; j--){
printf("%d ", i*j);
}
printf("\n");
}
printf("\n");
Prøv lige at gøre det samme nummer med dit array i RAM.... Jeg håber, du kan se, at du bruger RAM, CPU og kodelinjer på at skrive noget, som kun lige akkurat passer til den opgave, du skal løse, og hvis man skal ændre bare en smule, så skal der ændres i ret mange linjer....
Og samtidig skal man holde tungen lige i munden. Du bruger jo en loop-variable til at indeksere ind i et array. Så har du pludlige to ting at holde styr på (hvad er pointeren, og hvad er indholdet af arrayet) frem for kun 1 enkelt ting: loop-variablen.
Det gør det overhovedet ikke nemmere for andre at forstå, eller andre at vedligeholde.
-- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) #22
ahh så du har super ondt i røven over navngavning som udgangspunkt.
Check. -- #23 Prøv nu at tage kritikken til dig i stedet for at blive butthurt/pigesur. Det tjener dig overhovedet ikke at have den indstilling.
Hvis du fortsat mener, at navngivning er irellevant, så er du i den forkerte branche.
Samtlige kodestandarder, jeg har læst (og fulgt) har haft et omfattende kapitel om navngivning. Det er en af de hyppigste kilder til fejl i kode.
Og nej min primære kritik er ikke din navngivning, men hvis du ikke har den på plads, så er det nok dér, du skal starte med at forbedre dig, frem for at forstå problematikken i at bruge RAM unødvendigt, og beregningshastighed kontra loading/paging fra RAM osv. -- Jeg ser ikke indlæg fra gæster. Så gæst: Opret en profil :-) --
Sidst redigeret 04-03-2019 11:29 #23 Nej det er faktisk super vigtigt !
Jeg er fuldstændig enig med det som #24 skriver, og som han også er inde på i #17
kodestander er ekstremt vigtigt, ellers er det et mareridt at arbejde med. -- https://twitter.com[...] - Ned med #lurerSørenPape
https://linuxmint.com[...] - Få dit privatliv tilbage. --
Sidst redigeret 04-03-2019 11:41 @upz du itererer over et array unødvendigt to gange, ikke at man ikke kan, men på det niveau er det super omsonst. Derfor du får ris. -- Gæstebruger, opret dit eget login og få din egen signatur. #10 Du har jo ikke løst opgaven mere rigtigt end hvis du havde 100 console writes?
Du har fået løsningen fortalt adskillige gange, j*i. -- #27 - Tilføre lige det her.
Vedhæftet er øvelse 7 til 10.
Nedenstående er uforpligtende inspiration til øvelserne, øvelserne kan løses på flere forskellige måder!
Hjælp øvelse 7)
En for-løkke A styre hvilken tabel der udskrives
En for-løkke B udskriver den aktuelle tabel
For hver gang A er afviklet en gang afvikles B ti gang -- Intel Core i5-2500K, Noctua Nh-D14, MSI Z77A-G45 Gaming, Define S, Samung 850EVO 250gb, GTX970 G.Skill Ripjaws 8Gb 1866 #23 Navngivning er faktisk ret vigtig hvis andre end dig selv skal vedligeholde koden efterfølgende. Prøv at tænke over det i stedet for at tage det negativt. -- #29 Navngivning er vigtigt hvis du selv skal forstå det bare et halvt år efter... -- Jeg skal nok ikke tale for hoejt her, men kan ikke dy mig.
Under programmering er det vigtige at man har styr paa sine logiske operationer.
Hvorfor er programmering så svært og google?
Og bruger naar man taler om 2 ting. dvs noget some er saa svaert samt det er saa google.
giver ingen mening.
At er et biord som nok er mere passende her.
Hvis du har problemme med at/og forskelen saa stop med at skrive og. Brug I stedet for ordet Samt.
Joke til side.
Jeg har ikke set du naevnte hvilket sprog du skriver I;
forskellige bruger forskelig opsaetning for de samme ting.
men det tyder paa det er loekker code structuer der driller her.
jeg vil give #2 ret at hvis du bare googler dig til den faerdige loesning saa laerer du ikke loesning paa hvad problemet er.
me nsaetter du dig noed og laeser op paa code structuren saa vil du undgaa at have samme problem igen "i morgen"
nu ved jeg ikek o mdet blot er hol forum.
men jeg vil gosaa anbeafler at lave indent saa snart du gaa ned i en underloeekee saa ledes er det nemer at see hvor dybt neede du er i loekkerne.
Loop 99
?{
?Loop 99
? ?{
? ?goer noget 99x99 gange
? ?}
?goer noget 99 gange hver gane de forggie er gjort 99 gange
?}
Goer noget 1 gange efter alt ander er koert
du kan aendre paa hvordan du saetter dine paranterser men det er vigtige at vaere konsekvent
-- Sven Bent - Dr. Diagnostic
www.TechCenter.[...] - Home of Project Mercury hmm ser ud til at hol.dk ikke kan lide tabs de bliver oversat til et spoegsmaalstegn -- Sven Bent - Dr. Diagnostic
www.TechCenter.[...] - Home of Project Mercury #22/24 Tak! Det gjorde ondt at se på den løsning han skrev!
#23 Tag ved lære af hvad han siger, navngivning og dokumentation er alfa og omega hvis du skal arbejde sammen med nogen, eller genbesøge din kode efter noget tid. Der er ingen idé i at skulle læse hele koden igennem for at gennemskue den, når ordentlig navngivning af variable og funktioner, kombineret med brugbare kommentarer kan gøre så meget hurtigere og mere gnidningsfrit. -- Lyd-nørd
Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.
Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.
Opret bruger | Login
|
Du skal være logget ind for at tilmelde dig nyhedsbrev.
Hvilken udbyder har du til internet? 425 personer har stemt - Mit energiselskab (Ewii f.eks) 12%
|