kun mulla on ongelma erään ohjelman luomisessa.
Pitäisi tehdä ohjelma joka palauttaa kirjoitetun sanan tai lauseen numeroina, jotka vastaavat kännykän numeronäppäinten painamista. Esimerkiksi sana aarre pitäisi kääntyä muotoon 2_2777_77733,
tuo alaviiva siis tarkoittaa sitä odotusaikaa joka menee ennenkuin samaa numeroa voidaan painaa jos halutaan kaksi kirjainta saman näppäimen takaa eikä paineta esim. kännykän > näppäintä. Siis jos joku voisi antaa vinkkejä mistä lähteä liikkeelle muuttujien ynnä muiden kanssa. Koko ohjelmaa ei tietenkään tarvitse kenenkään valmiiksi tehdä, mutta jos edes pieniä apuja. Kiitos.
Pitäisi tehdä ohjelma joka palauttaa kirjoitetun sanan tai lauseen numeroina, jotka vastaavat kännykän numeronäppäinten painamista. Esimerkiksi sana aarre pitäisi kääntyä muotoon 2_2777_77733,
tuo alaviiva siis tarkoittaa sitä odotusaikaa joka menee ennenkuin samaa numeroa voidaan painaa jos halutaan kaksi kirjainta saman näppäimen takaa eikä paineta esim. kännykän > näppäintä. Siis jos joku voisi antaa vinkkejä mistä lähteä liikkeelle muuttujien ynnä muiden kanssa. Koko ohjelmaa ei tietenkään tarvitse kenenkään valmiiksi tehdä, mutta jos edes pieniä apuja. Kiitos.
Vastaukset 3
Vanhimmat
#include
#include
int main(int argc, char *argv[])
{
char jono[40];
char merkki1 = 0;
char merkki2 = 0;
char paikka1 = 0;
char paikka2 = 0;
char nappain = 0;
char painomaara = 0;
char vanhanappain = -1;
char merkit[] = { 'a', 'r', 'e', 0 };
char nappaimet[] = { '2', '7', '3', 0 };
char painomaarat[] = { 1, 3, 2, 0 };
printf("Kirjoita jono: ");
scanf("%s", jono);
printf("Kännykkä muoto: ");
while((merkki1 = jono[paikka1++]) != 0) {
paikka2 = -1;
while((merkki2 = merkit[++paikka2]) != 0)
if (merkki2 == merkki1)
break;
if (merkki2 != 0) {
nappain = nappaimet[paikka2];
painomaara = painomaarat[paikka2];
if (vanhanappain == nappain)
printf("_");
while(painomaara-- > 0)
printf("%c", nappain);
vanhanappain = nappain;
}
}
system("PAUSE");
return 0;
}
...juttu.
Ensinnäkin kiitos jeesaajalle. Sitten vielä olis sellanen ongelma että miten saan kahden sanan väliin
tulevan välilyönnin tulostettua kännykän numeronäppäin muotoon eli numeron nolla? Eli esimerkiksi 'väli lyönti' tulostuisi muotoon
88822222555444055599966666_668444. Olen koittanut
kaikkea mitä mieleen on tullut, mutta en saa sitä nollaa tulemaan ja numeroiden tulostus katkeaa tämän
välilyönnin kohdalta. Jos joku vielä tässä auttaisi, olisin oikein kiitollinen. : )
Tee seuraavat muutokset ohjelmaan:
--- ALKU: LISÄÄ TÄMÄ ENEN MAIN RIVIÄ ---
void getline(char *p, int max)
{
while(max-- && ((*p++ = getchar()) != '\n'));
*(--p) = 0;
}
--- LOPPU ---
--- ALKU: MUUTA TAULUKKOA SEURAAVASTI ----
char merkit[] = { 'a', 'r', 'e', ' ', 0 };
char nappaimet[] = { '2', '7', '3', '0', 0 };
char painomaarat[] = { 1, 3, 2, 1, 0 };
--- LOPPU ---
--- ALKU: MUUTA SCANF RIVI SEURAAVAKSI ---
getline(jono, 38);
--- LOPPU ---
Nyt voit kirjoittaa "aare aare" ja väli lyönti näkyy nollana. Ongelmasi on varmaan johtunut siitä että scanf("%s", jono) lukee muistiin vain yhden sanan. Tuo äkkiä väsätty getline funktio ei ole mitenkään hyvä, mutta hoitaa kuitenkin tehtävänsä.