Sistemi di Calcolo

Corso di Laurea in Ingegneria Informatica e Automatica

Home | Avvisi | Diario Lezioni | Esercitazioni | Esami | Materiale Didattico | Valutazioni Studenti | Lezioni di Camil Demetrescu |

Palestra P3: preparazione per l’esercitazione T3

Esercizio 1

Si traduca in IA32 la seguente funzione che inizializza una lista collegata vuota:

e1.h

#ifndef __NODE_T__
#define __NODE_T__

typedef struct node_t {    // base
    short elem;            // offset: 0 |xx..|   (base)
    struct node_t *next;   // offset: 4 |xxxx|  4(base)
} node_t;                  // sizeof: 8

void list_new(node_t **l);
int  list_new_from_buffer(node_t **l, short* buf, int n);
void list_delete(node_t **l);
int  list_add_first(node_t **l, short elem);
int  list_sum(const node_t *l);

#endif

e1.c

#include <stdlib.h>
#include "e1.h"

void list_new(node_t **l) {
    *l = NULL;
}

Esercizio 2

Si traduca in IA32 la seguente funzione che calcola la somma degli elementi di una lista collegata:

e1.h

#ifndef __NODE_T__
#define __NODE_T__

typedef struct node_t {    // base
    short elem;            // offset: 0 |xx..|   (base)
    struct node_t *next;   // offset: 4 |xxxx|  4(base)
} node_t;                  // sizeof: 8

void list_new(node_t **l);
int  list_new_from_buffer(node_t **l, short* buf, int n);
void list_delete(node_t **l);
int  list_add_first(node_t **l, short elem);
int  list_sum(const node_t *l);

#endif

e2.c:

#include <stdlib.h>
#include "e2.h"

int list_sum(const node_t *p) {
    int s = 0;
    for (; p!=NULL; p=p->next)
        s += p->elem;
    return s;
}
Esercizio 3

Si traduca in IA32 la seguente funzione che fonde un array ordinato a di size na con un altro array ordinato b di size ´nb scrivendo il risultato della fusione nell'array c di size almeno (na+nb`).

e3.c

void merge(const int* a, const int* b, int* c, int na, int nb) {
    int i=0, j=0, k=0;
    while(i<na && j<nb)
        if (a[i]<=b[j]) c[k++] = a[i++];
        else            c[k++] = b[j++];
    while(i<na) c[k++] = a[i++];
    while(j<nb) c[k++] = b[j++];
}

Codice e soluzioni