Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
Argomenti trattati:
- calcolo di una potenza (di sistema, iterativo e ricorsivo)
- heapsort
- insertion sort
- merge sort
- quicksort
- otto regine
- dama cinese
- torre di Hanoi
- tour del cavaliere
- anagrammmi
- MCD secondo Euclide
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
Argomenti trattati:
- inserimento di un elemento in un vettore
- visualizzazione di un numero binario di n bit
- inserzione in lista ordinata
- fusione di array
- simulazione del gioco della vita
Algoritmi e Programmazione Avanzata - Ordinamento e ricorsioneSergio Porcu
Argomenti trattati:
- calcolo di una potenza (di sistema, iterativo e ricorsivo)
- heapsort
- insertion sort
- merge sort
- quicksort
- otto regine
- dama cinese
- torre di Hanoi
- tour del cavaliere
- anagrammmi
- MCD secondo Euclide
Algoritmi e Programmazione Avanzata - Esercizi propedeuticiSergio Porcu
Argomenti trattati:
- inserimento di un elemento in un vettore
- visualizzazione di un numero binario di n bit
- inserzione in lista ordinata
- fusione di array
- simulazione del gioco della vita
C# is entering its third decade of life. And it is consistently evolving over the years with lot of new features. Let's recap the recent 7.x evolution and what we expect for the 8.0 features.
A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Giancarlo Valente spiega il functional programming all'incontro mensile del Club degli Sviluppatori di Puglia. La storia da Alonzo Church e il lambda calcolo fino ai giorni d'oggi con la confluenza del functional programming nei linguaggi imperativi tradizionali. Esempi in Javascript, php, Erlang, haskell.
Il video del talk su youtube :)
https://youtu.be/LGIGyrD9Y9w
C# is entering its third decade of life. And it is consistently evolving over the years with lot of new features. Let's recap the recent 7.x evolution and what we expect for the 8.0 features.
A simple introduction to the Python programming language. In Italian. OLD: superseeded by Pycrashcourse 3.1.
Originally presented during the Networking class of the Computer Science course at the University of Parma
Giancarlo Valente spiega il functional programming all'incontro mensile del Club degli Sviluppatori di Puglia. La storia da Alonzo Church e il lambda calcolo fino ai giorni d'oggi con la confluenza del functional programming nei linguaggi imperativi tradizionali. Esempi in Javascript, php, Erlang, haskell.
Il video del talk su youtube :)
https://youtu.be/LGIGyrD9Y9w
This document contains 6 SQL queries that use the TO_CHAR function to format different parts of the current date (returned by SYSDATE) according to the Italian localization settings, including the abbreviated day name, day number, month name, and 4-digit year, and a final query that concatenates these date elements into a single Italian-formatted date string.
16. listOfString.c
/*
Algoritmi e Programmazione Avanzata
Tutore: Sergio Porcu
Argomento: liste concatenate ordinate
Gestione tramite menu e doppio puntatore.
Dati stringhe di caratteri.
Si osservi come questo programma sia stato
ottenuto dal programma
denominato listOfInt.c mediante modifica della
sola sezione "DATI" per modificare una lista
di interi in una di stringhe.
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
/********************************************************************
DEFINIZIONE DATI
********************************************************************/
#define MAXC 30
#define SUCCESS 2
#define FAILURE 3
typedef char * dato_t;
typedef struct nodo {
dato_t val;
struct nodo *punt;
} nodo_t;
/********************************************************************
PROTOTIPI
********************************************************************/
/* Gestione Dati */
dato_t leggiDato (FILE *fp);
void stampaDato (FILE *fp, dato_t dato);
int precede (dato_t d1, dato_t d2);
int uguali (dato_t d1, dato_t d2);
/* Gestione Lista */
nodo_t *myAlloc (void);
nodo_t *creaListaVuota (void);
nodo_t *inserisci (nodo_t *hp, dato_t dato);
void stampaLista (FILE *fp, nodo_t *hp);
int cerca (nodo_t *hp, dato_t dato);
nodo_t *cancella (nodo_t *hp, dato_t dato);
nodo_t *leggiLista (FILE *fp);
/********************************************************************
GETIONE DATI
(sezione che puo' rendere il programma indipendente dal tipo
-1-
17. listOfString.c
di dati, e.g., funzionamento con stringhe di caratteri)
********************************************************************/
dato_t
leggiDato (
FILE *fp
)
{
char tmpDato[MAXC];
dato_t dato;
/* Solo nel caso di fp==stdin visualizzo una richiesta-utente */
if (fp==stdin) {
fprintf (stdout, "Valore (stringa di caratteri): ");
}
fscanf (fp, "%s", tmpDato);
dato = (char *) malloc ((strlen (tmpDato) + 1) * sizeof (char));
if (dato == NULL) {
fprintf (stderr, "ERRORE: memoria dinamica insufficiente.n");
exit (1);
}
strcpy (dato, tmpDato);
return (dato);
}
void
stampaDato (
FILE *fp,
dato_t dato
)
{
fprintf (fp, "%sn", dato);
return;
}
int
precede (
dato_t d1,
dato_t d2
)
{
if (strcmp (d1, d2) < 0)
return (1);
else
return (0);
}
int
uguali (
dato_t d1,
dato_t d2
)
{
-2-
18. listOfString.c
if (strcmp (d1, d2) == 0)
return (1);
else
return (0);
}
/********************************************************************
GESTIONE LISTA
********************************************************************/
nodo_t
*creaListaVuota (
void
)
{
return (NULL);
}
int
cerca (
nodo_t *hp,
dato_t dato
)
{
nodo_t *p;
for (p = hp; (p != NULL)&&(precede (p->val, dato)); p = p->punt);
if ((p != NULL)&&(uguali (p->val, dato)))
return (1);
else
return (0);
}
nodo_t
*cancella (
nodo_t *hp,
dato_t dato
)
{
nodo_t *p, *q0, *q1;
/* Lista vuota */
if (hp == NULL) {
fprintf (stderr, "ATTENZIONE: dato inesistenten");
return (hp);
}
/* Cancella in testa */
if (uguali (dato, hp->val)) {
p = hp->punt;
free (hp);
return (p);
}
/* Cancella in mezzo o in coda. Percorrimento con doppio puntatore:
q0 e q1 puntano a due nodi consecutivi, al momento dell'inserimento
q0 punta al nodo precedente, q1 al nodo da cancellare
-3-
19. listOfString.c
*/
q0 = hp; q1 = hp->punt;
/* cerca posizione - eventualmente fine lista (q1 == NULL) */
while ((q1 != NULL)&&(precede (q1->val, dato))) {
q0 = q1;
q1 = q1->punt;
}
if ((q1 != NULL)&&(uguali (q1->val, dato))) {
/* cancella */
q0->punt = q1->punt;
free (q1);
}
else
fprintf (stderr, "ATTENZIONE: dato inesistenten");
/* hp non viene modificato */
return (hp);
}
nodo_t
*inserisci (
nodo_t *hp,
dato_t dato
)
{
nodo_t *p, *q0, *q1;
p = myAlloc ();
p->val = dato;
/* Lista vuota */
if (hp == NULL) {
p->punt = NULL;
return (p);
}
/* Inserimento in testa */
if (precede (dato, hp->val)) {
p->punt = hp;
return (p);
}
/* Inserimento in mezzo o in coda. Percorrimento con doppio puntatore:
q0 e q1 puntano a due nodi consecutivi, al momento dell'inserimento
q0 punta al nodo precedente, q1 al successivo
*/
q0 = hp; q1 = hp->punt;
/* cerca posizione - eventualmente fine lista (q1 == NULL) */
while ((q1 != NULL)&&(precede (q1->val, dato))) {
q0 = q1;
q1 = q1->punt;
}
/* inserisce */
q0->punt = p;
p->punt = q1;
/* hp non viene modificato */
return (hp);
}
-4-