problem ohladne C::::::..

Programovacie jazyky, rady, poradňa...
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

problem ohladne C::::::..

Príspevok od používateľa reDo »

mam takyto zdrojak a nefunguje tak ako ma
zadanie nie je do skoly som samouk a ucim sa z knihy tu je to zadanie napiste program ktory nacita 10 cisel double do pola + ked zadate ine ako cislicu tak koniec zadavania + ktore cislo z nich je vecie ako aritmeticky tych vsetkych tak to vypisat tu je zdrojak pomoc plsssss
:( :( :(

Kód: Vybrať všetko

#include <iostream>
#include <cctype>

using namespace std;

int main() {

double pole[10];
int i=0, pocet=0; 
double celok=0;
cout<<"Zadajte 10 celych cisle necislo pre koniec\n";
cin>>pole[i];

while(isdigit(pole[i])==1) {
cout<<pole[i]<<endl;
cin>>pole[i];
i++; pocet++;
}

for(i=0;i<pocet;i++) {
celok=celok+pole[i];
}

for(i=0;i<pocet;i++) {
if(celok/pocet<pole[i])
cout<<"Je vacsi ako priemer\n";
}

system("pause");
return 0;
}
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Príspevok od používateľa audiotrack »

nemáš to v cykle, nikde teda nenačítaš 10 čísel, ale iba jedno
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

mohol by si mi to prepisat aj s tym a mozes tam aj upravit veci ktore su jednoduche a primitivne na lepsie :)
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

audiotrack napísal:nemáš to v cykle, nikde teda nenačítaš 10 čísel, ale iba jedno
nenacitava len jedno cislo. prve si nacita v tom prvom cykle. zvysne nacitava vo while cykle.

a chyby su: prepisujes si prvu hodnotu vo while (po premennej pole[0] nacitavas 2x hodnoty) a dalsiu chybu co som si vsimol ten while cyklus ti moze pokracovat az pokial bude zadavat spravne hodnoty tj. moze ich byt aj viac ako 10.

keby sa mi chcelo tak ti to aj prepisem ale o 0:45 sa mi teda vazne nechce
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

aha upravuíte to

//autoeditácia príspevku ( 13 May 2009, 14:33 )
mam tu dlasi programcek je v nom jedna chyba ale nwm na nu prist poradte

Kód: Vybrať všetko

#include <iostream>
#include <cctype>
using namespace std;
int main() {
    char ch;
    cout<<"Zadavajte znaky,pre ukoncenie @\n";
    cin>>ch;
    while(ch!='@'&&isdigit(ch)==0) {
                                   if(ch>='a'&&'z'<=ch)
                                   cout<<toupper(ch)<<endl;
                                   else(ch>='A'&&'Z'<=ch)
                                   cout<<tolower(ch)<<endl;
                                   
                                   cout<<ch<<endl;
                                   cin>>ch;
                                   }
    system("pause");
    return 0;
:(
konyk87
King
King
Používateľov profilový obrázok
Príspevky: 1709
Registrovaný: 24 okt 2007, 15:56

Príspevok od používateľa konyk87 »

podla toho, co ma ten program robit, ale predpokladam, ze zamenit velke pismena za male..

skus..

Kód: Vybrať všetko

if((ch>='a') && (ch<='z'))
    cout<<toupper(ch)<<endl;
else
    cout<<tolower(ch)<<endl;
patrilo by sa vsak osetrit aj specialne znaky, nie len cisla..myslim, ze C/C++ by malo mat aj funkciu isLetter(), tak by som radsej pouzil tu..
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

dakujem ale spravil osm to uz sam ale nejde tak kao ma dam zadanie z mojej knihy napiste program ktory nacitava znaky po znak @ alebo cislicu a male pismenka na velke a naopak ale nevipisuje mi to spravne nwm kde je chyba asi vo mne :lol: a to isLetter tak to je v cctype?? ked to napisete dajte t osem ten zdrojak s vypracovanym zadanim dikes za pomoc
neutronmind
Expert
Expert
Príspevky: 189
Registrovaný: 05 aug 2008, 14:17

Príspevok od používateľa neutronmind »

Malo by to byt skor isalpha()
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

ano isLetter a isAlpha a ostatne veci su v cctype.

co ti chybalo je asi pretypovanie na char lebo inak sa ti vypise ASCII kod zadaneho znaku. A podla zadania by som este upravil podmienku vo while cykle a pridal este jeden if pre vypis cislic

Kód: Vybrať všetko

#include <iostream>
#include <cctype>
using namespace std;

int main() {
		char ch;
		cout<<"Zadavajte znaky,pre ukoncenie @\n";
		cin>>ch;
		while(ch!='@' ) {
			if(ch>='a' && 'z'>=ch) {
				cout << (char)toupper(ch) <<endl;
			} else if (ch>='A'&&'Z'>=ch) {
				cout << (char)tolower(ch) <<endl;
			} else if( isdigit(ch) ){
				cout << ch <<endl;
			} 
			cin>>ch;
		}
		return 0;
}
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

dikes a date sme aj ten prvy program prepisany pls :)
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

tu mas ten prvy priklad. chybu si mal v tom ze isdigit sa pouziva na kontrolu ci je dany znak (char) cislo aby si to potom mohol prerobit na int alebo nieco podobne.

Kód: Vybrať všetko

#include <iostream>
#include <cctype>
using namespace std;

int main() {

double pole[10];
int pocet=0;
double celok=0;

cout<<"Zadajte 10 celych cisel, necislo pre koniec\n";

do {
	cin >> pole[pocet];                  // nacitanie prvku (ak nacitanie neuspesne v poli zostane 0)
	if ( cin.fail() ) break;             // ak nenacital cislo tak koniec
	else {
		celok += pole[pocet];              // scitavanie prvkov
		pocet++;                           // zvysenie poctu prvkov
	}
} while( pocet < 10);                  // pocet prvkov je mensi ako 10 tak opakuj


for(int i=0; i<pocet; i++) {
	if(celok/pocet<pole[i])
		cout<<"prvok " << i+1 << " je vacsi ako priemer\n";
}

return 0;
}
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Príspevok od používateľa reDo »

dakujem :)

//autoeditácia príspevku (05 Feb 2010, 21:09)
mam takyto kod

Kód: Vybrať všetko

#include <stdio.h>
#include <windows.h>
#include <conio.h>
int main()
{
    int in;
    while(1)
   {
      if(kbhit())
      {
            in=getch();
            if(in==38)
            break;
      }
   }
printf("\nKONIEC\n");
system("pause");
return 0;
}
ale nefunguje len som zmenil v podmienke in na 38 z povodnych 27 co je ESCAPE
podla tejto tabulky by to malo byt sipka hore preco to pls nejde?
http://www.tronan.com/macromachine/scripthelp/VK.htm
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: problem ohladne C::::::..

Príspevok od používateľa chrono »

Skús urobiť program, ktorý ti vypíše to, čo vrátila funkcia getch (a zistíš, že šípka hore nevráti 38). ;)
Inak nechápem, načo je v konzole dobrá zisťovať, či bola stlačená šípka.
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: problem ohladne C::::::..

Príspevok od používateľa reDo »

pretoze chcem urobit jednoduchu hru a sipkami sa budem hybat :) takze ako inak by som to mohol urobit?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: problem ohladne C::::::..

