• 40 267 online
  • 1 146 808 medlemmar
  • 59 366 211 inlägg
2018-01-12, 16:49
  #2953
Medlem
Citat:
Ursprungligen postat av smellyproof
Tentauppgift:

Behöver inte en hel kod för ovanstående uppgift. Funderar mest på hur man skriva ut bokstäver på detta sätt? Är det så att "char bokstav = 0" motsvar = a osv?


Ja, du kan göra på det sättet, dock får du kolla upp asciitabellen.
http://www.asciitable.com/

A är lika med 65. (För att få gemener istället lägger du bara på +32)
Citera
2018-01-12, 21:14
  #2954
Medlem
Citat:
Ursprungligen postat av smellyproof
Tentauppgift:

Behöver inte en hel kod för ovanstående uppgift. Funderar mest på hur man skriva ut bokstäver på detta sätt? Är det så att "char bokstav = 0" motsvar = a osv?

1) Konstanten 'A' ger dig heltalsvärdet, så även om ASCII och dess utökningar Latin och UNICODE sedan länge är helt dominerande finns det ingen anledning att skriva talet m.h.a. siffror och göra koden beroende av en speciell teckentabell.

2) Och ska man vara korrekt och krånglig, som jag gillar att vara, garanterar inte standarden heller att bokstäverna är i ordning, 'A' + 1 behöver inte nödvändigtvis vara 'B' (bara de decimala siffrorna '0' till '9' är garanterade att vara i ordning).

Både 1 och 2 beror på att det gamla teckensystemet EBDIC fortfarande användes när C skapades, annars kanske ASCII hade varit en del av standarden, vad vet jag, men det är iaf osannolikt att något nytt teckensystem skulle dyka upp i framtiden eftersom det skulle bugga ur väldig mycket redan existerande kod.

Men även om A-Z är i ordning i ASCII, är inte ÅÄÖ det. Så om du vill skriva kod som är lätt att modifiera i framtiden, och få guldstjärna, eller kanske bli utskrattad, skapa en array för att kolla upp bokstaven från en placering 0-25:

Kod:
const char englishAlphabet[] = 'A', 'B', 'C', 'D', 'E' osv;

Hoppas att det var lite hjälp och ursäkta den otrevliga tonen. Jag har en grannfamilj som lyssnar på allt som jag gör och alla telefonsamtal (man märker det eftersom det är den enda gången som de tystnar från sitt interna skrikande på varandra). Jag ska gå över vägen till OKQ8 nu, köpa 25 liter bensin, tända eld på huset och skjuta de som kommer ut, så återkommer jag med ett bättre svar.
__________________
Senast redigerad av .profile 2018-01-12 kl. 21:41.
Citera
2018-01-12, 21:19
  #2955
Medlem
smellyproofs avatar
Citat:
Ursprungligen postat av .profile
1) Konstanten 'A' ger dig heltalsvärdet, så även om ASCII och dess utökningar Latin och UNICODE sedan länge är helt dominerande finns det ingen anledning att skriva talet m.h.a. siffror och göra koden beroende av en speciell teckentabell.

2) Och ska man vara korrekt och krånglig, som jag gillar att vara, garanterar inte standarden heller att bokstäverna är i ordning, 'A' + 1 behöver inte nödvändigtvis vara 'B' (bara de decimala siffrorna '0' till '9' är garanterade att vara i ordning).

Både 1 och 2 beror på att det gamla teckensystemet EBDIC fortfarande användes när C skapades, annars kanske ASCII hade varit en del av standarden, vad vet jag, men det är iaf osannolikt att något nytt teckensystem skulle dyka upp i framtiden eftersom det skulle bugga ur väldig mycket redan existerande kod.

Men även om A-Z är i ordning i ASCII, är inte ÅÄÖ det. Så om du vill skriva kod som är lätt att modifiera i framtiden, och få guldstjärna, eller kanske bli utskrattad, skapa en array för att kolla upp bokstaven från en placering 0-25:

