Salve, molto chiaro il video grazie. Mi chiedevo se sul canale ci fosse anche qualche cosa sulla chiamata di funzione, sto studiando per Architettura degli elaboratori e non riesco bene a capire i vari passaggi ed effetti che vengono innescati quando chiamo una funzione nella CPU.
Ciao e grazie! Un video dedicato esclusivamente alle chiamate a funzione non lo abbiamo. Tuttavia, potresti trovare qualche informazione legata a tale argomento nella playlist sul Sistema Operativo o in quella sul Linguaggio C :)
Quando nel minuito 6:20 dici che potremmo utilizzare anche metodi diversi e per fare l'esempio fai partire top=0, top==LIMIT, etc etc, non dovresti anche cambiare l'#define EMPTY (-1) a #define EMPTY (0)?
Ciao, potresti rispondere ad un mio dubbio. la traccia di un esame di informatica, che devo commentare lunedi, mi ha chiesto di stampare il terzo elemento di uno stack, fra le altre cose. Io l'ho stampato, mediante una funzione, che dopo aver verificato se ci sono almeno 3 elementi, me lo stampa così: stack->parole[stack->cima - 2] , dove parole è l'array, stack è il puntatore, e cima è la cima dello stack. E' sbagliato stampare quell'elemento puntando direttamente ad esso in questo modo [stack->cima - 2]? o per stampare l'elemento, avrei dovuto fare pop della cima due volte, finchè non arrivavo al terzo elemento, e solo li, potevo stamparlo in quanto esso era la cima dello stack. Mi dispiace per il modo confusionario col quale mi sono espresso. ma il sunto, è: stampare il terzo elemento della pila, è manipolare la pila? oppure la stampa non prevede alcuna manipolazione degli elementi, e quindi la mia funzione è giusta? un grazie di cuore se mi risponderete.
Ciao, mi verrebbe da dire che la tua soluzione non è corretta. Il punto è che in C le puoi implementare come un array, ma lo Stack, inteso come struttura dati teorica, segue il criterio LIFO e permette solo operazioni di PUSH e POP. La stampa è come se fosse una operazione esterna alla struttura dati che avviene a seguito della POP dell’elemento di interesse. L’idea quindi è: faccio la POP tre volte ed alla terza volta ho ottenuto dalla pila l’elemento che mi interessa. A quel punto su tale elemento posso fare tutte le operazioni che voglio, ad esempio stamparne il valore.
@@GetTheCookie grazie della risposta. mi sto applicando molto su questo problema. ma fino a questo momento, ho trovato solo persone che facevano pop due volte, e poi stampavano direttamente l'elemento presente sulla cima dello stack. Se faccio pop la terza volta, come faccio a stampare l'elemento che ho "estratto"? davvero non riesco ad arrivarci, e sono abbastanza frustrato per la cosa.
Perdona se rispondiamo solo ora, ma UA-cam ha deciso di mettere la tua ultima risposta in spam :( Quello che chiedi dipende principalmente da come viene implementata la funzione POP della pila che stai usando. Nel codice scritto in questo video (e nella maggior parte delle implementazioni che puoi trovare) la funzione POP, a seguito della sua chiamata, modifica lo stato interno del puntatore (top) e restituisce l'ultimo elemento. Proprio perché tale elemento viene "ritornato" dalla funzione, io posso salvarmelo da qualche parte e utilizzarlo come meglio credo, ad esempio stampandone il contenuto.
@@GetTheCookie si vede la semplicità con cui spieghi ma in che modo studiavi? Ps.Su questo argomento c'è anche da dire come funziona lo stack pointer e il frame pointer.
Il metodo di studio che personalmente uso dipende molto dal corso a cui ci si riferisce. In linea di principio mi impegno il più possibile a capire le cose fino alla "giusta profondità". Per me capire i concetti è la parte fondamentale. Poi sopra la comprensione (purtroppo) si deve fare il classico studio accademico che permette di affrontare al meglio gli esami.
mamma mia da quanto tempo, bentornati!!
Salve, molto chiaro il video grazie. Mi chiedevo se sul canale ci fosse anche qualche cosa sulla chiamata di funzione, sto studiando per Architettura degli elaboratori e non riesco bene a capire i vari passaggi ed effetti che vengono innescati quando chiamo una funzione nella CPU.
Ciao e grazie! Un video dedicato esclusivamente alle chiamate a funzione non lo abbiamo.
Tuttavia, potresti trovare qualche informazione legata a tale argomento nella playlist sul Sistema Operativo o in quella sul Linguaggio C :)
Quando nel minuito 6:20 dici che potremmo utilizzare anche metodi diversi e per fare l'esempio fai partire top=0, top==LIMIT, etc etc, non dovresti anche cambiare l'#define EMPTY (-1) a #define EMPTY (0)?
Ciao, potresti rispondere ad un mio dubbio. la traccia di un esame di informatica, che devo commentare lunedi, mi ha chiesto di stampare il terzo elemento di uno stack, fra le altre cose. Io l'ho stampato, mediante una funzione, che dopo aver verificato se ci sono almeno 3 elementi, me lo stampa così: stack->parole[stack->cima - 2] , dove parole è l'array, stack è il puntatore, e cima è la cima dello stack. E' sbagliato stampare quell'elemento puntando direttamente ad esso in questo modo [stack->cima - 2]? o per stampare l'elemento, avrei dovuto fare pop della cima due volte, finchè non arrivavo al terzo elemento, e solo li, potevo stamparlo in quanto esso era la cima dello stack. Mi dispiace per il modo confusionario col quale mi sono espresso. ma il sunto, è: stampare il terzo elemento della pila, è manipolare la pila? oppure la stampa non prevede alcuna manipolazione degli elementi, e quindi la mia funzione è giusta? un grazie di cuore se mi risponderete.
Ciao, mi verrebbe da dire che la tua soluzione non è corretta.
Il punto è che in C le puoi implementare come un array, ma lo Stack, inteso come struttura dati teorica, segue il criterio LIFO e permette solo operazioni di PUSH e POP.
La stampa è come se fosse una operazione esterna alla struttura dati che avviene a seguito della POP dell’elemento di interesse.
L’idea quindi è: faccio la POP tre volte ed alla terza volta ho ottenuto dalla pila l’elemento che mi interessa. A quel punto su tale elemento posso fare tutte le operazioni che voglio, ad esempio stamparne il valore.
@@GetTheCookie grazie della risposta. mi sto applicando molto su questo problema. ma fino a questo momento, ho trovato solo persone che facevano pop due volte, e poi stampavano direttamente l'elemento presente sulla cima dello stack. Se faccio pop la terza volta, come faccio a stampare l'elemento che ho "estratto"? davvero non riesco ad arrivarci, e sono abbastanza frustrato per la cosa.
Perdona se rispondiamo solo ora, ma UA-cam ha deciso di mettere la tua ultima risposta in spam :(
Quello che chiedi dipende principalmente da come viene implementata la funzione POP della pila che stai usando. Nel codice scritto in questo video (e nella maggior parte delle implementazioni che puoi trovare) la funzione POP, a seguito della sua chiamata, modifica lo stato interno del puntatore (top) e restituisce l'ultimo elemento.
Proprio perché tale elemento viene "ritornato" dalla funzione, io posso salvarmelo da qualche parte e utilizzarlo come meglio credo, ad esempio stampandone il contenuto.
Grazie
prendevi 30 agli esami?
Se darti la risposta serve a dare più credito ai vari video fatti allora si :)
[Andrea] Si tutti 30 Christian è un secchione
@@GetTheCookie si vede la semplicità con cui spieghi ma in che modo studiavi? Ps.Su questo argomento c'è anche da dire come funziona lo stack pointer e il frame pointer.
Il metodo di studio che personalmente uso dipende molto dal corso a cui ci si riferisce. In linea di principio mi impegno il più possibile a capire le cose fino alla "giusta profondità". Per me capire i concetti è la parte fondamentale. Poi sopra la comprensione (purtroppo) si deve fare il classico studio accademico che permette di affrontare al meglio gli esami.
@@GetTheCookie potreste fare un video dove provate un esercizio con liste concatenate e stack