Príspevok od používateľa audiotrack »

keď si lenivý pozreť si aké kody ti tie klávesy vracajú (na čo ťa chcel nasmerovať chrono tým, že uvidíš že šípka nevracia to čo čakáš) tak som ti to pozrel za teba:

72 - hore
80 - dole
75 - dolava
77 - doprava
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: problem ohladne C::::::..

Príspevok od používateľa chrono »

Nie je to ešte trochu komplikovanejšie? Pokiaľ si dobre pamätám, tak šípky (a kopec iných klávesov) posielajú rozšírené kódy (a teda v podstate dva znaky)?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: problem ohladne C::::::..

Príspevok od používateľa audiotrack »

áno, o tom "druhom" znaku hovorím(e)

Kód: Vybrať všetko

while((znak=getch())!=27)  //ukončíme klávesou Esc
      {                          //pri stlačení niektorej zo šípok predefinujem súradnice x,y (overujem aj či som neopustil plochu)
	    znak=getch();
        if(znak==72) if(y>0) vykresli(x,y-=1);   //hore
	    if(znak==75) if(x>0) vykresli(x-=1,y);   //doľava
	    if(znak==80) if(y<vyska-1) vykresli(x,y+=1);   //dole
	    if(znak==77) if(x<sirka-1) vykresli(x+=1,y);   //doprava
      }
