• Non ci sono risultati.

Proglab 34–Verifica se il vettore A è contenuto in B

N/A
N/A
Protected

Academic year: 2021

Condividi "Proglab 34–Verifica se il vettore A è contenuto in B"

Copied!
1
0
0

Testo completo

(1)

Proglab 34–Verifica se il vettore A è contenuto in B

main chiama una funzione per leggere i vettori A e B di lunghezza n e m.

Poi main verifica se gli elementi di A sono tutti presenti in B.

Ad esempio, se A=[9, 7, 2] e B=[3, 2, 88, 9, 7, 5] la risposta è sì.

Se A=[33, 6, 7, 8, 2] la risposta è no.

#include <stdlib.h>

#include <stdio.h>

int leggiarray(int X[]);

main() {

int A[100], B[100], i, j, n, m, flag;

n = leggiarray(A);

m = leggiarray(B);

flag = 1;

for (i=0; i<n; i++) { flag = 0;

for (j=0; j<m; j++) { if (A[i] == B[j]) flag = 1;

}

if (flag == 0) {

printf ("\n\nA non e' contenuto in B\n\n");

break;

} }

if (flag == 1)

printf("\n\nl'array A e' contenuto in B\n\n");

system ("pause");

return(0);

}

(2)

Proglab 35 – Trova sottomatrice 3 x 3 somma max

Il programma costruisce una matrice n x m di numeri casuali tali che 0  A[i][j]  50. Poi la matrice viene stampata. Poi viene individuata la sottomatrice 3 x 3 la cui somma degli elementi sia massima. Tale sottomatrice viene stampata.

Ad esempio, se la matrice generata è:

3 1 2 1

1 8 7 9

4 7 8 7

2 7 1 5

vi sono quattro sottomatrici 3 x 3:

la somma degli elementi della prima vale 41 la somma della seconda vale 50

la somma della terza vale 45 la somma della quarta vale 59

per cui viene stampata la quarta sottomatrice.

(3)

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

#define MAX 100

void generamatrice(int A[MAX][MAX], int n, int m);

int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j);

void stampamatrice(int A[MAX][MAX], int n, int m);

main() {

int A[MAX][MAX], n, m, somma, sommamax, i, j, imax, jmax;

printf("numero di righe e di colonne: ");

scanf("%d %d", &n, &m);

generamatrice(A, n, m);

stampamatrice(A, n, m);

sommamax = 0;

imax = 0;

jmax = 0;

for (i=0; i<n-2; i++) { for (j=0; j<m-2; j++) {

somma = sommamatrice(A, n, m, i, j);

if (somma > sommamax) { sommamax = somma;

imax = i;

jmax = j;

} } }

printf ("\n\nla sottomatrice 3 x 3 massima:\n");

for (i=imax; i<imax+3; i++) { for (j=jmax; j<jmax+3; j++) printf("%4d", A[i][j]);

printf("\n");

}

system ("pause");

return(0);

}

(4)

void generamatrice(int A[MAX][MAX], int n, int m) { int i, j;

srand(time(NULL));

for (i=0; i<n; i++) for (j=0; j<m; j++)

A[i][j] = rand() % 50;

return;

}

void stampamatrice(int A[MAX][MAX], int n, int m) { int i, j;

for (i=0; i<n; i++) { for (j=0; j<m; j++)

printf("%4d", A[i][j]);

printf("\n");

}

return;

}

int sommamatrice(int A[MAX][MAX], int n, int m, int i, int j) { int s, h, k;

s = 0;

for (h=0; h<3; h++) for (k=0; k<3; k++) s = s+A[i+h][j+k];

return(s);

}

(5)

Proglab 38 – Inserisce una frase in una matrice

Inserire in un vettore una frase le cui parole sono separate da uno o più spazi. Inserire le parole, una per riga, in una matrice char e stamparla.

Ad esempio, se la frase è “mi piace l’estate” la matrice sarà:

mi piace l’estate

#include <stdlib.h>

#include <stdio.h>

void stampamatrice(char M[20][20], int n);

