www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Angleška abeceda (c++)

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Sob Apr 18, 2009 11:47 am    Naslov sporočila:  Angleška abeceda (c++) Odgovori s citatom

Lep pozdrav!
Upam, da sem izbral pravi forum, če ne prosim prestavite temo. Delam domačo nalogo za predmet APJ v šoli in smo dobili navodilo, da nam program izpiše angleško abecedo. Najmanjši problem seveda. Ampak navodilo je, da nam program naprej zapiše abecedo z majhnimi črkami od a do z, nato pa z velikimi naprej od A do Z. Problem ne bi bil, če bi se črke lahko izpisovale ena ob drugo ali ena pod drugo, ker moram uporabiti le eno for zanko, v njej pa nobene druge (morda 2 pogoja, ne vem, ker mi logika ni segla tako daleč). Čeprav mi je rok za pravilno oddano nalogo že potekel, vas sprašujem zaradi osebnega zanimanja, kako lahko rešim takšen problem z minimalnim številom vrstic. Programiramo pa v C++.
Tukaj je moj program:



naloga.cpp
 Opis:

Download
 Ime datoteke:  naloga.cpp
 Velikost datoteke:  196 Bytov
 Downloadano:  17 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.03
Kraj: Novo mesto

PrispevekObjavljeno: Sob Apr 18, 2009 12:16 pm    Naslov sporočila:   Odgovori s citatom

Iz tiste for zanke, v kateri izpisuješ oboje, naredi dve for zanki.
V prvi izpiši male črke, v drugi velike.
Če sem prav razumel, da rabiš izpis a ... zA ... Z?
Koda:

int main()
{
    char a='a', b='A';

    for(; a<='z'; a++)
        cout<<a<<endl;

    for(; b<='Z'; b++)
        cout<<b<<endl;
   
    return 0;
}
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Sob Apr 18, 2009 1:58 pm    Naslov sporočila:   Odgovori s citatom

To sem naredil najprej, ampak ne velja, ker lahko uporabim samo eno for zanko. Deluje že, ampak ne ustreza navodilom naloge.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.03
Kraj: Novo mesto

PrispevekObjavljeno: Sob Apr 18, 2009 2:19 pm    Naslov sporočila:   Odgovori s citatom

Saj se mi je zdelo prej, da nisem dobro razumel. Ena for zanka... Pa dajmo:

Koda:

int main()
{
    char ch = 'a';
    char endCh  = 'z';

    for(; ch<=endCh; ch++)
    {
        cout<<ch<<endl;
        if(ch == 'z')
        {
            ch = 'A' - 1;
            endCh = 'Z'
        }
    }
    return 0;
}


Prireditev ch = 'A' -1; je tam zato, ker bi v nasprotnem primeru dobil izpis brez 'A'.
Lahko pa bi samo napisal ch = 0x40; (kar je znak @, ki v ascii stoji pred znakom A)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Highlag
Član
Član



Pridružen-a: Pet 23 Jan 2004 20:42
Prispevkov: 4034
Aktiv.: 16.98
Kraj: Črnuče

PrispevekObjavljeno: Sob Apr 18, 2009 2:23 pm    Naslov sporočila:   Odgovori s citatom

A niso v ASCII tabeli male in velike črke zamaknjene za neko fiksno številko?
Recimo:
Če je a na mestu 10, je A na 100
potem je b na 11 in B na 101

In tako naprej.
Potem šteješ številke in glede na številko narediš izpis male črke, prišteješ vrednost in izpišeš veliko črko, pa povečaš števec za 1 ....

_________________
If at first you don't succeed, destroy all evidence that you tried.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.62
Kraj: Hrastnik

PrispevekObjavljeno: Sob Apr 18, 2009 5:07 pm    Naslov sporočila:   Odgovori s citatom

for n = 0 to 51
{
if n < 26
print "ascii od mali a + n)
else
print "ascii od veliki a + (n-26)
}

Upam da razumeš kaj s tem mislim.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Sob Apr 18, 2009 9:12 pm    Naslov sporočila:   Odgovori s citatom

Umnik je napisal/a:
Saj se mi je zdelo prej, da nisem dobro razumel. Ena for zanka... Pa dajmo:

Koda:

int main()
{
    char ch = 'a';
    char endCh  = 'z';

    for(; ch<=endCh; ch++)
    {
        cout<<ch<<endl;
        if(ch == 'z')
        {
            ch = 'A' - 1;
            endCh = 'Z'
        }
    }
    return 0;
}


Prireditev ch = 'A' -1; je tam zato, ker bi v nasprotnem primeru dobil izpis brez 'A'.
Lahko pa bi samo napisal ch = 0x40; (kar je znak @, ki v ascii stoji pred znakom A)


Hvala. Torej to je tisti pogoj, o katerem je profesor govoril. Jaz pa sem mislim, da moram v glavi for zanke postaviti še kakšen pogoj. Enostavna rešitev. Imam še eno vprašanje iz zanimanja delovanja programa. Če bi tam pustil prireditev samo ch='A'. Če prav razumem, iz pogoja if v telesu zanke program nadaljuje v tretjem stavku glave for zanke, torej ch++ in se zato A ne bi izpisal, ker gre za en znak naprej. Imam prav?