v delphi som ale so šípkami pracoval cez VK, a zrejme nejaké konštanty virtuálnych kláves budú aj v céčku, nie?
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Re: problem ohladne C::::::..

Príspevok od používateľa juho »

chrono napísal:Nie je to ešte trochu komplikovanejšie? Pokiaľ si dobre pamätám, tak šípky (a kopec iných klávesov) posielajú rozšírené kódy (a teda v podstate dva znaky)?
to zalezi od toho aku sluzbu procesora dana funkcia pouziva ale vacsinou to je tak ze funkcne klavesy ako sipky su zapisovane do horneho registra (1..255)*256 a ostatne klavesy do dolneho registra 1..255 cize sipka hore by bola pri sluzbe int 16H vratena ako 4800H a pismeno velke H ako 0048H alebo v desiatkovej ako 72*256 -> 18432 a velke pismeno H ako 72..
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Re: problem ohladne C::::::..

Príspevok od používateľa chrono »

Klasickou DOS službou to vráti tuším dva znaky (pravdepodobne #0 a potom ďalší znak, DOS ale asi vráti 0xE0 či niečo podobné).
audiotrack napísal:...
Asi by bolo vhodné kontrolovať aj ten prvý znak, inak to bude reagovať aj na písmená (čo môže, ale aj nemusí vadiť).

Virtuálne kódy sú viac-menej záležitosťou Windows (a je možné, že veľa z nich je rovnakých, ako to, čo vráti ten kláves pre DOS) a netuším, či existuje naozaj niečo univerzálne (teda ak sa nepoužije nejaká "veľká" knižnica, ktorá sa postará o spracovávanie).
reDo
Star
Star
Používateľov profilový obrázok
Príspevky: 661
Registrovaný: 26 apr 2009, 18:36
Bydlisko: 00100100
Kontaktovať používateľa:

Re: problem ohladne C::::::..

Príspevok od používateľa reDo »

audiotrack napísal:áno, o tom "druhom" znaku hovorím(e)

Kód: Vybrať všetko

while((znak=getch())!=27)  //ukončíme klávesou Esc
      {                          //pri stlačení niektorej zo šípok predefinujem súradnice x,y (overujem aj či som neopustil plochu)
	    znak=getch();
        if(znak==72) if(y>0) vykresli(x,y-=1);   //hore
	    if(znak==75) if(x>0) vykresli(x-=1,y);   //doľava
	    if(znak==80) if(y<vyska-1) vykresli(x,y+=1);   //dole
	    if(znak==77) if(x<sirka-1) vykresli(x+=1,y);   //doprava
      }
v delphi som ale so šípkami pracoval cez VK, a zrejme nejaké konštanty virtuálnych kláves budú aj v céčku, nie?
dakujem za vysvetlenie nebol som lenivy len som mal velmi malo casu ale chcel som to spravit ale dakujem :oops: :)

//autoeditácia príspevku (06 Feb 2010, 16:03)
a este ako si to pozrel audio? lebo ked som to chcel cez printf tak mi to vypisovalo velke cisla ako povedal juho
Napísať odpoveď