int main(void) {

char s[50], M[20][20];

int k=0, j=0, n=0;

printf("digita una stringa di caratteri: ");

scanf("%[^\n]", s);

while (s[k] != '\0') { j = 0;

while (s[k] != ' ' && s[k] != '\0') { M[n][j] = s[k];

j++;

k++;

}

M[n][j] = '\0';

while (s[k] == ' ') k++;

if (j > 0) n++;

}

stampamatrice(M, n);

system ("pause");

return(0); }

void stampamatrice(char M[20][20], int n) { int i;

for (i=0; i<n; i++)

printf("%s\n", &M[i][0]);

return; }

(6)

Proglab 40 – Converte stringa di cifre in numero

La funzione main legge una stringa di cifre comprese tra 0 e 9 e chiama una funzione che la converte nel numero intero corrispondente.

Ad esempio, se la stringa è s=”4723” viene stampato il numero 4723.

#include <stdlib.h>

#include <stdio.h>

#include <string.h>

int convert(char s[]);

int main(void) {

char s[10];

int n;

printf("digita un numero: ");

scanf("%s", s);

n = convert(s);

printf("il valore inserito e' %d\n", n);

system ("pause");

return(0);

}

int convert(char s[]) {

int k, p, c, n, i;

k = strlen(s);

n = 0;

p = 1;

for (i=k-1; i>=0; i--) { c = s[i] - 48;

n = n + c*p;

p = p*10;

}

return(n);

}

(7)

Proglab 43 – Selection sort applicato a una lista

Letta in input una lista di numeri interi stamparla e poi ordinarla utilizzando l’algoritmo selection sort. Stampare la lista ordinata.

IMPORTANTE: organizzare il programma in funzioni, non utilizzare array e liste ausiliarie, non introdurre variabili globali.

Esempio. Se la lista di partenza è:

55 -> 23 -> 9 -> 41 -> 89 -> 20 -> NULL la lista si trasforma in:

9 -> 20 -> 23 -> 41 -> 55 -> 89 -> NULL

#include <stdlib.h>

#include <stdio.h>

struct nodo *crealista(void);

void printlista(struct nodo *p);

void selectionsort(struct nodo *p);

void swap(int *a, int *b);

struct nodo { int dato;

struct nodo *next;

};

main() {

struct nodo *p;

p = crealista();

printlista(p);

selectionsort(p);

printlista(p);

system ("pause");

return(0);

}

(8)

void selectionsort(struct nodo *p) { struct nodo *q;

while (p != NULL) { q = p->next;

while (q != NULL) {

if (p->dato > q->dato)

swap(&p->dato, &q->dato);

q = q->next;

}

p = p->next;

}

return;

}

void swap(int *a, int *b) {

int c;

c = *a;

*a = *b;

*b = c;

return;

}

(9)

Proglab 44 –Lista contenente espressione algebrica

main chiama una funzione che crea una lista i cui nodi contengono tre campi: operando int, operatore char, *next puntatore.

La lista rappresenta un’espressione algebrica che viene stampata.

Poi main chiama una funzione che calcola il valore dell’espressione (supponiamo che gli operatori abbiano eguale priorità) e lo restituisce a main che provvede alla stampa. Il campo operatore dell’ultimo nodo contiene il carattere ‘=’.

Ad esempio, se viene digitato:

15 + 3 * 2 – 6 / 5 = viene creata la lista:

(15, +) --> (3, *) --> (2, -) -> (6, /) --> (5, =) --> NULL e viene fuori il risultato: 6

(10)

#include <stdlib.h>

#include <stdio.h>

struct nodo *crealista(void);

int calcola(struct nodo *p);

void printlista(struct nodo *p);

struct nodo { int operando;

char operatore;

struct nodo *next;

};

main () {

struct nodo *primo;

int valore;

primo = crealista();

printlista(primo);

valore = calcola(primo);

printf("%d\n", valore);

printf ("\n\n");

system ("pause");

return 0;

}

struct nodo *crealista(void) {

struct nodo *p, *primo = NULL, *ultimo;

printf("inserisci l'espressione: ");

do {

p = (struct nodo *) malloc(sizeof(struct nodo));

scanf("%d %c", &p->operando, &p->operatore);

p->next = NULL;

if (primo == NULL) primo = p;

else

ultimo->next = p;

ultimo = p;

} while (p->operatore != '=');

return(primo);

}

(11)