Kod:
const char englishAlphabet[] = 'A', 'B', 'C', 'D', 'E' osv;

Hoppas att det var lite hjälp, jag ska ta och nyktra till nu.
Okej. Så c vet t.ex. att a++ är lika med b?
Citera
2018-01-12, 21:31
  #2956
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av smellyproof
Okej. Så c vet t.ex. att a++ är lika med b?
Ja.

Kod:
for (char c = 'A'; c <= 'Z'; c++)
Citera
2018-01-12, 22:30
  #2957
Medlem
smellyproofs avatar
Citat:
Ursprungligen postat av RostigHink
Ja.

Kod:
for (char c = 'A'; c <= 'Z'; c++)
Perfekt. Vet du något smidigt sätt man skulle kunna koda ny rad efter var 10:e bokstav?
Antar om man vet vilken siffra bokstäverna motsvarar kan man göra:
Kod:
if (c == 75  || c == 85){
printf("\n");}
Citat:
Ursprungligen postat av Gottisborgen
A är lika med 65. (För att få gemener istället lägger du bara på +32)
Så länge jag kommer ihåg detta samband så kan nog ovanstående lösning funka bra.
__________________
Senast redigerad av smellyproof 2018-01-12 kl. 22:41.
Citera
2018-01-13, 00:32
  #2958
Medlem
RostigHinks avatar
Citat:
Ursprungligen postat av smellyproof
Perfekt. Vet du något smidigt sätt man skulle kunna koda ny rad efter var 10:e bokstav?
Antar om man vet vilken siffra bokstäverna motsvarar kan man göra:
Kod:
if (c == 75  || c == 85){
printf("\n");}

Så länge jag kommer ihåg detta samband så kan nog ovanstående lösning funka bra.
Finns många sätt att repetitivt få ut en newline efter ett antal iterationer. En använder modulooperatorn.
Kod:
for (int i = 1, c = 'A'; c <= 'Z'; i++, c++) {
  ...
  if (0 == i % 10) printf("\n");
  else printf(" ");
}
Något i den stilen.
Citera
2018-01-13, 00:33
  #2959
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av smellyproof
Tentauppgift:

Behöver inte en hel kod för ovanstående uppgift. Funderar mest på hur man skriva ut bokstäver på detta sätt? Är det så att "char bokstav = 0" motsvar = a osv?

Citat:
Ursprungligen postat av smellyproof
Perfekt. Vet du något smidigt sätt man skulle kunna koda ny rad efter var 10:e bokstav?
Antar om man vet vilken siffra bokstäverna motsvarar kan man göra:
Kod:
if (c == 75  || c == 85){
printf("\n");}

Så länge jag kommer ihåg detta samband så kan nog ovanstående lösning funka bra.
För varje bokstav kan du låta en räknare ticka upp 1. Sedan kollar du med modulo, %, om det är dags att skriva ut en radbrytning.
Citera
2018-01-14, 20:25
  #2960
Moderator
Neksnors avatar
Citat:
Ursprungligen postat av smellyproof
Uppgift (Rekurision och iteration):
Har du testat att med papper och penna skriva vad som händer?
rek(1) returnerar 1 + rek(2).
Vad returnerar rek(2)?
Citera
2018-01-15, 22:48
  #2961
Moderator
Protons avatar
Påminner eder om https://www.flashback.org/announcement.php?f=205, framförallt stycket "För att skapa ett bättre diskussionsklimat kommer trådar där exempelvis en länk postas till en uppgift och påföljande kommentar "kan någon skriva koden åt mig" kastas när de påträffas, beroende på att det inte blir en speciellt bra diskussion kring detta, dessutom kommer ingen lära sig speciellt mycket av ett sådant förfarande heller."

Se nu till att hålla er till riktlinjerna tack /Mod
Citera