witam, nie mam pojecia jak zrobic ten program,trafil mi sie cierzki koles z infy i nic nie kminie z c. czy moglby mi ktos napisac ten program, byl bym bardzo wdzieczny
Proszę napisać prosty kalkulator pracujący w Odwrotnej Notacji Polskiej (RPN - Reverse Polish Notation) wykorzystując implementację stosu ze strony: http://zts.ita.pwr.wroc.pl/dydaktyka/fi ... 38/stos2.c Kalkulator może pracować wg następującego algorytmu:
Wczytaj ciąg znaków ze standardowego wejścia
Jeśli jest to liczba - umieść ją na stosie i idź do 1
Jeśli jest to operator "+" - skocz do procedury "dodaj"
Jeśli jest to operator "-" - ...
...
Procedura dodaj:
Pobierz argument 1 ze stosu
Pobierz argument 2 ze stosu
Dodaj do siebie argumenty
Umieść wynik na stosie
Należy zaimplementować następujące operacje:
+, -, *, / - jak operatory w C
round, floor, ceil - jak odpowiadające im w C funkcje
. (kropka), print - wyświetla aktualną wartość ze stosu
Operacje powinny być wykonywane na liczbach typu double.
Uwaga - dostęp do stosu można realizować TYLKO za pomocą funkcji pop() oraz push() (Na kursie "Procesory Sygnałowe" najprawdopodobniej spotkacie się ze sprzętowymi implementacjami stosu, w których jest to jedyna metoda dostępu). Absolutnie niedozwolone jest bezpośrednie odwoływanie się do tablicy z danymi!
problem z programem w C
http://rtfm.killfile.pl/#praca_domowa
Jak się sam nie nauczysz pisać to z następnymi zadaniami będzie jeszcze gorzej. Spróbuj sam napisać, Nas możesz co najwyżej o jakąś radę poprosić itp. ale nie o odrobienie za Ciebie zadania.
Jak się sam nie nauczysz pisać to z następnymi zadaniami będzie jeszcze gorzej. Spróbuj sam napisać, Nas możesz co najwyżej o jakąś radę poprosić itp. ale nie o odrobienie za Ciebie zadania.
Odwrotna notacja polska
Implementacja stosu
Jak bedziesz mial problemy konkretne to pytaj, jak napisal Kaka' pracy domowej nie odrabiamy( ale jak napiszesz chociaż troche to ktoś na pewno Ci pomoże )
PS. nie bijcie za fedore - siedze wlasnie na laboratoriach z sieci
Implementacja stosu
Jak bedziesz mial problemy konkretne to pytaj, jak napisal Kaka' pracy domowej nie odrabiamy( ale jak napiszesz chociaż troche to ktoś na pewno Ci pomoże )
PS. nie bijcie za fedore - siedze wlasnie na laboratoriach z sieci
Wybacz, ale Twoje lenistwo przekroczyło już szczyty Himalajów. Nie wiem, czy jesteś studentem, czy uczniem jakiejś dziwnej szkółki - zresztą nie ma to znaczenia i tak daleko nie zajdziesz z takim podejściem. Zapewne ten Wasz gostek podał Wam jakąś literaturę przedmiotu, a Tobie nawet nie zachciało się tam zajrzeć. Gdybyś poświęcił te kilka godzin na przejrzenie tych książek to miałbyś to zadanie podane na talerzu. Zaopatrz się w biblię wszystkich programistów w C: "Brian W. Kernighan Dennis M. Ritchie Język ANSI C" i pooglądaj sobie strony od 110 w górę. A właściwie zapoznaj się z całą książką na pewno Ci to nie zaszkodzi.
-
- Posty: 2
- Rejestracja: 28 marca 2007, 12:15
problem z programikiem, co jst nie tak??
witam, w odpowiedzi na sluszne zarzuty lenistwa skierowane do mojej osoby napisalem ten program, lecz mi nie dzial. pisze w nadzieji iz moje poprzednie beszczelne i grobianskie zachowanie nie zniecheci was do udzielenie mi pomocy.
zadanie brzmialo
Proszę napisać prosty kalkulator pracujący w Odwrotnej Notacji Polskiej (RPN - Reverse Polish Notation) wykorzystując implementację stosu ze strony: http://zts.ita.pwr.wroc.pl/dydaktyka/fi ... 38/stos2.c Kalkulator może pracować wg następującego algorytmu:
1. Wczytaj ciąg znaków ze standardowego wejścia
2. Jeśli jest to liczba - umieść ją na stosie i idź do 1
3. Jeśli jest to operator "+" - skocz do procedury "dodaj"
4. Jeśli jest to operator "-" - ...
5. ...
Procedura dodaj:
1. Pobierz argument 1 ze stosu
2. Pobierz argument 2 ze stosu
3. Dodaj do siebie argumenty
4. Umieść wynik na stosie
Należy zaimplementować następujące operacje:
* +, -, *, / - jak operatory w C
* round, floor, ceil - jak odpowiadające im w C funkcje
* . (kropka), print - wyświetla aktualną wartość ze stosu
Operacje powinny być wykonywane na liczbach typu double.
moje dziwlo wyglada nastepujaco:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct stack {
void *mem;
int el_size;
int stack_ptr;
int stack_max;
};
typedef struct stack STOS;
STOS nowy_stos (int count, int el_size) {
STOS tmp;
tmp.mem = calloc (count, el_size);
tmp.stack_ptr = 0;
tmp.stack_max = count - 1;
tmp.el_size = el_size;
return tmp;
}
int push (STOS *stack, void *element) {
if (stack->stack_ptr <= stack->stack_max) {
memcpy ( stack->mem + stack->stack_ptr * stack->el_size,
element, stack->el_size);
stack->stack_ptr+=1;
return 0;
}
return 1;
}
int pop (STOS *stack, void *element) {
if (stack->stack_ptr > 0) {
stack->stack_ptr-=1;
memcpy ( element,
stack->mem + stack->stack_ptr * stack->el_size,
stack->el_size);
return 0;
}
return 1;
}
int main(void)
{
int d;
do
{
double a, b, c;
char z;
STOS s;
s = nowy_stos(4, sizeof(int));
if (s.mem == NULL)
{
fprintf (stderr, "Klopot z alokacja pamieci");
exit(1);
}
a=0;
b=0;
printf("podaj b:");
scanf("%d", &a);
push (&s, &a);
printf("podaj a:");
scanf("%d", &b);
push (&s, &b);
printf("znak dzialania:");
z=getchar();
scanf("%c", &z);
pop(&s, &a);
pop(&s, &b);
switch(z)
{
case '+' : c=a+b;
break;
case '-' : c=a-b;
break;
case '*' : c=a*b;
break;
case '/' : c=a/b;
break;
default: break;
}
printf("%d\n", c);
return 0;
printf("liczysz dalej?? (1/0)? ");
scanf("%d", &d);
}
while (d==1);
}
czty to jest dobrze?? z gory dzieki za pomoc
zadanie brzmialo
Proszę napisać prosty kalkulator pracujący w Odwrotnej Notacji Polskiej (RPN - Reverse Polish Notation) wykorzystując implementację stosu ze strony: http://zts.ita.pwr.wroc.pl/dydaktyka/fi ... 38/stos2.c Kalkulator może pracować wg następującego algorytmu:
1. Wczytaj ciąg znaków ze standardowego wejścia
2. Jeśli jest to liczba - umieść ją na stosie i idź do 1
3. Jeśli jest to operator "+" - skocz do procedury "dodaj"
4. Jeśli jest to operator "-" - ...
5. ...
Procedura dodaj:
1. Pobierz argument 1 ze stosu
2. Pobierz argument 2 ze stosu
3. Dodaj do siebie argumenty
4. Umieść wynik na stosie
Należy zaimplementować następujące operacje:
* +, -, *, / - jak operatory w C
* round, floor, ceil - jak odpowiadające im w C funkcje
* . (kropka), print - wyświetla aktualną wartość ze stosu
Operacje powinny być wykonywane na liczbach typu double.
moje dziwlo wyglada nastepujaco:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct stack {
void *mem;
int el_size;
int stack_ptr;
int stack_max;
};
typedef struct stack STOS;
STOS nowy_stos (int count, int el_size) {
STOS tmp;
tmp.mem = calloc (count, el_size);
tmp.stack_ptr = 0;
tmp.stack_max = count - 1;
tmp.el_size = el_size;
return tmp;
}
int push (STOS *stack, void *element) {
if (stack->stack_ptr <= stack->stack_max) {
memcpy ( stack->mem + stack->stack_ptr * stack->el_size,
element, stack->el_size);
stack->stack_ptr+=1;
return 0;
}
return 1;
}
int pop (STOS *stack, void *element) {
if (stack->stack_ptr > 0) {
stack->stack_ptr-=1;
memcpy ( element,
stack->mem + stack->stack_ptr * stack->el_size,
stack->el_size);
return 0;
}
return 1;
}
int main(void)
{
int d;
do
{
double a, b, c;
char z;
STOS s;
s = nowy_stos(4, sizeof(int));
if (s.mem == NULL)
{
fprintf (stderr, "Klopot z alokacja pamieci");
exit(1);
}
a=0;
b=0;
printf("podaj b:");
scanf("%d", &a);
push (&s, &a);
printf("podaj a:");
scanf("%d", &b);
push (&s, &b);
printf("znak dzialania:");
z=getchar();
scanf("%c", &z);
pop(&s, &a);
pop(&s, &b);
switch(z)
{
case '+' : c=a+b;
break;
case '-' : c=a-b;
break;
case '*' : c=a*b;
break;
case '/' : c=a/b;
break;
default: break;
}
printf("%d\n", c);
return 0;
printf("liczysz dalej?? (1/0)? ");
scanf("%d", &d);
}
while (d==1);
}
czty to jest dobrze?? z gory dzieki za pomoc