int calcola(struct nodo *p) {

int valore;

valore = p->operando;

while (p->operatore != '=') { if (p->operatore == '+')

valore = valore + p->next->operando;

else if (p->operatore == '-')

valore = valore - p->next->operando;

else if (p->operatore == '*')

valore = valore * p->next->operando;

else

valore = valore / p->next->operando;

p = p->next;

}

return(valore);

}

void printlista(struct nodo *p) {

printf ("\n\n");

while (p != NULL) {

printf("%d %c ", p->operando, p->operatore);

p = p->next;

}

return;

}

(12)

Proglab 46 – Aggancio di due liste

Letti in input n e m, costruire due liste di n ed m numeri interi casuali compresi tra 0 e 9 e stamparle. Agganciare la lista la cui media dei valori sia minore in coda a quella con la media dei valori maggiore. Stampare la lista.

IMPORTANTE: utilizzare una funzione per creare le liste, un’altra per stamparle, una terza per calcolare la media, un’altra per concatenare le due liste. Non utilizzare array e liste ausiliarie, non introdurre variabili globali.

Ad esempio, se la lista A è composta dai nodi:

8 -> 1 -> 5 -> 4 -> 4 -> NULL (media 22/5=4.4) e la lista B dai nodi:

4 -> 6 -> 2 -> 8 -> NULL (media 20/4=5.0) la lista A viene agganciata in coda a B ottenendo la lista:

4 -> 6 -> 2 -> 8 -> 8 -> 1 -> 5 -> 4 -> 4 -> NULL

(13)

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

void concatena(struct nodo *a, struct nodo *b);

float medialista(struct nodo *p);

struct nodo *crealista();

void printlista(struct nodo *p);

struct nodo { int dato;

struct nodo *next;

};

main() {

struct nodo *u, *v;

u = crealista();

printlista (u);

v = crealista();

printlista(v);

if (medialista(u) > medialista(v)) { concatena(u, v);

printlista(u);

} else {

concatena(v, u);

printlista(v);

}

system ("pause");

return(0);

}

float medialista(struct nodo *p) { int somma = 0, n = 0;

while (p != NULL) {

somma = somma + p->dato;

n++;

p = p->next;

}

return((float)somma/n);

}

(14)

void concatena(struct nodo *a, struct nodo *b) { struct nodo *p;

p = a;

while (p->next != NULL) { p = p->next;

}

p->next = b;

return;

}

struct nodo *crealista() {

struct nodo *p, *start, *last;

int i, n, x;

start = NULL;

srand (time (NULL));

printf("quanti nodi ha la lista ? ");

scanf("%d", &n);

for (i=0; i<n; i++){

p = (struct nodo *) malloc (sizeof (struct nodo));

if (i == 0) start = p;

if (i != 0)

last->next = p;

p->dato = rand()%10;

p->next = NULL;

last = p;

}

printf ("\n\n");

return(start);

}

void printlista(struct nodo *p) {

while (p != NULL) {

printf("%d --> ", p->dato);

p = p->next;

}

printf("NULL\n\n\n");

}

Riferimenti

Documenti correlati

Distretto Socio Sanitario - Ex Ospedale di Schio Via Camillo de Lellis, 1

nto risorgi- agioni delle ne fece: da garantire

74 M. 75 Concilio Vaticano II, cost.. pontificio, stabilendo una relazione intraecclesiale basata sul «modello del comando e dell’esecuzione dello stesso» 76 piuttosto che

I Dirigenti Scolastici delle scuole di destinazione del personale trasferito devono comunicare l’avvenuta assunzione di servizio all’Ufficio Scolastico Territoriale

economia, di seguito denominato elenco, al quale possono iscriversi i soggetti che svolgono, sulla base dei parametri definiti ai sensi dell’articolo 4, comma 1, una o più

La terra molisana infatti, ha regalato, con la costituzione della sezione di Isernia, la grande soddisfazione per la nostra Associazione di aver raggiunto le 100 Sezioni

In questi 6 anni il cantiere ha lanciato 8 nuovi modelli di barche a vela, introducendo la linea Grand Soleil Long Cruise, é entrato nel segmento motore con il

Planet-o è composta da circa 250 dischi di metallo sapientemente saldati artigianalmente mediante il processo di saldatura ad ottone.. Planet-o è un corpo che si illumina e