|
problem z programem w C
glodnyrules - 28-03-2007 12:16
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...php/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!
Kaka' - 28-03-2007 12:27
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.
chyl-o - 28-03-2007 12:49
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 ;)
ilr - 28-03-2007 19:18
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.
Wilku - 30-03-2007 20:08
Kernighan jest niezły, aczkolwiek nie jest najlepszą metodą do startu z programowaniem. Zadanie z C nie jest trudne. Spróbuj sknocić coś sam, pewno jakoś pomożemy. Btw. z kim masz kurs, w końcu jesteśmy z tej samej uczelni;>?
glodnyrules - 01-04-2007 01:43
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...php/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
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|