@Slemi in Highlag: Fora je v tem, da je treba nalogo rešiti tako, da ne poznaš ascii tabele, če ne je vse brezveze. Zato imamo podatkovni tip char mar ne?
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Umnik
Član
Član



Pridružen-a: Čet 16 Sep 2004 17:52
Prispevkov: 958
Aktiv.: 4.03
Kraj: Novo mesto

PrispevekObjavljeno: Sob Apr 18, 2009 9:33 pm    Naslov sporočila:   Odgovori s citatom

Tako je.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Ned Apr 19, 2009 8:53 pm    Naslov sporočila:   Odgovori s citatom

Še krajša alternativa:
Koda:

char c;
for (c=0; c<CHAR_MAX; c++)
 if (isalpha(c))
   std::cout << c << std::endl;

_________________
Tiskanje sudoku
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
ljudsko
Član
Član



Pridružen-a: Pon 31 Mar 2008 8:19
Prispevkov: 1184
Aktiv.: 5.63
Kraj: Koroška-Mežica

PrispevekObjavljeno: Pon Apr 20, 2009 8:23 am    Naslov sporočila:   Odgovori s citatom

domen_puncer je napisal/a:
Še krajša alternativa:
Koda:

char c;
for (c=0; c<CHAR_MAX; c++)
 if (isalpha(c))
   std::cout << c << std::endl;


Ni mi dalo miru, da nisem poizkusil tega programa in ugotovil, da naredi isto, le da najprej izpiše velike in nato male črke. Ali mi lahko razložiš delovanje tega programa, ker nekatere ukaze in spremenljivke tukaj vidim prvič..
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Pon Apr 20, 2009 11:41 pm    Naslov sporočila:   Odgovori s citatom

ljudsko je napisal/a:
domen_puncer je napisal/a:
Še krajša alternativa:
Koda:

char c;
for (c=0; c<CHAR_MAX; c++)
 if (isalpha(c))
   std::cout << c << std::endl;


Ni mi dalo miru, da nisem poizkusil tega programa in ugotovil, da naredi isto, le da najprej izpiše velike in nato male črke. Ali mi lahko razložiš delovanje tega programa, ker nekatere ukaze in spremenljivke tukaj vidim prvič..


- 'c' se sprehodi po ASCII (oops, <= CHAR_MAX [navadno 127 ali 255] bi bilo prav, ampak ok za ta primer);
- isalpha preveri, če je 'c' črka;
- cout in endl sta pa standardni c++ zadevi (instanca razreda in hmm... ne vem kaj točno je endl) za izpis v namespacu std;
- najprej velike in potem male so zato ker so tako razporejene v ASCII tabeli.

_________________
Tiskanje sudoku
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
.
Član
Član



Pridružen-a: Pon 23 Avg 2004 16:16
Prispevkov: 16777190
Aktiv.: 70611.10

PrispevekObjavljeno: Pon Apr 20, 2009 11:59 pm    Naslov sporočila:   Odgovori s citatom

Brisana vsebina odstranjenega uporabnika.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.62
Kraj: Hrastnik

PrispevekObjavljeno: Tor Apr 21, 2009 12:04 am    Naslov sporočila:   Odgovori s citatom

A se mi samo zdi, ali je kdo res pozabil da so v ASCII tabeli najprej velike in potem male črke. V nalogi pa morajo biti napisane ravno obratno.

LP
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 23.50

PrispevekObjavljeno: Tor Apr 21, 2009 1:06 am    Naslov sporočila:   Odgovori s citatom

Ni problema, zacnes steti pri 'A' in nadaljujes 255 iteracij (oziroma lahko samo do 'z').

Lepota C-jevskih parametrov zank Wink

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
domen_puncer
Član
Član



Pridružen-a: Čet 01 Maj 2008 13:30
Prispevkov: 78
Aktiv.: 0.37
Kraj: Ljubljana, Mozirje

PrispevekObjavljeno: Tor Apr 21, 2009 7:37 pm    Naslov sporočila:   Odgovori s citatom

MarE69 je napisal/a:
V C-ju pa macro narediš:
Koda:
#define isalpha(x) ((((x)>='A')&&((x)<='Z')) || (((x)>='A')&&((x)<='Z')))

... in si razbijaš glavo kje je problem ker "xxx; isalpha(c++); xxx;" dela čudno. V isalpha že ne, saj je vedno delal ok. Wink

Koda:

static inline int isalpha(int x)
{
  return (x >= 'A' && x <= 'Z') || (x >= 'a' && x <= 'z');
}


Deluje seveda samo za "C"/ASCII locale.
libc bi že moral imeti implementacijo, če ne pišeš ravno programa brez vsega.


Slemi je napisal/a:
... V nalogi pa morajo biti napisane ravno obratno.

Imaš prav, moja rešitev je napačna.

_________________
Tiskanje sudoku
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Programska oprema Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 10 dni


Powered by phpBB © 2001, 2005 phpBB Group