• Non ci sono risultati.

1. CORSO di LAUREA in INGEGNERIA delle TELECOMUNICAZIONI

N/A
N/A
Protected

Academic year: 2021

Condividi "1. CORSO di LAUREA in INGEGNERIA delle TELECOMUNICAZIONI"

Copied!
1
0
0

Testo completo

(1)

ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 1/2/2001 - C++

1. La gestione dei ricoveri in una clinica è basata su un criterio di priorità. Ad ogni paziente in lista di attesa è assegnata un priorità e la scelta di chi ricoverare viene effettuata selezionando, fra quelli aventi priorità più alta, coloro che sono in attesa da più tempo. La lista di attesa è rappresentabile mediante una lista doppia i cui elementi contengono un campo nome (stringa di al più 30 caratteri) e un campo intero maggiore di zero che rappresenta la priorità. Le possibili operazioni sono:

attesa(): costruttore che crea una lista vuota;

inserimento(name, p): inserisce un nuovo paziente di nome name e priorità p nella lista di attesa. Il nuovo paziente deve essere inserito opportunamente tenendo conto della priorità e dell’ordine temporale di inserimento nella lista;

ricovero(): se la lista non è vuota, elimina dalla lista il paziente da ricoverare e ne stampa il nome sul monitor restituendo T, altrimenti restituisce F;

~attesa(): distruttore che dealloca la lista di attesa.

2. Un file chiamato elenco.dat contiene per ciascuna riga un valore booleano, una stringa e un valore intero. Scrivere una funzione ok = cerca(n) che stampa sul monitor le stringhe del file che hanno sulla stessa riga il valore booleano uguale a T e il valore intero superiore a n. Se almeno una stringa viene trovata, la funzione restituisce T, altrimenti restituisce F.

3. Si scriva una funzione ok=verifica(s1, s2) che riceve in ingresso due stringhe di lunghezza qualsiasi. La funzione controlla se le lunghezze delle due stringhe sono l’una multipla dell’altra e in questo caso restituisce T altrimenti restituisce F (la funzione non deve far uso di funzioni della libreria string.h).

4. Data la seguente mappa di Karnaugh si determini il valore delle uscite non specificate in modo da ottenere la forma minima ottimale. Si disegni infine il circuito corrispondente.

AB 00 01 11 10 C

0 1 - 1

1 1 - -

12 9 9 3

1.

Risultati disponibili all’indirizzo: http://bonda.cnuce.cnr.it/Documentation/Esame_Simoncini/Risultati.html

(2)

struct elem { char* nome;

int priorità;

elem* next;

elem * prec; } enum bool {F, T};

class attesa { elem* l;

public:

attesa() {l=0};

void inserimento (char* nome, int p);

bool ricovero ();

~attesa();

}

//attesa.cc

#include <iostream.h>

#include <string.h>

#include "attesa.h"

void attesa::inserimento(char* nome, int p) {

elem aux, np;

if (p<=0) { cout<< “la priorità deve essere maggiore di zero\n“;

return; } new elem np ; np->priorità = p;

strcpy (nome, np->name);

if (l == 0) { // inserimento in lista vuota

np->next =0;

np ->prec = 0;

l=np;

return;

} aux =l;

if(aux->priorità < p) //inserimento in testa alla lista {

aux->prec=np;

np->next=aux, np->prec=0 ; l=np ;

return ;

(3)

}

while ((aux ->next !=0) && (aux->next ->priorità >= p)) aux = aux->next;

if (aux->next ->priorità < p) // inserimento all’interno della lista {

np ->next = aux ->next;

np -> prec = aux;

aux ->next = np ;

aux->next->prec = np ; }

else{ // inserimento in coda alla lista

aux ->next =np ; np -> prec = aux ; np >next = 0 ; }

}

bool attesa::ricovero () {

if (l==0) return F;

cout << l->nome << “\n”;

l=l->next;

delete l;

return T;

}

attesa::~attesa() { elem* aux=l;

while (aux!=0) { l=l->next;

delete aux;

aux = l;

} }

(4)

#include <fstream.h>

bool cerca(int n) {

fstream f;

int num;

bool vb;

char *stringa;

bool controllo=F;

f.open (“elenco.dat”, ios::in);

while(f>>vb>>stringa>>num) {

if (vb && (num>n)) {

cout<< stringa <<”\n”;

controllo = T;

} }

f.close();

return controllo;

}

(5)

3.

enum bool {F, T};

bool verifica (char s1[N], char s2[N]) {

int i=0;

int j =0;

while((s1[i]!=0) && (s2[i]!=0)) i++;

if (s1[i] == s2[i]) return T;

if (s1[i]==0) { j=i,

while (s2[j] !=0) j++;

} else {

j=i,

while (s1[j] !=0) j++;

}

if ((j)%(i) == 0) return T;

return F;

}

4.

AB 00 01 11 10

C

0 1 1

1 1 1

_ _

CB + CB

Riferimenti

Documenti correlati

Un file chiamato dati.txt contiene per ciascuna riga una stringa di lunghezza massima 24 caratteri che rappresenta il nome di uno studente e un valore intero che

Un parcheggio per automobili è rappresentabile mediante un array P a valori binari dove ciascun elemento dell’array rappresenta un posto auto nel parcheggio e

Si scriva una funzione booleana scegli_sala(int n, int p) che cerca nel file la sala che contenga almeno n persone e il cui costo di affitto sia minimo (comunque inferiore a

Si scriva una funzione booleana controlla(G) che riceve in ingresso la matrice e restituisce True se per ogni i (i&lt;=0&lt;N-1) la somma degli elementi della

Scrivere una funzione cerca_estremi() che legge il file e stampa sul monitor il numero più grande e quello più piccolo contenuti in esso.. Si scriva una funzione rendi_pari(l)

Si scriva una funzione raggruppa() che costruisce un nuovo file F3.dat che contiene tutti i valori pari contenuti in F1.dat e F2.dat e, a seguire, tutti i

Dati due array B1 e B2 di dimensione N a valori booleani, si scriva una funzione booleana unione(B1, B2) che riceve in ingresso i due array e costruisce un nuovo array B3

Scrivere una funzione int missing() che confronta i due file e restituisce il numero di caratteri omessi in T2.txt.. Sia data una lista l semplice a valori interi composta