proste pytanie z programowania w c
-
- Użytkownik
- Posty: 474
- Rejestracja: 22 paź 2007, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Podziękował: 416 razy
- Pomógł: 2 razy
proste pytanie z programowania w c
mam pewne zadanie i nie wiem, jak zrobic, zeby potrafil ze standardowego wejscia pobrac cos takiego jak 120*2 i zinterpretował jako 240, a potem 240 zapisał do zmiennej.
to mój dotychczasowy kod:
#include
#include
#include
int main()
{
//wpisuje sie cene w groszach i potwierdza enterem
//jezeli sie cos kupuje w ilosci kilku to podaje sie gwiazdke
//konczy sie cena zero
//podaje sume w zlotych i groszach
int cena; //w groszach
int suma = 0;
while (cena!=0)
{
scanf("%d",&cena);
//printf("(%d)",cena);
suma=suma+cena;
}
printf("Suma ta wyniosla: %d",suma);
system("PAUSE");
return 0;
}
to mój dotychczasowy kod:
#include
#include
#include
int main()
{
//wpisuje sie cene w groszach i potwierdza enterem
//jezeli sie cos kupuje w ilosci kilku to podaje sie gwiazdke
//konczy sie cena zero
//podaje sume w zlotych i groszach
int cena; //w groszach
int suma = 0;
while (cena!=0)
{
scanf("%d",&cena);
//printf("(%d)",cena);
suma=suma+cena;
}
printf("Suma ta wyniosla: %d",suma);
system("PAUSE");
return 0;
}
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
proste pytanie z programowania w c
Proponuje takie cos:
POZDRO
Kod: Zaznacz cały
#include <stdio.h>
int main()
{
int cena=1,ile=1,suma=0;
while(cena)
{
cena=1;ile=1;
printf("Cena (w gr): ");
scanf("%d*%d",&cena,&ile);
suma+=cena*ile;
}
printf("
Suma wynosi: %d gr",suma);
getch();
return 0;
}
-
- Użytkownik
- Posty: 474
- Rejestracja: 22 paź 2007, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Podziękował: 416 razy
- Pomógł: 2 razy
proste pytanie z programowania w c
dzięki wielkie, Soku, najprostsze rozwiązania są jak widać zawsze najlepsze . ktoś mi proponował użycie jakichś parserów matematycznych (?) do rozwiązania tego zadania.
mam jeszcze problem z zamianą groszy na złotówki:
#include
#include
int main()
{
int suma=0,kwota=1,sztuk;
while (kwota!=0)
{
sztuk=1;
scanf("%d*%d",&kwota,&sztuk);
suma=suma+(kwota*sztuk);
}
printf("Kwota %d zl",suma/100); //problemem jest slash 100 i typ zmiennej
system("PAUSE");
return 0;
}
pozdrawiam!
[ Dodano: 17 Listopada 2007, 13:05 ]
co to jest ONP?
wpadłem jeszcze na drugi pomysł rozwiazania tego problem - zinterpretować ciąg znaków, czyli np. dla 125*65 zrobić funkcję, która zamienia znaki cyfr na liczbę - w jaki sposób to zrobić?
mam jeszcze problem z zamianą groszy na złotówki:
#include
#include
int main()
{
int suma=0,kwota=1,sztuk;
while (kwota!=0)
{
sztuk=1;
scanf("%d*%d",&kwota,&sztuk);
suma=suma+(kwota*sztuk);
}
printf("Kwota %d zl",suma/100); //problemem jest slash 100 i typ zmiennej
system("PAUSE");
return 0;
}
pozdrawiam!
[ Dodano: 17 Listopada 2007, 13:05 ]
co to jest ONP?
wpadłem jeszcze na drugi pomysł rozwiazania tego problem - zinterpretować ciąg znaków, czyli np. dla 125*65 zrobić funkcję, która zamienia znaki cyfr na liczbę - w jaki sposób to zrobić?
- Undre
- Użytkownik
- Posty: 1430
- Rejestracja: 15 lis 2004, o 02:05
- Płeć: Mężczyzna
- Lokalizacja: UĆ
- Podziękował: 3 razy
- Pomógł: 92 razy
proste pytanie z programowania w c
ONP - odwrotna notacja polska. Generalnie chodzi o analizowanie zapisu matematycznego od lewej i konsekwentne odkładanie symboli na stos, dzięki czemu łatwo jest całe wyrażenie ostatecznie policzyć. ONP świetnie załatwia problem kolejności wykonywania działań. Więcej info znajdziesz na google.
[ Dodano: 17 Listopada 2007, 13:15 ]
[ Dodano: 17 Listopada 2007, 13:15 ]
samą zamianę cyfr na liczbę łatwo zrobić wykorzystując isdigit ( ) - można by np korzystając z funkcji operujących na łańcuchach skleić ileś kolejnych char-ów w łańcuch następnie konwertowany na typ liczbowy, aczkolwiek podejrzewam, że takie kombinowanie i tak jest żmudniejsze od ONP, poza tym ciężej to imo zrobić w C niż w C++kawafis44 pisze:wpadłem jeszcze na drugi pomysł rozwiazania tego problem - zinterpretować ciąg znaków, czyli np. dla 125*65 zrobić funkcję, która zamienia znaki cyfr na liczbę - w jaki sposób to zrobić?
-
- Użytkownik
- Posty: 474
- Rejestracja: 22 paź 2007, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Podziękował: 416 razy
- Pomógł: 2 razy
proste pytanie z programowania w c
wiem, ze jest to żmudne, ale przećwiczę sobie parę funkcji
1. wczytuję np. 20*2 jako string "20*2" - jak to wczytać, czy jako:
char str[15];
scanf("%s",str[]) ?
2. szukam, w którym polu jest gwiazdka
int nrpola;
nie wiem co dalej zrobić
3. zamieniam pierwszą część stringa na liczbę
int liczba1,liczba2;
// str[0...nrpola-1] - jak zaznaczyć "część" stringa, skoro to jest tablica?
liczba1 = atoi(str[0...nrpola-1]
4. tak samo z drugą liczbą
5. dalej jest już łatwo
1. wczytuję np. 20*2 jako string "20*2" - jak to wczytać, czy jako:
char str[15];
scanf("%s",str[]) ?
2. szukam, w którym polu jest gwiazdka
int nrpola;
nie wiem co dalej zrobić
3. zamieniam pierwszą część stringa na liczbę
int liczba1,liczba2;
// str[0...nrpola-1] - jak zaznaczyć "część" stringa, skoro to jest tablica?
liczba1 = atoi(str[0...nrpola-1]
4. tak samo z drugą liczbą
5. dalej jest już łatwo
- Undre
- Użytkownik
- Posty: 1430
- Rejestracja: 15 lis 2004, o 02:05
- Płeć: Mężczyzna
- Lokalizacja: UĆ
- Podziękował: 3 razy
- Pomógł: 92 razy
proste pytanie z programowania w c
Opcji jest imo wiele, zależy na które konsekwencje której opcji chcesz przystać.
Możesz całe wejście dać od razu do tablicy, ale będziesz musiał babrać się potem na tej tablicy - sam już wyczuwasz problem wykrojenia podłańcucha reprezentującego liczbę z całości. Możesz równie dobrze lecieć znak po znaku, co z kolei oznacza babranie się ze zczytywaniem liczb - np pobieram znak, sprawdzam czy isdigit daje true, jeżeli tak, to mogę to np zczytywać do jakiejś tablicy aż do napotkania symbolu o isdigit=false. Może nawet do tablicy dwuwymiarowej, gdzie na każdą liczbę przypadać będzie wiersz. W sumie analogicznie można też analizować całość po zczytaniu jej do tablicy tak jak chcesz, chociaż nie wiem po co - jak już zczytasz co chcesz, ta tablica i tak ci po nic.
Znowuż pytanie, na które ciężko odpowiedzieć - ok, męczyłem się bóg wie ile czasu, wyciągnąłem podłańcuchy reprezentujące liczby z łańcucha głównego - jak teraz zorientować się co z czym wymnożyć ? Jeżeli program przyjmuje tylko i wyłącznie zapis typu a*b*c*...*z gdzie na każdą literę przypada dowolnej długości liczba, to wystarczy podłańcuchy wymnożyć - sytuacja bezproblemowa .... aczklowiek jeśli jednak można by też dodawać liczby, musiałbyś dodatkowo pilnować kolejności działań - cmentarz.
Możesz całe wejście dać od razu do tablicy, ale będziesz musiał babrać się potem na tej tablicy - sam już wyczuwasz problem wykrojenia podłańcucha reprezentującego liczbę z całości. Możesz równie dobrze lecieć znak po znaku, co z kolei oznacza babranie się ze zczytywaniem liczb - np pobieram znak, sprawdzam czy isdigit daje true, jeżeli tak, to mogę to np zczytywać do jakiejś tablicy aż do napotkania symbolu o isdigit=false. Może nawet do tablicy dwuwymiarowej, gdzie na każdą liczbę przypadać będzie wiersz. W sumie analogicznie można też analizować całość po zczytaniu jej do tablicy tak jak chcesz, chociaż nie wiem po co - jak już zczytasz co chcesz, ta tablica i tak ci po nic.
Znowuż pytanie, na które ciężko odpowiedzieć - ok, męczyłem się bóg wie ile czasu, wyciągnąłem podłańcuchy reprezentujące liczby z łańcucha głównego - jak teraz zorientować się co z czym wymnożyć ? Jeżeli program przyjmuje tylko i wyłącznie zapis typu a*b*c*...*z gdzie na każdą literę przypada dowolnej długości liczba, to wystarczy podłańcuchy wymnożyć - sytuacja bezproblemowa .... aczklowiek jeśli jednak można by też dodawać liczby, musiałbyś dodatkowo pilnować kolejności działań - cmentarz.
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
proste pytanie z programowania w c
Stworzylem przykladowy kod dla wczytania pojedynczego 'zakupu':
Jak widac troche roboty jest :/ Jednak warto zauwazyc, ze wprowadzenie liczby zmiennoprzecinkowej juz bardziej gmatwa sprawe. Aby ten kod i dzialal nalezy jeszcze wprowadzic petelke POZDRO
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#define n 50
int main()
{
char ciag[n],kwota[n],sztuk[n];
int stan=1,aktualny=0;
int aktualny_s=0,aktualny_k=0;
int l_kwota,l_sztuk;
memset(ciag,0,n);
memset(kwota,0,n);
memset(sztuk,0,n);
fgets(ciag,n,stdin);
l_kwota=1;l_sztuk=1;
while(stan!=0 && stan!=-1)
{
if( ciag[aktualny]>='0' && ciag[aktualny]<='9' )
{
if(stan==1)
{
kwota[aktualny_k]=ciag[aktualny];
aktualny_k++;
} else
if(stan==2)
{
sztuk[aktualny_s]=ciag[aktualny];
aktualny_s++;
}
} else
if( ciag[aktualny]=='*')
stan=2;
else
if( ciag[aktualny]==10)
stan=0;
else stan=-1;
aktualny++;
}
if(stan==-1)
{
printf("zle dane!");
getch();
return 0;
} else
if(stan==0)
{
l_kwota=atoi(kwota);
l_sztuk=atoi(sztuk);
printf("\nCiag:%s\nKwota:%d,Sztuk:%d\nIloczyn:%d\n",ciag,l_kwota,l_sztuk,l_kwota*l_sztuk);
}
getch();
return 0;
}
-
- Użytkownik
- Posty: 474
- Rejestracja: 22 paź 2007, o 20:55
- Płeć: Mężczyzna
- Lokalizacja: Gliwice
- Podziękował: 416 razy
- Pomógł: 2 razy
proste pytanie z programowania w c
memset(ciag,0,n); line 12, message: implicit declaration of function 'int memset(...)'
getch(); line 47, message: implicit declaration of function 'int getch(...)'
co to są za funkcje memset i fgets?
reszte kodu przeanalizowalem i mysle, ze zrozumialem , dzieki!
ps. jak zrobić tę zamianę groszy na złotówki w moim poprzednim kodzie?
pozdrawiam!
getch(); line 47, message: implicit declaration of function 'int getch(...)'
co to są za funkcje memset i fgets?
reszte kodu przeanalizowalem i mysle, ze zrozumialem , dzieki!
ps. jak zrobić tę zamianę groszy na złotówki w moim poprzednim kodzie?
pozdrawiam!
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
proste pytanie z programowania w c
Rzeczywscie. Do memset potrzebny jest naglowek:
A getch to zapewne
Ale zamiast niego mozesz uzyc
jak dzialasz pod windowsem. POZDRO
Kod: Zaznacz cały
#include <string.h>
Kod: Zaznacz cały
#include <conio.h>
Kod: Zaznacz cały
system("pause");
-
- Użytkownik
- Posty: 6607
- Rejestracja: 16 sty 2007, o 19:42
- Płeć: Mężczyzna
- Podziękował: 119 razy
- Pomógł: 1823 razy
proste pytanie z programowania w c
Program do zamiany groszy na zlote:
POZDRO
Kod: Zaznacz cały
#include <stdio.h>
int main()
{
int gr;
printf("Podaj grosze: ");
scanf("%d", &gr);
printf("
%d groszy, to: %.2f zlotych.
",gr,(float)gr/100);
getch();
return 0;
}