Corso di Informatica 1 Esercitazione n. 4
|
|
|
- Leona De Angelis
- 9 anni fa
- Visualizzazioni
Transcript
1 Corso di Informatica 1 Esercitazione n. 4 Marco Liverani Esercizio n. 1 Letti in input due numeri interi n > 0 e k > 1 costruire un array A di n numeri interi casuali minori di 100 che non siano multipli di k. Stampare l array A. Diagramma di flusso Start Leggi n, k i = 0 i < n A[i] = rand % 100 i = 0 A[i]%k = 0 i = i + 1 i < n Scrivi A[i] Stop i = i + 1 Università degli Studi Roma Tre, Corso di Laurea in Matematica, Corso di Informatica Generale 1 (IN110) sito web del corso 1
2 Pseudo-codifica dell algoritmo 1: leggi n e k 2: per i = 0,1,2,...,n 1 ripeti 3: ripeti 4: sia A i un numero casuale compreso tra 0 e 100 5: fino a quando A i % k 0 6: fine-ciclo 7: per i = 0,1,2,...,n 1 ripeti 8: scrivi A i 9: fine-ciclo 10: stop Codifica in linguaggio C 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <time.h> 4 #define MAX int costruisci_array(int X[]) { 7 int i, n, k; 8 printf("inserisci n e k: "); 9 scanf("%d %d", &n, &k); 10 srand((unsigned)time(null)); 11 for (i=0; i<n; i++) { 12 do { 13 X[i] = rand()%100; 14 } while (X[i] % k == 0); 15 } 16 return(n); 17 } void stampa_array(int X[], int n) { 20 int i; 21 for (i=0; i<n; i++) 22 printf("%d ", X[i]); 23 printf("\n"); 24 return; 25 } int main(void) { 28 int A[MAX], n; 29 n = costruisci_array(a); 30 stampa_array(a, n); 31 return(0); 32 } 2
3 Esercizio n. 2 Letta una stringa di caratteri verificare se à costituita da sequenze alternate di lunghezza pari di a e di b. Ad esempio la stringa aaaabbaaaaaabbbbaa rispetta la regola descritta nel testo dell esercizio; viceversa le stringhe aabaabbb e aaaabbccaabbbb non la rispettano. Prima soluzione La prima soluzione realizza un automa a stati finiti (quattro stati) che accetta o rifiuta le stringhe del linguaggio definito nel testo dell esercizio. Lo stato s varia durante l analisi della stringa: indica che le sequenze alternate di a e b sono di lunghezza pari, s = 1 che le a sono dispari, s = 2 che le b sono dispari, s = 3 che ci sono caratteri diversi da a e b ; inizialmente e naturalmente se al termine dell analisi di tutta la stringa risulta allora vuol dire che la stringa può essere accettata. La tecnica utilizzata può essere facilmente generalizzata per riconoscere molti altri pattern. Diagramma di flusso Start Leggi A i = 0 i < n e s 3 A[i] = 'a' s = 1 OK! Ko! s = 1 A[i] = 'b' A[i] = 'a' s = 2 Stop s = 2 s = 3 s = 3 A[i] = 'b' s = 3 i = i+1 a a S 1 a Start S 0 a, b S 3 b b b S 2 Grafo delle transizioni di stato 3
4 Pseudo-codifica dell algoritmo 1: leggi la stringa a di n caratteri 2: sia s la variabile che indica lo stato del processo di analisi: se le sequenze alternate di a e b sono di lunghezza pari, s = 1 se le a sono dispari, s = 2 se le b sono dispari, s = 3 se ci sono caratteri diversi da a e b 3: sia inizialmente 4: per ogni carattere a i della stringa (i = 0,1,...,n 1) se s 3 ripeti 5: se allora 6: se a i = a allora 7: poni s = 1, perché le a sono dispari 8: altrimenti se a i = b allora 9: poni s = 2, perché le b sono dispari 10: altrimenti 11: poni s = 3 perché a i non è né una a né una b 12: fine-condizione 13: altrimenti se s = 1 allora 14: se a i = a allora 15: poni, perché le a sono tornate pari 16: altrimenti 17: poni s = 3 perché a i non è una a e quindi si è interrotta una sequenza di caratteri a di lunghezza dispari 18: fine-condizione 19: altrimenti se s = 2 allora 20: se a i = b allora 21: poni, perché le b sono tornate pari 22: altrimenti 23: poni s = 3 perché a i non è una b e quindi si è interrotta una sequenza di caratteri b di lunghezza dispari 24: fine-condizione 25: fine-condizione 26: fine-ciclo 27: se allora 28: la stringa rispetta la regola 29: altrimenti 30: la stringa NON rispetta la regola 31: fine-condizione 32: stop Codifica in linguaggio C 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 #define MAX int main(voi) { 7 char s[max]; 8 int stato, i; 9 printf("inserisci una stringa di caratteri: "); 10 scanf("%s", s); 11 stato = 0; 12 for (i=0; i<strlen(s) && stato!= 3; i++) { 13 if (stato == 0) { 4
5 14 if (s[i] == a ) 15 stato = 1; 16 else if (s[i] == b ) 17 stato = 2; 18 else 19 stato = 3; 20 } else if (stato == 1) { 21 if (s[i] == a ) 22 stato = 0; 23 else 24 stato = 3; 25 } else if (stato == 2) { 26 if (s[i] == b ) 27 stato = 0; 28 else 29 stato = 3; 30 } 31 } 32 if (stato == 0) 33 printf("la stringa %s rispetta la regola.\n", s); 34 else 35 printf("la stringa %s NON rispetta la regola.\n", s); 36 return(1); 37 } Seconda soluzione La seconda soluzione, più elementare, consiste nello scorrimento della stringa e nella verifica della consistenza della condizione specifica con cui è stato definito questo linguaggio ; è più complicato adattare la stessa strategia al riconoscimento di pattern costruiti sulla base di altre regole. Pseudo-codifica dell algoritmo 1: leggi la stringa a composta da n caratteri 2: i = 0, ok = 1 3: fintanto che i < n e ok = 1 ripeti 4: ca = 0, cb = 0 5: se a i a e a i b allora 6: ok = 0 7: altrimenti 8: fintanto che i < n e a i = a ripeti 9: ca = ca + 1, i = i : fine-ciclo 11: se ca è dispari allora 12: ok = 0 13: altrimenti 14: fintanto che i < n e a i = b ripeti 15: cb = cb + 1, i = i : fine-ciclo 17: se cb è dispari allora 18: ok = 0 19: fine-condizione 5
6 20: fine-condizione 21: fine-condizione 22: fine-ciclo 23: se ok = 1 allora 24: la stringa rispetta la regola 25: altrimenti 26: la stringa NON rispetta la regola 27: fine-condizione 28: stop Codifica in linguaggio C 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 int main(void) { 6 char a[100]; 7 int i, ok, ca, cb; 8 printf("inserisci una stringa: "); 9 scanf("%s", a); 10 i = 0; 11 ok = 1; 12 while (i < strlen(a) && ok == 1) { 13 ca = 0; 14 cb = 0; 15 if (a[i]!= a && a[i]!= b ) { 16 ok = 0; 17 } else { 18 while (i<strlen(a) && a[i] == a ) { 19 ca++; 20 i++; 21 } 22 if (ca % 2 == 1) { 23 ok = 0; 24 } else { 25 while (i < strlen(a) && a[i] == b ) { 26 cb++; 27 i++; 28 } 29 if (cb % 2 == 1) { 30 ok = 0; 31 } 32 } 33 } 34 } 35 if (ok == 1) 36 printf("la stringa rispetta la regola.\n"); 37 else 38 printf("la stringa NON rispetta la regola.\n"); 39 return(1); 40 } 6
7 Esercizio n. 3 Letta una stringa s, costruire la stringa t con la stessa paola di s, ma con caratteri maiuscoli. Pseudo-codifica dell algoritmo 1: leggi la stringa s con n caratteri 2: per i = 0,1,2,...,n 1 ripeti 3: se s i è una lettera dell alfabeto minuscola allora 4: t i = s i 32 5: altrimenti 6: t i = s i 7: fine-condizione 8: fine-ciclo 9: stop Diagramma di flusso Start Leggi S i = 0 i n T[i] = S[i] S[i] 122 T[i] = S[i] Scrivi T Stop i = i+1 7
8 Codifica in linguaggio C 1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 int main(void) { 6 char s[100], t[100]; 7 int i; 8 9 printf("inserisci una stringa: "); 10 scanf("%s", s); 11 for (i=0; i<=strlen(s); i++) { 12 if (s[i] >= 97 && s[i] <= 122) 13 t[i] = s[i] - 32; 14 else 15 t[i] = s[i]; 16 } 17 printf("stringa maiuscola: %s\n", t); 18 return(1); 19 } 8
Corso di Informatica 1 (IN1) Tutorato n. 11
Corso di Informatica 1 (IN1) Tutorato n. 11 Marco Liverani Esercizio n. 1 Leggere in input una lista di numeri interi ordinati in ordine crescente. Dopo aver letto la sequenza, inserire nella posizione
Introduzione al C. Esercitazione 6. Raffaele Nicolussi. Corso di Fondamenti di Informatica Ingegneria Clinica
Corso di Fondamenti di Informatica Ingegneria Clinica Esercitazione 6 Raffaele Nicolussi Esercizio 1 Si scriva una funzione in linguaggio C che riceve in ingresso un numero intero A letto da tastiera,
Università degli Studi di Verona. Esercizi. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie
Università degli Studi di Verona Dipartimento di Biotecnologie Laurea in Biotecnologie Corso di Informatica 2014/2015 Esercizi Gennaio 2015 - Sergio Marin Vargas Scrivere un programma Una volta che avete
Fondamenti di Informatica T-1 Modulo 2
Fondamenti di Informatica T-1 Modulo 2 1 Obiettivi di questa esercitazione 1. Array 2 Esercizio 1 Creare un programma che legga da input un numero non noto a priori di interi (al più 10) terminati da 0.
Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);
Fondamenti di Informatica L-A (A.A. 004/005) - Ingegneria Informatica Prof.ssa Mello & Prof. Bellavista I Prova Intermedia del 11/11/004 - durata h - COMPITO B Esercizio 1 (punti 1) Una associazione di
Esercitazione 6. Array
Esercitazione 6 Array Arrays Array (o tabella o vettore): è una variabile strutturata in cui è possibile memorizzare un numero fissato di valori tutti dello stesso tipo. Esempio int a[6]; /* dichiarazione
Il linguaggio di programmazione Python
Università Roma Tre Dipartimento di Matematica e Fisica Percorso Abilitante Speciale Classe A048 Matematica Applicata Corso di Informatica Il linguaggio di programmazione Python Marco Liverani ([email protected])
Esercizi. Stringhe. Stringhe Ricerca binaria
Politecnico di Milano Esercizi Stringhe Stringhe Array di caratteri Funzioni: strcpy() strcmp() strlen() char stringaa[10], stringab[10]; strcpy(stringaa, stringab); Copia if (strcmp(stringaa, stringab)
Stringhe. In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche
Fondamenti di Informatica T-1 modulo 2 Laboratorio 04: stringhe 1 Stringhe In C le stringhe ben formate sono in realtà array di caratteri terminati sempre da un carattere speciale, \0, detto anche terminatore
Linguaggio C: Array Valeria Cardellini
Linguaggio C: Array Valeria Cardellini Corso di Calcolatori Elettronici A.A. 2018/19 Università degli Studi di Roma Tor Vergata Dipartimento di Ingegneria Civile e Ingegneria Informatica Array in C q Dichiarazione
Array Tipi di dato semplici e strutturati strutturati array elementi omogenei numero d ordine indice lunghezza dimensione
Array Tipi di dato semplici e strutturati i tipi di dato visti finora erano tutti semplici: int, char, float,... i dati manipolati sono spesso complessi (o strutturati) con componenti elementari o strutturate
3 Costrutti while, for e switch
Questa dispensa propone esercizi sulla scrittura di algoritmi, in linguaggio C, utili alla comprensione dei costrutti while, for e switch. I costrutti per costruire cicli in C sono il while, la variante
Esercizi su liste e grafi
Esercizi su liste e grafi Marco Liverani Gennaio 2011 E-mail: [email protected] Web: http://www.mat.uniroma3.it/users/liverani 1 1 Esercizi sulle liste Esercizio 1 Letta in input una sequenza di
Alcuni esercizi. 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli
Alcuni esercizi 1. Valutazione in cortocircuito 2. If e if innestati 3. Switch 4. Cicli Stampa di voti Esempio 1 (switch) Realizzare un programma che legge da input un voto (carattere tra A ed E ) e ne
1 (4) 2 (4) 3 (12) 4 (6) 5 (6)
CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2016-2017 Proff. Danilo ARDAGNA Prima Prova in Itinere 4.5.2017 Cognome Nome Matricola Firma Durata: 2h Valutazioni
Lab 04 Istruzioni, cicli e array"
Fondamenti di Informatica e Laboratorio T-AB Ingegneria Elettronica e Telecomunicazioni e Ingegneria dell Automazione a.a. 2009/2010 Lab 04 Istruzioni, cicli e array" Lab04 1 Esercizio 1" Si scriva un
Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione. e mail: sito: users.iol.
Politecnico di Torino Sede di Alessandria Corso di informatica Programmazione in c: introduzione prof. Lorenzo Porcelli e mail: [email protected] sito: users.iol.it/genna18 Risoluzione di un problema Dato
Soluzione/* PROGRAMMAZIONE IN C */ #include <stdio.h> #include <stdlib.h>
Ricerca di un elemento in vettore Scrivere un programma in linguaggio C che riceve in ingresso una sequenza di N numeri interi. I numeri sono memorizzati in un vettore. Il valore N è inserito dall utente,
Lezione 5 Sottoarray di somma massima
Lezione 5 Sottoarray di somma massima Rossano Venturini [email protected] Pagina web del corso http://didawiki.cli.di.unipi.it/doku.php/informatica/all-b/start Esercizio 1 My strcat 1 Esercizio Implementare
Esercitazione 11. Liste semplici
Esercitazione 11 Liste semplici Liste semplici (o lineari) Una lista semplice (o lineare) è una successione di elementi omogenei che occupano in memoria una posizione qualsiasi. Ciascun elemento contiene
La formalizzazione dell informazione: Dati e Diagrammi di Flusso
La formalizzazione dell informazione: Dati e Diagrammi di Flusso Codifica degli algoritmi Algoritmo formulato per essere comunicato tra esseri umani chiaro, sintetico e intuitivo codificato in linguaggi
ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) Espressioni algebriche. ESERCIZIO Grammatiche (1) ESERCIZIO Grammatiche (1) P = {
G = VT,VN,P,S, dove: VT = { +, -, *, /, (, ), 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 VN = {,,, , , S = Espressioni algebriche 1 P = { Espressioni Algebriche ::= +
Stringhe e allocazione dinamica della memoria
Stringhe e allocazione dinamica della memoria Esercizio Scrivere un programma strings.c che legge da standard input una sequenza di parole separate da uno o più spazi, e stampa le parole lette, una per
STRUCT - ESERCIZIO 1
STRUCT - ESERCIZIO 1 Si vuole realizzare un programma di utilità matematica per gestire i numeri complessi. In particolare: 3. Progettare una opportuna struttura per la loro rappresentazione (in coordinate
