Ĺadny brzuch
Witam!
Chcialbym napisac program ktory sprawdza czy wpisany znak jest liczbą
W tabeli ASCII wyszukałem ze wszystkie inne znaki maja kody od 32-47 i 58-127.
I dałem taki warunek
#include<stdio.h> #include<string.h> #include<stdlib.h> main() { int i; printf("Podaj liczbe (0-9)"); scanf("%d",i); if( ( (i>='32') && (i<='47') ) && ( (i>='58') && (i<='127') ) ) printf("Zle"); }
Czy mozna to sprawdzic w inny sposob , np sprawdzajac czy zmienna jest typu int . I czy wtedy tez bedzie dzialał na klawisze specjalne typu spacja itp
pozdro
A nie prościej tak?#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "podaj liczbe: "; char c; cin >> c; if ((c>47)&&(c<58)) cout << "dobrze\n"; else cout << "zle\n"; system("pause"); }
tylko ze ja pisze to w C:)
a warunku faktycznie lepsze ... na szybko pisałem potem tez zmieniłem:)
edit
no zrobiłem:)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h>; main() { int i; char znak; printf("Podaj liczbe (0-9)"); znak=getchar(); if( (znak>47) && (znak<58) ) printf("ok"); else printf("zle"); }
Użytkownik Crisu edytował ten post 04 grudzień 2005, 19:21
tylko ze ja pisze to w C:)
a warunku faktycznie lepsze ... na szybko pisałem potem tez zmieniłem:)
Za wczesna radość.
Jest taki problem
Otóż skrypt ma sprawdzać czy
Wpisany znak jest liczbą
1) mniejsza od jakies stałej MAX (define MAX)
2) no i czy jest cyfrą (pod kodzie ASCII chyba najlepiej)
3)jezeli 1 i 2 ok to coś tam robi
niby banał ale za cholere nie moge tego napisać
próbowałem już na dwóch ifach i elsie
na if, else if, i else ale ciagle mi bzdury wypisuje:/
#define MAX 10 #include<cstdio> #include<stdlib.h> int main() { char znak; int liczba; scanf("%c",&znak); if ( (znak>47) && (znak<58)){ liczba = (int) znak - 48; if(liczba<MAX){ printf("Rob cos"); } } system("PAUSE"); return 0; }
Napewno da sie to prościej ale jakoś to mi pierwsze do głowy przyszło
Co do sprawdzania czy dany znak jest cyfrą to istnieje funkcja int isdigit(int iZnak) z ctype.h
(funkcja zwraca wartość różną od zera, jeśli iZnak to kod cyfry)
Użytkownik rzymo edytował ten post 04 grudzień 2005, 21:17
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)
Y... chodzi o sprawdzenie poprawności wczytania? No to jak na mój gust trzeba pentelką wczytywać znak po znaku, aż do białego znaku/litery albo pobawić sie ze scanfem
to moze nie działać, bo nigdy tego w sumie nie testowałem:
... int main(){ int d; int a = scanf("%d",&d); if(a==0){printf("Złe dane\n");} else{ if(d<MAX){/*cos tam*/} } }
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr
cos mi sie kojarzy zeby dac jakas tablice w stylu
char tab[10] np i sprawdzac po kolei ale za cholere nie wiem jak to wszystko połaczyć:/
@
Kodie skrypt jest nie poprawny niestety
--edit---
teraz dopiero przeczytałem drugi post Artura;)
wiec
Czy mozna jakos zrobic tak aby czytał takze zero. Kwestia jest taka ze liczba ma okreslac wiersz tablicy.
Czy musze tablice numerowac od jeden?
pozdro
Użytkownik Crisu edytował ten post 04 grudzień 2005, 22:58
Najpier zapisujesz jakiś string do tablicy np. char str[50];
Później robisz pętelkę np.
for(int i = 0; i< strlen(str);i++)
//i tu sprawdzasz czy
if((str[i] <47) || (str[i] > 58) )
jeżeli tak to dajesz odrazu break;
i np. return 0; żeby zakończyć program
#define MAX 6 #include<cstdio> #include<string.h> #include<stdlib.h> main() { char tab[10]; scanf("%s",tab); for(int i=0; i<strlen(tab);i++) { if((tab[i] <47) || (tab[i] > 58) ) { break; return 0; } else { printf("ok"); } } }
1.Szit ciagle sprawdza liczba po liczbie:/ i spokojnie obchodzi zabezpieczenie max:/
2.Teraz tylko myśle i wpasc nie moge( juz za duzo chyba dzis siedze).
Kwestia jest taka, ze sprawdzona liczbe musze uzyc w dalszej czesci programu.
A po zapisaniu jej do tablicy nie mam pojecia jak ja wyciagnac i przypisac do jakies zmiennej int ?
Użytkownik Crisu edytował ten post 04 grudzień 2005, 23:28
#define MAX 6 #include<cstdio> #include<string.h> #include<stdlib.h> main() { char tab[10]; scanf("%s",tab); if (strlen(tab)>MAX) return 0; for(int i=0; i<strlen(tab);i++) if((tab[i] <47) || (tab[i] > 58)) { break; return 0; } int x=0; for (int i=0; i<strlen(tab); i++) x=x*10+tab[i]-48; printf("%d\n",x); system("pause"); }Coś takiego? :)
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)
Cyrkiel mozesz mi wyjasnic ta linijke
x=x*10+tab[i]-48;
bo rozumiem idee ale nie rozumiem dokladnie sensu.
moim zdaniem to powinno byc w stylu(dla dwucyfrowej)
x=10*tab[i]+tab[i+1]
Użytkownik Crisu edytował ten post 06 grudzień 2005, 22:09
Cyrkiel mozesz mi wyjasnic ta linijke
x=x*10+tab[i]-48;
bo rozumiem idee ale nie rozumiem dokladnie sensu.
moim zdaniem to powinno byc w stylu(dla dwucyfrowej)
x=10*tab[i]+tab[i+1] Funkcja oblicza wartość liczby przechodząc znak po znaku (zakładając, że nie wiemy z góry, ile ich jest), np.:string = "1234" x = 0 pętla: x = 0*10+( tab[i] = 49(znak "1") - 48 = 1) x = 0+1 = 1 next: x = 1*10+2 x = 10+2 = 12 next: x = 12*10+3 x = 120+3 = 123 next: x = 123*10+4 x = 1230+4 = 1234
Użytkownik Cyrkiel edytował ten post 07 grudzień 2005, 00:54
string = "1234" x = 0 pętla: x = 0*10+( tab[i] = 49(znak "1") - 48 = 1) x = 0+1 = 1 next: x = 1*10+2 x = 10+2 = 12 next: x = 12*10+3 x = 120+3 = 123 next: x = 123*10+4 x = 1230+4 = 1234
dobra to mam pierwsze pytanie : wzor jest taki
x=x*10+tab[i]-48
czyli w zerowym obiegu
x=0
tab[0]=1
x=10*0 + 1-48 ?
Skad sie wzieło to 49 ?
dla obiegu pierwszego
tab[1]=2
x=10*1 + 49*2-48 ????
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Chcialbym napisac program ktory sprawdza czy wpisany znak jest liczbą
W tabeli ASCII wyszukałem ze wszystkie inne znaki maja kody od 32-47 i 58-127.
I dałem taki warunek
#include<stdio.h> #include<string.h> #include<stdlib.h> main() { int i; printf("Podaj liczbe (0-9)"); scanf("%d",i); if( ( (i>='32') && (i<='47') ) && ( (i>='58') && (i<='127') ) ) printf("Zle"); }
Czy mozna to sprawdzic w inny sposob , np sprawdzajac czy zmienna jest typu int . I czy wtedy tez bedzie dzialał na klawisze specjalne typu spacja itp
pozdro
A nie prościej tak?#include <cstdlib> #include <iostream> using namespace std; int main() { cout << "podaj liczbe: "; char c; cin >> c; if ((c>47)&&(c<58)) cout << "dobrze\n"; else cout << "zle\n"; system("pause"); }
tylko ze ja pisze to w C:)
a warunku faktycznie lepsze ... na szybko pisałem potem tez zmieniłem:)
edit
no zrobiłem:)
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h>; main() { int i; char znak; printf("Podaj liczbe (0-9)"); znak=getchar(); if( (znak>47) && (znak<58) ) printf("ok"); else printf("zle"); }
Użytkownik Crisu edytował ten post 04 grudzień 2005, 19:21
tylko ze ja pisze to w C:)
a warunku faktycznie lepsze ... na szybko pisałem potem tez zmieniłem:)

Za wczesna radość.
Jest taki problem
Otóż skrypt ma sprawdzać czy
Wpisany znak jest liczbą
1) mniejsza od jakies stałej MAX (define MAX)
2) no i czy jest cyfrą (pod kodzie ASCII chyba najlepiej)
3)jezeli 1 i 2 ok to coś tam robi
niby banał ale za cholere nie moge tego napisać
próbowałem już na dwóch ifach i elsie
na if, else if, i else ale ciagle mi bzdury wypisuje:/
#define MAX 10 #include<cstdio> #include<stdlib.h> int main() { char znak; int liczba; scanf("%c",&znak); if ( (znak>47) && (znak<58)){ liczba = (int) znak - 48; if(liczba<MAX){ printf("Rob cos"); } } system("PAUSE"); return 0; }
Napewno da sie to prościej ale jakoś to mi pierwsze do głowy przyszło
Co do sprawdzania czy dany znak jest cyfrą to istnieje funkcja int isdigit(int iZnak) z ctype.h
(funkcja zwraca wartość różną od zera, jeśli iZnak to kod cyfry)
Użytkownik rzymo edytował ten post 04 grudzień 2005, 21:17
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)

Y... chodzi o sprawdzenie poprawności wczytania? No to jak na mój gust trzeba pentelką wczytywać znak po znaku, aż do białego znaku/litery albo pobawić sie ze scanfem
to moze nie działać, bo nigdy tego w sumie nie testowałem:
... int main(){ int d; int a = scanf("%d",&d); if(a==0){printf("Złe dane\n");} else{ if(d<MAX){/*cos tam*/} } }
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr

cos mi sie kojarzy zeby dac jakas tablice w stylu
char tab[10] np i sprawdzac po kolei ale za cholere nie wiem jak to wszystko połaczyć:/
@
Kodie skrypt jest nie poprawny niestety
--edit---
teraz dopiero przeczytałem drugi post Artura;)
wiec
Czy mozna jakos zrobic tak aby czytał takze zero. Kwestia jest taka ze liczba ma okreslac wiersz tablicy.
Czy musze tablice numerowac od jeden?
pozdro
Użytkownik Crisu edytował ten post 04 grudzień 2005, 22:58
Najpier zapisujesz jakiś string do tablicy np. char str[50];
Później robisz pętelkę np.
for(int i = 0; i< strlen(str);i++)
//i tu sprawdzasz czy
if((str[i] <47) || (str[i] > 58) )
jeżeli tak to dajesz odrazu break;
i np. return 0; żeby zakończyć program
#define MAX 6 #include<cstdio> #include<string.h> #include<stdlib.h> main() { char tab[10]; scanf("%s",tab); for(int i=0; i<strlen(tab);i++) { if((tab[i] <47) || (tab[i] > 58) ) { break; return 0; } else { printf("ok"); } } }
1.Szit ciagle sprawdza liczba po liczbie:/ i spokojnie obchodzi zabezpieczenie max:/
2.Teraz tylko myśle i wpasc nie moge( juz za duzo chyba dzis siedze).
Kwestia jest taka, ze sprawdzona liczbe musze uzyc w dalszej czesci programu.
A po zapisaniu jej do tablicy nie mam pojecia jak ja wyciagnac i przypisac do jakies zmiennej int ?
Użytkownik Crisu edytował ten post 04 grudzień 2005, 23:28
#define MAX 6 #include<cstdio> #include<string.h> #include<stdlib.h> main() { char tab[10]; scanf("%s",tab); if (strlen(tab)>MAX) return 0; for(int i=0; i<strlen(tab);i++) if((tab[i] <47) || (tab[i] > 58)) { break; return 0; } int x=0; for (int i=0; i<strlen(tab); i++) x=x*10+tab[i]-48; printf("%d\n",x); system("pause"); }Coś takiego? :)
@Artur Menc
Witam!
Niestety nie działa poprawnie...
Gdy wpisuje liczbe wieksza od MAX program sie wykonuje.
pzdr
co do isdigit to sprawdza tylko cyfry z zakresu 0-9 (czyli dwuelementowe odpadaja)

Cyrkiel mozesz mi wyjasnic ta linijke
x=x*10+tab[i]-48;
bo rozumiem idee ale nie rozumiem dokladnie sensu.
moim zdaniem to powinno byc w stylu(dla dwucyfrowej)
x=10*tab[i]+tab[i+1]
Użytkownik Crisu edytował ten post 06 grudzień 2005, 22:09
Cyrkiel mozesz mi wyjasnic ta linijke
x=x*10+tab[i]-48;
bo rozumiem idee ale nie rozumiem dokladnie sensu.
moim zdaniem to powinno byc w stylu(dla dwucyfrowej)
x=10*tab[i]+tab[i+1] Funkcja oblicza wartość liczby przechodząc znak po znaku (zakładając, że nie wiemy z góry, ile ich jest), np.:string = "1234" x = 0 pętla: x = 0*10+( tab[i] = 49(znak "1") - 48 = 1) x = 0+1 = 1 next: x = 1*10+2 x = 10+2 = 12 next: x = 12*10+3 x = 120+3 = 123 next: x = 123*10+4 x = 1230+4 = 1234
Użytkownik Cyrkiel edytował ten post 07 grudzień 2005, 00:54
string = "1234" x = 0 pętla: x = 0*10+( tab[i] = 49(znak "1") - 48 = 1) x = 0+1 = 1 next: x = 1*10+2 x = 10+2 = 12 next: x = 12*10+3 x = 120+3 = 123 next: x = 123*10+4 x = 1230+4 = 1234
dobra to mam pierwsze pytanie : wzor jest taki
x=x*10+tab[i]-48
czyli w zerowym obiegu
x=0
tab[0]=1
x=10*0 + 1-48 ?
Skad sie wzieło to 49 ?
dla obiegu pierwszego
tab[1]=2
x=10*1 + 49*2-48 ????