Vinnaren i pepparkakshustävlingen!
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
Avstängd
.profiles 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?

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
Moderator
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
Moderator
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
2018-01-25, 16:03
  #2962
Medlem
lazyasss avatar
Har problem med min kod. Jag vill få programmet att lägga ihop värdena från min array till en egen char eller int fil. har försökt i en loop slå ihop dem med += vilket ger mig error.
Ger mig fel koden invalid use of non lvalue array, in evaluation of operator += char, char[30].

Problemet är i det sista stycket i koden.
Kod:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main (){
char deltagare[50][30];
    
    
cout << "programmet skriver ut befintlig lista och beräknar medelåldern."<< endl;
    
ifstream lasa ("elevinfo.txt");
    
    
        
//varnar användaren ifall rätt fil inte kan finnas. 
if (! lasa){cout<< "filen kunde ej finnas" << endl;    
    return 
0;
    }
    
int d;

        
//beräknar antalet deltagare
while (lasa.getline(deltagare[d],30))
    {
d++;}
    
cout<<d<< endl;

        
//skriver ut arrayen.
for(int i=0;i<d;i++){
    
cout<< deltagare[i]<< endl;}    

        
//skriver ut åldrarna och sparar gemensama totalåldern.
char mv =0;
for (
int i=0;i<d;i++){
    ++
i;
    
cout << deltagare[i]<<endl;
    
mv+=deltagare[i];

}
    
cout<< mv;


Citera
2018-01-25, 16:15
  #2963
Medlem
askers avatar
Citat:
Ursprungligen postat av lazyass
Problemet är i det sista stycket i koden.
Problemet är att du deklarerat deltagare som sådant:
Kod:
char deltagare[50][30];
... alltså en array av arrayer, närmare bestämt 50 arrayer av typen char[30].
När du sedan slår upp ett värde med koden
Kod:
mv+=deltagare[i]; 
så försöker du lägga ihop mv (som är en char) med deltagare[i] (vilket blir den char[30] array som ligger på plats i i arrayen deltagare).

Jag vet inte hur uppgiften ser ut i övrigt, men om deltagare bara ska hålla åldrar så behöver den nog endast vara endimensionell.
Citera
2018-01-25, 17:17
  #2964
Medlem
lazyasss avatar
Citat:
Ursprungligen postat av asker
Problemet är att du deklarerat deltagare som sådant:
Kod:
char deltagare[50][30];
... alltså en array av arrayer, närmare bestämt 50 arrayer av typen char[30].
När du sedan slår upp ett värde med koden
Kod:
mv+=deltagare[i]; 
så försöker du lägga ihop mv (som är en char) med deltagare[i] (vilket blir den char[30] array som ligger på plats i i arrayen deltagare).

Jag vet inte hur uppgiften ser ut i övrigt, men om deltagare bara ska hålla åldrar så behöver den nog endast vara endimensionell.

Ok tack det låter vettigt. Ska testa och göra om nu då
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback