Esercizi di informatica per il 24-04-2018

#include <stdio.h>
#include <math.h>
#incluse "vettori.h"

void assoluto(int v1[], int v2[]) {
	int i;
	for (i=0; i<10; i++) 
		v2[i] = abs(v1[i]);
}

int main() {
	int a[10], b[10];
	LeggeValoriInteri(a, 10);
	assoluto(a, b);
	StampaValoriInteri(b, 10);
}
// costruire una procedura che permetta di spostare di s posti verso destra un blocco di n elementi collocati in una certa posizione iniziale p all'interno di un 
// array sufficientemente lungo. Per evitare la cancellazione degli elementi durante la copia si consiglia di iniziare la copia dei valori da destra verso sinistra
// mediante un ciclo for in decremento.
// programma fatto il 23.04.18

#include <stdio.h>
#include "vettori.h"

int vett1[20], s, n, p;

void leggegruppoint() {
	int i;
	printf("Inserisci %d numeri:\n", n);
	for (i=p; i<(n+p); i++)
		scanf("%d", &vett1[i]);
}

void spostamentonumeri() {
	int i;
	for (i=(p+s+n-1); i>=0; i--) {
		if(i<20)
			vett1[i]=vett1[i-s];	
	}
}

int main() {
	printf("Inserisci il numero di valori diversi da zero che si vogliono inserire sucessivamente (non piu' di 20): "); scanf("%d", &n);
	printf("Inserisci la posizione iniziale dei numeri (non maggiore di 20): "); scanf("%d", &p);
	leggegruppoint();
	printf("\nIl vettore e': \n");
	StampaValoriInteri(vett1, 20);
	printf("Inserici di quanto vuoi far spostare il blocco verso destra: "); scanf("%d", &s);
	spostamentonumeri();
	printf("\nIl vettore spostato e': \n");
	StampaValoriInteri(vett1, 20);
	return 0;
}

Calcolo numerico

Scrivere il metodo main della classe Main del progetto CalcoloNumerico in modo che calcoli:

  1. la derivata della funzione y=sin(x) in un punto x letto da tastiera e la visualizzi sullo schermo;
  2. la derivata della funzione Radice y=sqrt(4-x^2) in un punto x letto da tastiera e la visualizzi sullo schermo;
  3. l’integrale definito della funzione y = sqrt(4-x^2) da 0 a 1 e lo visualizzi sullo schermo.

La teoria sul calcolo numerico delle derivate è reperibile nella pagina:
https://liceocuneo.it/oddenino/informatica/teorica/calcolo-numerico/

Elimina duplicati e somma pari/dispari

elimina_duplicati.c

#include <stdio.h>

void leggiVettore(int v[], int n) {
	int i;
	for(i = 0; i < 20; i++)
		scanf("%d", &v[i]);
}

// copia in v2 gli elementi di v1 senza ripetizioni
// e restituisce il numero di elementi di v2
int eliminaDoppi(int v1[], int n1, int v2[]) {
	int i, n2;

	v2[0] = v1[0];
	n2 = 1;
	for (i = 1; i < 20; i++)
		if (v1[i] != v1[i - 1]) {
			v2[n2] = v1[i];
			n2++;
		}
	return n2;
}

void stampaVettore(int v[], int n) {
	int i;
	for(i = 0; i < n; i++)
		printf("%d ", v[i]);
}

int main() {
	int vet1[20], vet2[20], n2;

	printf("\nvettore 1 = ");
	leggiVettore(vet1, 20);
	n2 = eliminaDoppi(vet1, 20, vet2);
	printf("\nvettore 2 = ");
	stampaVettore(vet2, n2);

	return 0;
}

somma_pari-dispari.c

#include <stdio.h>

void leggiVettore(int v[], int n) {
	int i;
	for(i=0; i<20; i++)
		scanf("%d", &v[i]);	
}

int sommaPari(int v[], int n) {
	int i, somma = 0;
	for(i=0; i<n; i++)
		if (v[i] % 2 == 0)
			somma += v[i];
	return somma;
}

int sommaDispari(int v[], int n) {
	int i, somma = 0;
	for(i=0; i<n; i++)
		if (v[i] % 2 != 0)
			somma += v[i];
	return somma;
}

int main() {
	int vettore[20];
	printf("vettore = "); leggiVettore(vettore, 20);
	printf("somma pari = %d\n", sommaPari(vettore, 20));
	printf("somma dispari = %d\n", sommaDispari(vettore, 20));
	return 0;
}

Algoritmo di merge di due vettori ordinati

#include <stdio.h>
#include "vettori.h"

int vett1[10], vett2[10], vett3[20];
int n1 = 0, n2 = 0;

void merge() {
	int i;
	for (i=0; i<20; i++) {
		// controllo che i 2 vettori non siano esauriti
		if (n1<10 && n2<10) {
			// copio in vett3 il minore fra vett1 e vett2
			if (vett1[n1] < vett2[n2]) {
				vett3[i] = vett1[n1];
				n1++;
			} else {
				vett3[i] = vett2[n2];
				n2++;
			}
		// se uno dei 2 vettori è esaurito, copio gli elementi rimanenti dell'altro vettore
		} else {
			// copio vett1 in vett3
			if (n1<10) {
				vett3[i] = vett1[n1];
				n1++;
			}
			// copio vett2 in vett3
			if (n2<10) {
				vett3[i] = vett2[n2];
				n2++;
			}
		}
	}
}

