TwojePC.pl © 2001 - 2024
|
|
A R C H I W A L N A W I A D O M O Ś Ć |
|
|
|
[Ansi C] Pomozcie rozgryzc kod ;) , Adamusss 23/10/06 00:14 Witam
Nie potrafie rozgryc kilku linijek z ponizszego kodu (stos):
------------
stos.h
typedef struct
{
float v[50];
int top;
}Stack ;
void push(Stack *S, float val);
int pop(Stack *S);
void init(Stack *S);
int full(Stack *S);
void wyswietl(Stack *S);
-----
stos.c
#include<stdio.h>
#include <stos2.h>
int push(Stack *S, float val)
{
S->v[ S->top ] = val;
(S->top)++;
}
int pop(Stack *S)
{
(S->top)--;
return (S->v[S->top]);
}
void init(Stack *S)
{
S->top = 0;
}
int full(Stack *S)
{
return (S->top >= 50);
}
void wyswietl(Stack *S)
{
int i;
printf("Elementy stosu: ");
for (i=0;i<S->top;i++)
{
printf("%g ",S->v[i]);
}
printf("\n");
}
void empty(Stack *S)
{
if (S->top == 0)
printf("Stos jest pusty.\n\n\n");
}
--------
nie rozumiem :
a) S->v[ S->top ] = val;
wskaznik S jest skladowa tablicy v, ktora to sklada sie ze [S->top]..nie,nie za bardzo zamotane ;) moze mi to ktos wyjasnic ?
b) return (S->v[S->top]);
po co return?
c) printf("%g " ....)
co dokladnie oznaczaa %g ? czytalem manuale ale dalej nie rozumiem funkcji tego przelacznika :\
prosze pomozcie bo juz wymiekam powoli :\
z gory dziekuje
adam- Pomogę , Conroy 23/10/06 00:31
a)
Top wskazuje na wierzchołek stosu. S->Top wskazuje na wierzchołek stosu na którym wywołałeś sobie push (zauważ, że to S jest przekazywane jako parametr funkcji). S to ten stos. Czyli odłozenie czegoś na stos, to położenie elementu na jego wierzchołku. Stos składa się z 50 el. tablicy elementów float oznaczonych zmienną v. Czyli odłożenie czegoś na stos to zapisanie do tej tablicy na pole o indeksie Top jakiejś wartości. Czyli dla konkretnego stosu S->v (odwolujemy sie do jego tablicy wartosci) [S->Top] (do tej tablicy piszemy na pierwsze wolne pole) =val (daną wartość).
b)
Po to return bo zdejmujesz coś ze stosu, chcesz dostać na zewnątrz wartość która tam była odłożona - musisz ją zwrócić.
c)
Napewno obcina kończące zera które wypisałoby %f.http://flickr.com/photos/myhacien
da - może jeszcze ja , Luk 23/10/06 02:31
jeśli by nie było zrozumiałe, bo przede wszystkim - i to chyba wystarczy - trzeba zrozumieć czym jest S, a
S jest wskaźnikiem na obiekt, który posiada takie pola jak tablica v przechwoująca wartości stosu, oraz pole top z numerkiem 'najwyższego' elementu na stosie;
ad a) S->v[ S->top ] = val;
po pierwsze najpierw pobierana jest tutaj wartość z pola top obiektu wskazywanego przez S, czyli to co w nawiasie [S->top], a wartość tego jest po prostu indeksem tej tablicy v ( gdyby to była metoda w C++ to v-> moża by w ogóle pominąć, bo odwołujesz się do jednego obiektu);
choć generalnie jest to kiepski kod, bo nie ma żadnej kontroli przepełnienia stosu(powinna być druga zmienna np.max, określająca wielkość tablicy v), podobnie przy zmieniejszaniu stosu nie jest nawet sprawdzane czy nie jest on już pusty... ale mniejsza z tym, rozumiem, że to tylko 'szkolny' kod
ad c) to polecam tą stronę http://www.cplusplus.com/ref/cstdio/printf.html - A tak w ogóle... , Umek 24/10/06 17:36
to burdel w tym kodzie IMHO, malo kodu a już burdel) :-)
Push i Pop powinny badac czy stos jest Empty full bo tak to się zaraz wypierniczy. Z kolei Empty i Full powinny zachowywac się tak samo (zwracac ten sam rodzaj wartości i konsekwentniej - informowac lub nie o stanie stosu stosownym komunikatem.
Ktoś tu niedawno dziwił się liczbą błedów w win, a tu proszę - mało kodu i już... bałagan. :-)
Pzdr. |
|
|
|
|
All rights reserved ® Copyright and Design 2001-2024, TwojePC.PL |
|
|
|
|