 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Apr 18, 2009 11:47 am Naslov sporočila: Angleška abeceda (c++) |
|
|
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:
Opis: |
|
 Download |
Ime datoteke: |
naloga.cpp |
Velikost datoteke: |
196 Bytov |
Downloadano: |
17 krat |
|
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.03 Kraj: Novo mesto
|
Objavljeno: Sob Apr 18, 2009 12:16 pm Naslov sporočila: |
|
|
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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Apr 18, 2009 1:58 pm Naslov sporočila: |
|
|
To sem naredil najprej, ampak ne velja, ker lahko uporabim samo eno for zanko. Deluje že, ampak ne ustreza navodilom naloge.
|
|
Nazaj na vrh |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.03 Kraj: Novo mesto
|
Objavljeno: Sob Apr 18, 2009 2:19 pm Naslov sporočila: |
|
|
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 |
|
 |
Highlag Član


Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 16.98 Kraj: Črnuče
|
Objavljeno: Sob Apr 18, 2009 2:23 pm Naslov sporočila: |
|
|
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 |
|
 |
Slemi Član

Pridružen-a: Pet 29 Okt 2004 13:29 Prispevkov: 386 Aktiv.: 1.62 Kraj: Hrastnik
|
Objavljeno: Sob Apr 18, 2009 5:07 pm Naslov sporočila: |
|
|
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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Sob Apr 18, 2009 9:12 pm Naslov sporočila: |
|
|
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 |
|
 |
Umnik Član

Pridružen-a: Čet 16 Sep 2004 17:52 Prispevkov: 958 Aktiv.: 4.03 Kraj: Novo mesto
|
Objavljeno: Sob Apr 18, 2009 9:33 pm Naslov sporočila: |
|
|
Tako je.
|
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Ned Apr 19, 2009 8:53 pm Naslov sporočila: |
|
|
Š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 |
|
 |
ljudsko Član


Pridružen-a: Pon 31 Mar 2008 8:19 Prispevkov: 1184 Aktiv.: 5.63 Kraj: Koroška-Mežica
|
Objavljeno: Pon Apr 20, 2009 8:23 am Naslov sporočila: |
|
|
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 |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Pon Apr 20, 2009 11:41 pm Naslov sporočila: |
|
|
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 |
|
 |
. Član

Pridružen-a: Pon 23 Avg 2004 16:16 Prispevkov: 16777190 Aktiv.: 70611.08
|
Objavljeno: Pon Apr 20, 2009 11:59 pm Naslov sporočila: |
|
|
Brisana vsebina odstranjenega uporabnika.
|
|
Nazaj na vrh |
|
 |
Slemi Član

Pridružen-a: Pet 29 Okt 2004 13:29 Prispevkov: 386 Aktiv.: 1.62 Kraj: Hrastnik
|
Objavljeno: Tor Apr 21, 2009 12:04 am Naslov sporočila: |
|
|
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 |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.50
|
Objavljeno: Tor Apr 21, 2009 1:06 am Naslov sporočila: |
|
|
Ni problema, zacnes steti pri 'A' in nadaljujes 255 iteracij (oziroma lahko samo do 'z').
Lepota C-jevskih parametrov zank
_________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
domen_puncer Član

Pridružen-a: Čet 01 Maj 2008 13:30 Prispevkov: 78 Aktiv.: 0.37 Kraj: Ljubljana, Mozirje
|
Objavljeno: Tor Apr 21, 2009 7:37 pm Naslov sporočila: |
|
|
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.
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 |
|
 |
|
|
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
|