int main() {
	printf("Inserisci i dati ordinati di vett1 e vett2\n");

	LeggeVettoreInt(vett1, 10);
	LeggeVettoreInt(vett2, 10);

	printf("vett1 = "); StampaVettoreInt(vett1, 10);
	printf("vett2 = "); StampaVettoreInt(vett2, 10);

	merge();

	printf("vett3 = "); StampaVettoreInt(vett3, 20);

	return 0;
}

Esercizio in preparazione alla verifica di laboratorio di Informatica per la 5E

Creare un sito web che permetta di gestire le prenotazioni in un laboratorio. Deve essere possibile:

  1. inserire data/ora inizio e fine della prenotazione e classe prenotata
  2. visualizzare tutte le prenotazioni di un dato giorno in ordine cronologico data/ora
  3. cancellare una prenotazione
  4. visualizzare le prenotazioni di una classe

Tabelle:

  1. Classi
    • ID_classe INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    • classe INT(1) NOT NULL
    • sezione CHAR(1) NOT NULL
  2. Prenotazioni
    • ID_prenotazione INT NOT NULL AUTO_INCREMENT PRIMARY KEY
    • inizio DATETIME NOT NULL
    • fine DATETIME NOT NULL
    • ID_classe NOT NULL

Es. 18 pag. 236

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int oreStudio[31];

void inputDati() {
	int i, ris;

	srand((unsigned) time(NULL));	// generatore di numeri casuali
	for(i = 0; i < 31; i++) {
		ris = (rand() % 5 + 0);		// risultati dei dadi da 0 a 4
		oreStudio[i] = ris;
		printf("%d ", ris);
	}
	printf("\n");
}

int contaGiorni(int nOre) {
	int i, s = 0;

	for(i = 0; i < 31; i++)
		if (oreStudio[i] == nOre)
			s++;
	return s;
}

int somma() {
	int i, s = 0;

	for(i = 0; i < 31; i++)
		s += oreStudio[i];
	return s;
}

int main() {
	printf("Ore studiate nei vari giorni del mese\n");
	inputDati();
	printf("I giorni in cui non hai studiato sono %d\n", contaGiorni(0));
	printf("I giorni in cui hai studiato 1 ora sono %d\n", contaGiorni(1));
	printf("I giorni in cui hai studiato 2 ore sono %d\n", contaGiorni(2));
	printf("I giorni in cui hai studiato 3 ore sono %d\n", contaGiorni(3));
	printf("I giorni in cui hai studiato 4 ore sono %d\n", contaGiorni(4));
	printf("Le ore studiante durante tutto il mese sono %d\n", somma());
	return 0;
}

Libreria per gli array

Programma di esempio sull’uso della libreria vettori.h

#include <stdio.h>
#include "vettori.h"

float temperature[7];

int main() {
	float tMedia;
	
	printf("Inserisci le 7 temperature della settimana\n");
	LeggeVettoreFloat(temperature, 7);
	StampaVettoreFloat(temperature, 7);
	tMedia = sommaValoriFloat(temperature, 7) / 7.0;
	printf("La temperatura media e' %f", tMedia);
	
	return 0;
}

vettori.h

#include <stdio.h>

void LeggeVettoreInt(int v[], int n) {
	int i;
	printf("Inserisci %d numeri: ", n);
	for(i=0; i<n; i++)	
		scanf("%d", &v[i]);
}

void StampaVettoreInt(int v[], int n) {
	int i;
	printf("( ");
	for(i=0; i<n; i++)
		printf(" %d ", v[i]);
	printf(" )\n");
}

void LeggeVettoreFloat(float v[], int n) {
	int i;
	printf("Inserisci %f numeri: ", n);
	for(i=0; i<n; i++)	
		scanf("%f", &v[i]);
}

void StampaVettoreFloat(float v[], int n) {
	int i;
	printf("( ");
	for(i=0; i<n; i++)
		printf(" %f ", v[i]);
	printf(" )\n");
}

int sommaValoriInt(int v[], int n) {
	int i;
	int s = 0;
	for (i=0; i<n; i++)
		s += v[i];
	return s;
}

float sommaValoriFloat(float v[], int n) {
	int i;
	float s = 0.0;
	for (i=0; i<n; i++)
		s += v[i];
	return s;
}

Contapassi

Creare le tabelle funzionali allo studio dell’attività fisica mediante i passi fatti:

  • PmAllievi con i campi ID_Allievo, Cognome, Nome, LuogoNascita, DataNascita, Classe, Sezione;
  • PmPassi con i campi Tempo (tipo DateTime), Passi, ID_Allievo; non serve una chiave primaria.

Creare le pagine JSP:

  • aggiornaAllievo, cancellaAllievo, elencaAllievi, inserisciAllievo
  • caricaPassi (deve permettere la selezione dell’allievo da una casella combinata, che preleva i dati dalla tabella Allievi, e l’inserimento del tempo e dei passi nel formato indicato di seguito)

I dati devono essere caricati in blocco mediante copia/incolla in un’area di testo:

<textarea name="dati" cols="40" rows="20"></textarea>

Esempio di dati da incollare nell’area di testo (s = step; w = walk):

2018/04/09 08:51:00	49	s
2018/04/09 08:52:00	46	w
2018/04/09 08:53:00	28	w
2018/04/09 08:54:00	36	w
2018/04/09 08:55:00	41	s
2018/04/09 08:56:00	28	w
2018/04/09 08:57:00	11	w
2018/04/09 08:58:00	20	s
2018/04/09 08:59:00	34	w
2018/04/09 09:00:00	15	s

Si fa riferimento all’applicazione Contapassi.apk presente all’indirizzo https://liceocuneo.it/oddenino/informatica/android/

Progetto di esempio di Costamagna: Contapassi.zip