Jeesaisko joku...

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.
3587
Äänestä

Muut lukivat myös

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;
}

Äänestä

...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. : )

Äänestä
  • 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ä.

    Äänestä

Kommentoi aloitusta


c-idiootti kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu