TPSIT - Simulazione II prova a.s. 2018/2019 - RFID - Radio-Frequency IDentification

Ecco la simulazione di seconda prova.

Analizzo la seguente parte:

Ogni bicicletta è dotata di un proprio tag a radiofrequenza (RFID) che ne riporta il codice univoco: questo tag viene letto da un apposito dispositivo su ogni slot (RFID reader) sia in ingresso che in uscita della bicicletta. L’utente potrà successivamente riconsegnare la bicicletta presso una qualsiasi stazione cittadina (quella di noleggio o un’altra) che abbia slot liberi. In questo modo, per ogni stazione è sempre possibile sapere quali biciclette sono bloccate negli slot e disponibili per il noleggio, quali sono state noleggiate e quali vengono riconsegnate.

Il candidato analizzi la realtà di riferimento e, fatte le opportune ipotesi aggiuntive, individui una soluzione che a suo motivato giudizio sia la più idonea per sviluppare i seguenti punti: 1. il progetto, anche mediante rappresentazioni grafiche, dell’infrastruttura tecnologica ed informatica necessaria a gestire il servizio nel suo complesso, dettagliando: a) l’infrastruttura di comunicazione, in termini di caratteristiche dei canali, degli apparati e dei protocolli, che permette di trasmettere le informazioni di ciascuna stazione al sistema centrale; b) le caratteristiche generali dei componenti hardware e software del sistema sia a livello centrale che nelle stazioni; c) le misure e gli apparati per assicurare la continuità del servizio.

Introduzione alla Radio Frequency Identification

si intende una tecnologia per l'identificazione e/o memorizzazione automatica di informazioni inerenti ad oggetti, animali o persone (automatic identifying and data capture, AIDC) basata sulla capacità di memorizzazione di dati da parte di particolari etichette elettroniche, chiamate tag (o anche transponder o chiavi elettroniche e di prossimità), e sulla capacità di queste di rispondere all'interrogazione a distanza da parte di appositi apparati fissi o portatili, chiamati reader (o anche interrogatori).

Questa identificazione avviene mediante radiofrequenza, grazie alla quale un reader è in grado di comunicare e/o aggiornare le informazioni contenute nei tag che sta interrogando; infatti, nonostante il suo nome, un reader (ovvero: "lettore") non è solo in grado di leggere, ma anche di scrivere informazioni.

Caratteristiche

Nello specifico un sistema RFID è costituito da tre elementi fondamentali:

  1. uno o più etichette RFID (o tag o transponder);
  2. un apparecchio di lettura e/o scrittura (lettore);
  3. un sistema informativo di gestione dei dati per il trasferimento dei dati da e verso i lettori.

L'elemento principale che caratterizza un sistema RFID è l'etichetta RFID o transponder o tag, che è costituito da:

  • un microchip che contiene dati in una memoria (tra cui un numero univoco universale scritto nel silicio),
  • una antenna,
  • un supporto fisico che tiene insieme il chip e l'antenna chiamato "substrato" e che può essere in Mylar, film plastico (PET, PVC, ecc), carta o altri materiali.

L'etichetta RFID può essere attiva, passiva, semi-passiva o semi-attiva.

Etichetta RFID passiva

L'etichetta contiene semplicemente un microchip (con identificativo univoco ed eventuale memoria) privo di alimentazione elettrica, un'antenna ed un materiale che fa da supporto fisico chiamato "substrato". Al passaggio di un lettore che emette un segnale radio a frequenze basse o medie o di alcuni gigahertz (sotto le diverse bande usate), la radiofrequenza attiva il microchip e gli fornisce l'energia necessaria a rispondere al lettore, ritrasmettendogli un segnale contenente le informazioni memorizzate nel chip, ma che può anche scrivere dati sul tag.

Etichetta RFID attiva

L'etichetta dispone di una o più antenne per inviare il segnale di lettura e ricevere le risposte anche su frequenze diverse, una batteria di alimentazione e uno o più transponder/tag RFID. L'etichetta può anche contenere sensori. In genere le etichette attive hanno distanze operative maggiori di quelle passive che arrivano fino a 200 m.

Etichetta RFID semi-passiva

L'etichetta semi-passiva è dotata di batteria, che è usata solo per alimentare il microchip o apparati ausiliari (sensori) ma non per alimentare un trasmettitore, in quanto in trasmissione si comporta come un'etichetta RFID passiva.

Etichetta RFID semi-attiva

L'etichetta semi-attiva è dotata di batteria che alimenta il chip ed il trasmettitore in cui per risparmiare energia l'etichetta RFID è disattivata e viene attivata tramite un ricevitore con tecnologia dei tag passivi e quindi in assenza di interrogazioni il tag può operare per tempi lunghi.

Lettore RFID

Il lettore emette un campo elettromagnetico/elettrico che tramite il processo della induzione genera nell'antenna del tag una corrente che alimenta il chip. Il chip così alimentato comunica tutte le sue informazioni che vengono irradiate tramite l'antenna verso il Lettore ed il Lettore, come più volte detto, può anche scrivere i dati sul tag.

L'antenna riceve un segnale, che tramite il principio della induzione trasforma in energia elettrica, che alimenta il microchip. Il chip così attivato trasmette i dati in esso contenuti tramite l'antenna (circuito di trasmissione del segnale) all'apparato che riceve i dati. In sintesi, un tag RFID è in grado di ricevere e di trasmettere via radiofrequenza le informazioni contenute nel chip ad un transceiver RFID.

Posted in Senza categoria | Leave a comment

Verifica C++ Vettori

Dato un numero intero, fornire la sua rappresentazione in base 2 o in base tre o in base 4 o in base 5 o in base 6 o in base 7 e viceversa.

Per sviluppare il programma si richiede l'uso l'utilizzo del % per il calcolo del modulo di un numero, l'uso di un vettore in cui appoggiare il resto della divisione.

Nel caso in cui si richieda invece il numero nell'opportuna base, appoggiarlo in un opportuno vettore.

Utilizzare la funzione prototipo per la gestione dei vettori.

Sufficienza: gestione del vettore e del ciclo per il cambiamento di base.

Posted in Senza categoria | Leave a comment

GPOI - Le metriche del software - Tipi di conteggio

Giorgio De Chirico

Il metodo delle FP viene usato nelle varie fasi di vita di un progetto informatico:

  • Progetto di sviluppo: FP stima le funzioni fornite agli utenti prima della realizzazione del progetto stesso, durante il suo sviluppo fino all'installazione finale
  • Progetto di manutenzione: FP stima le modifiche apportate al codice come aggiunte, modifiche o cancellazioni di funzioni
  • Singola Applicazione che misura la funzionalità terminata ed installata.

Il Italia vi è il GUFPI (Gruppo Utenti Function Points Italia) che sviluppa il concetto di Function Point.

Posted in Senza categoria | Leave a comment

HTML - Codice per la gestione dei cookies

Si cerca la riga </body> e, subito sopra, si incolla :

<!-- Codice per accettazione cookie - Inizio -->
<script type='text/javascript'>
//<![CDATA[
(function(window) {
  if (!!window.cookieChoices) {
    return window.cookieChoices;
  }
  var document = window.document;
  var supportsTextContent = 'textContent' in document.body;
  var cookieChoices = (function() {
    var cookieName = 'displayCookieConsent';
    var cookieConsentId = 'cookieChoiceInfo';
    var dismissLinkId = 'cookieChoiceDismiss';
    function _createHeaderElement(cookieText, dismissText, linkText, linkHref) {
      var butterBarStyles = 'position:absolute;width:100%;background-color:#eee;' +
          'margin:0; left:0; top:0;padding:4px;z-index:1000;text-align:center;';
      var cookieConsentElement = document.createElement('div');
      cookieConsentElement.id = cookieConsentId;
      cookieConsentElement.style.cssText = butterBarStyles;
      cookieConsentElement.appendChild(_createConsentText(cookieText));
      if (!!linkText && !!linkHref) {
        cookieConsentElement.appendChild(_createInformationLink(linkText, linkHref));
      }
      cookieConsentElement.appendChild(_createDismissLink(dismissText));
      return cookieConsentElement;
    }
    function _createDialogElement(cookieText, dismissText, linkText, linkHref) {
      var glassStyle = 'position:absolute;width:100%;height:100%;z-index:999;' +
          'top:0;left:0;opacity:0.5;filter:alpha(opacity=50);' +
          'background-color:#ccc;';
      var dialogStyle = 'z-index:1000;position:absolute;left:50%;top:50%';
      var contentStyle = 'position:relative;left:-50%;margin-top:-25%;' +
          'background-color:#fff;padding:20px;box-shadow:4px 4px 25px #888;';
      var cookieConsentElement = document.createElement('div');
      cookieConsentElement.id = cookieConsentId;
      var glassPanel = document.createElement('div');
      glassPanel.style.cssText = glassStyle;
      var content = document.createElement('div');
      content.style.cssText = contentStyle;
      var dialog = document.createElement('div');
      dialog.style.cssText = dialogStyle;
      var dismissLink = _createDismissLink(dismissText);
      dismissLink.style.display = 'block';
      dismissLink.style.textAlign = 'right';
      dismissLink.style.marginTop = '8px';
      content.appendChild(_createConsentText(cookieText));
      if (!!linkText && !!linkHref) {
        content.appendChild(_createInformationLink(linkText, linkHref));
      }
      content.appendChild(dismissLink);
      dialog.appendChild(content);
      cookieConsentElement.appendChild(glassPanel);
      cookieConsentElement.appendChild(dialog);
      return cookieConsentElement;
    }
    function _setElementText(element, text) {
      if (supportsTextContent) {
        element.textContent = text;
      } else {
        element.innerText = text;
      }
    }
    function _createConsentText(cookieText) {
      var consentText = document.createElement('span');
      _setElementText(consentText, cookieText);
      return consentText;
    }
    function _createDismissLink(dismissText) {
      var dismissLink = document.createElement('a');
      _setElementText(dismissLink, dismissText);
      dismissLink.id = dismissLinkId;
      dismissLink.href = '#';
      dismissLink.style.marginLeft = '24px';
      return dismissLink;
    }
    function _createInformationLink(linkText, linkHref) {
      var infoLink = document.createElement('a');
      _setElementText(infoLink, linkText);
      infoLink.href = linkHref;
      infoLink.target = '_blank';
      infoLink.style.marginLeft = '8px';
      return infoLink;
    }
    function _dismissLinkClick() {
      _saveUserPreference();
      _removeCookieConsent();
      return false;
    }
    function _showCookieConsent(cookieText, dismissText, linkText, linkHref, isDialog) {
      if (_shouldDisplayConsent()) {
        _removeCookieConsent();
        var consentElement = (isDialog) ?
            _createDialogElement(cookieText, dismissText, linkText, linkHref) :
            _createHeaderElement(cookieText, dismissText, linkText, linkHref);
        var fragment = document.createDocumentFragment();
        fragment.appendChild(consentElement);
        document.body.appendChild(fragment.cloneNode(true));
        document.getElementById(dismissLinkId).onclick = _dismissLinkClick;
      }
    }
    function showCookieConsentBar(cookieText, dismissText, linkText, linkHref) {
      _showCookieConsent(cookieText, dismissText, linkText, linkHref, false);
    }
    function showCookieConsentDialog(cookieText, dismissText, linkText, linkHref) {
      _showCookieConsent(cookieText, dismissText, linkText, linkHref, true);
    }
    function _removeCookieConsent() {
      var cookieChoiceElement = document.getElementById(cookieConsentId);
      if (cookieChoiceElement != null) {
        cookieChoiceElement.parentNode.removeChild(cookieChoiceElement);
      }
    }
    function _saveUserPreference() {
// Durata del cookie di un anno
      var expiryDate = new Date();
      expiryDate.setFullYear(expiryDate.getFullYear() + 1);
      document.cookie = cookieName + '=y; expires=' + expiryDate.toGMTString();
    }
    function _shouldDisplayConsent() {
      // Per mostrare il banner solo in mancanza del cookie
      return !document.cookie.match(new RegExp(cookieName + '=([^;]+)'));
    }
    var exports = {};
    exports.showCookieConsentBar = showCookieConsentBar;
    exports.showCookieConsentDialog = showCookieConsentDialog;
    return exports;
  })();
  window.cookieChoices = cookieChoices;
  return cookieChoices;
})(this);
document.addEventListener('DOMContentLoaded', function(event) {
    cookieChoices.showCookieConsentBar('Questo sito utilizza i cookie per migliorare servizi ed esperienza dei lettori. Se decidi di continuare la navigazione consideriamo che accetti il loro uso.',
        'OK', '+Info', 'http://www.ilmiosito.com/p/politica-dei-cookie.html');
  });
//]]>
</script>
<!-- Codice per accettazione cookie - Fine -->

Posted in Senza categoria | 1 Comment

HTML - Gestione Privacy e cookies

Jacek Yerka

La normativa di riferimento è presente sul sito del garante ed afferma che:

1. Ambito di applicazione

Resta fermo che i siti che non consentono l´archiviazione delle informazioni nel PC o cellulare dell´utente o l´accesso a informazioni già archiviate, e che quindi non utilizzano cookie, non sono soggetti agli obblighi previsti dalla normativa.

2. Utilizzo di cookie analitici di terze parti

Nell´ottica della semplificazione che l´Autorità sta perseguendo, è stato già chiarito nel provvedimento come i cookie analitici – che servono a monitorare l´uso del sito da parte degli utenti per finalità di ottimizzazione dello stesso – possano essere assimilati ai cookie tecnici laddove siano realizzati e utilizzati direttamente dal sito prima parte (senza, dunque, l´intervento di soggetti terzi).

I cookie tecnici sono quelli utilizzati al solo fine di “effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica, o nella misura strettamente necessaria al fornitore di un servizio della società dell’informazione esplicitamente richiesto dall’abbonato o dall’utente a erogare tale servizio”.

I cookie di profilazione sono volti a creare profili relativi all’utente e vengono utilizzati al fine di inviare messaggi pubblicitari in linea con le preferenze manifestate dallo stesso nell’ambito della navigazione in rete.

Google Analytics è un caso particolare di cookie tecnico che però va ugualmente considerato come cookie di terze parti. A differenza dei classici software di analisi del traffico interno, come il famoso Piwick, i cookie di Google Analytics vengono installati da Google e quindi sono da considerarsi di terze parti.

Ricordiamo che l’utilizzo del banner con informativa breve non basta per essere a regola con la legge, occorre infatti impedire l’installazione di qualsiasi cookie non tecnico previo consenso da parte dell’utente e disporre di una corretta cookie policy.

3. Soggetti tenuti a realizzare il banner: il ruolo dei siti prima parte

Con riferimento al tema della responsabilità dei gestori dei siti prima parte in merito all´installazione dei cookie di profilazione provenienti da domini "terze parti", si conferma che tali soggetti rispetto all´installazione di tali cookie svolgono un ruolo di mero intermediario tecnico.

È bene precisare, tuttavia, che per la natura "distribuita" di tale trattamento, che vede il sito prima parte comunque coinvolto nel processo, il consenso all´uso dei cookie terze parti si sostanzia nella composizione di due elementi entrambi necessari: da un lato la presenza del banner, che genera l´evento idoneo a rendere il consenso documentabile (a carico della prima parte) e, dall´altro, la presenza dei link aggiornati ai siti gestiti dalle terze parti in cui l´utente potrà effettuare le proprie scelte in merito alle categorie e ai soggetti da cui ricevere cookie di profilazione.

Si chiarisce inoltre che se sul sito i banner pubblicitari o i collegamenti con i social network sono semplici link a siti terze parti che non installano cookie di profilazione non c´è bisogno di informativa e consenso.

Al riguardo, si coglie l´occasione per ribadire che le richieste di consenso presenti all´interno dell´informativa estesa del sito prima parte ovvero nei siti predisposti dalle terze parti, non dovranno necessariamente fare riferimento ai singoli cookie installati, ma potranno riguardare categorie più ampie o specifici produttori o mediatori con cui il sito prima parte ha stabilito rapporti commerciali.

Preme sottolineare che l´obbligo di rendere l´informativa e acquisire il consenso nasce dalla scelta del sito di ospitare pubblicità mirata basata sulla profilazione degli utenti tramite i cookie, in luogo di quella generalista offerta indistintamente a tutti.

4. Modalità di acquisizione del consenso

Come noto, nel Provvedimento è stato stabilito che "la prosecuzione della navigazione mediante accesso ad altra area del sito o selezione di un elemento dello stesso (ad esempio, di un´immagine o di un link) comporta la prestazione del consenso all´uso dei cookie" (cfr. punto 1, lett. e), del dispositivo).

Al riguardo, si rappresenta che soluzioni per l´acquisizione del consenso basate su "scroll", ovvero sulla prosecuzione della navigazione all´interno della medesima pagina web, da molti prospettate e in effetti particolarmente rilevanti nel caso di dispositivi mobili, sono considerate in linea con i requisiti di legge, qualora queste siano chiaramente indicate nell´informativa e siano in grado di generare un evento, registrabile e documentabile presso il server del gestore del sito (prima parte), che possa essere qualificato come azione positiva dell´utente.

5. Applicazione della normativa italiana anche a siti che hanno sede in Paesi extra EU

In merito ai chiarimenti richiesti sull´ambito di applicazione della normativa in materia di cookie, si evidenzia che la stessa riguarda tutti i siti che, a prescindere dalla presenza di una sede nel territorio dello Stato, installano cookie sui terminali degli utenti, utilizzando quindi per il trattamento "strumenti situati sul territorio dello Stato" (cfr. art. 5, comma 2, del Codice privacy).

6. Notificazione in caso di realizzazione di più siti web

Si ritiene condivisibile la richiesta presentata da alcuni editori titolari in merito alla possibilità di effettuare una sola notificazione per tutti i diversi siti web che gli stessi gestiscono, in linea con le previsioni normative. In tal caso nella notificazione del trattamento andranno indicati tutti i domini nei quali il trattamento effettuato attraverso i cookie si realizza mantenendone aggiornato – attraverso eventuali modifiche della notificazione – il relativo elenco.

IN PARTICOLARE EVIDENZA

• I siti che non utilizzano cookie non sono soggetti ad alcun obbligo

• Per l´utilizzo di cookie tecnici è richiesta la sola informativa (ad esempio nella privacy policy del sito). Non è necessario realizzare specifici banner.

• I cookie analitici sono assimilati a quelli tecnici solo quando realizzati e utilizzati direttamente dal sito prima parte per migliorarne la fruibilità.

• Se i cookie analitici sono messi a disposizione da terze parti i titolari non sono soggetti ad obblighi (notificazione al Garante in primis) qualora:

A) siano adottati strumenti che riducono il potere identificativo dei cookie (ad esempio tramite il mascheramento di porzioni significative dell´IP);

B) la terza parte si impegna a non incrociare  le informazioni contenute nei cookies con altre di cui già dispone.

• Se sul sito ci sono link a siti terze parti (es. banner pubblicitari; collegamenti a social network) che non richiedono l´installazione di cookie di profilazione non c´è bisogno di informativa e consenso.

• Nell´informativa estesa il consenso all´uso di cookie di profilazione potrà essere richiesto per categorie (es. viaggi, sport).

• È possibile effettuare una sola notificazione per tutti i diversi siti web che vengono gestiti nell´ambito dello stesso dominio.

• Gli obblighi si applicano a tutti i siti che installano cookie sui terminali degli utenti, a prescindere dalla presenza di una sede in Italia.

Posted in Senza categoria | Leave a comment

GPOI - Le metriche del software - FP

Giorgio De Chirico

I Function Point sono un tipo di misura che si basa sull'idea di quantificare un'applicazione software dal punto di vista dell'utente; si ricava un indice di un programma mediante la misura indiretta delle funzionalità che deve fornire, senza tenere conto degli aspetti tecnici implementativi.

Tale metodo non tiene conto della difficoltà reale dell'algoritmo considerando la complessità legata esclusivamente al numero di operazioni di I/O del programma.

E' sorto un organismo di nome IFPUG (international Function Points User Group) che studia le metriche e produce documenti per creare delle regole; questi Function point danno origine alla standardizzazione ISO.

I Function Point valutano il software indipendentemente dalla tecnologia utilizzata per lo sviluppo (linguaggi di programmazione, tools di sviluppo ecc) misurando tutte le funzioni richieste e consegnate all'utente.

Esse forniscono una misura normalizzante per le altre metriche o per latri progetti. In pratico è il primo punto di riferimento per valutare il LOC di un'applicazione.

Un caso di localismo è la corrispondenza media che si verifica tra le LOC e i FP è chiamata, da Capers Jones, "backfire". Ad esempio, rispettivamente secondo tale autore e la David Consulting Group, 1 FP equivale a:

LinguaggioLOC/FP
Assembler320
C128
Cobol105
Fortran105
Pascal90
Modulo 271
Ada70
APL32
OO (C++/Java)30
Smalltalk21
4GL20
Generatore di codice15
Foglio elettronico6
Linguaggio grafico4

I Function Point si concretizzano in una serie di punteggi (pesi) assegnati secondo regole di conteggio a Input (EI), Interrogazioni (EQ), Output (EO), File logici interni (ILF), File logici esterni (EIF) evidenti dall'esame dell'applicazione e della sua documentazione.

Nel mondo dell'informatica la metrica dei Function Point si sostituisce gradualmente alle LOC.

Le LOC variano, a parità di funzioni svolte, secondo il tipo di linguaggio utilizzato e sono più difficilmente quantificabili da quando si sono diffusi maggiormente linguaggi visuali avanzati per GUI e WEB rispetto ai linguaggi software tradizionali.

Posted in Senza categoria | Leave a comment

TPSIT - Flashare firmware su Android

Il firmware è un programma, in pratica il sistema operativo presente sui cellulari. In realtà il firmware è un programma non proprio un vero sistema operativo ma ormai è consuetudine chiamare in tale maniera il software caricato sui vari tablet o cellulari.

Flashare significa caricare il firmware sui cellulari. Il termine deriva dall'uso dei chip EEPROM chiamate flash memory da cui il termine flashare.

Nel caso di un Tablet SAMSUNG Tab2 10.1 per caricare nuovamente il sistema operativo si deve:

  • scaricarsi il software Odin sul proprio PC e metterlo nella stessa cartella in cui si caricherà il sistema operativo (odin).
  • scaricarsi il sistema operativo, che normalmente è di estensione .rar
  • scaricarsi i driver per comunicare tramite la porta USB con il tablet
  • fare il boot del tablet schiacciando il pulsante di ON/OFF e volume -
  • far partire il sofware Odin, flag su AP e caricamento del sistema operativo (firmware)
  • collegare il tablet
  • comparirà una schermata con la richiesta del download, pulsante volume +, a questo punto comparirà la presenza della comunicazione tra USB e porta del tablet (COM1)
  • selezionare start
  • aspettare che si carichi il sistema operativo
  • a questo punto il tablet è pronto.
Posted in Senza categoria | Leave a comment

GPOI - Le metriche del software - LOC

La stima della mole di lavoro viene effettuata attraverso valutazione dei Function Points PF dai quali è poi possibile derivare il numero delle linee di codice (Line of Code ) LOC.

Si utilizza il termine LOC oppure anche SLOC (Source Lines of Code) e il suo multiplo KLOC (1000 LOC) e si misurano proprio le linee di codice sorgente scritte.

Tale metodo dipende dallo stile di programmazione.

Ecco alcune varianti da conoscere in quanto se si dovessero incontrare nello sviluppo del software è indispensabile conoscerle:

  • NLOC (Non Comment Lines of Code) non tiene conto delle linee vuote
  • NCNB (Non Comment Non Blank) non tiene conto neanche dei commenti
  • CLOC (Comment Lines of Code) tiene conto solo delle linee di commenti
  • un metodo che tiene conto delle linee di codice dell'eseguibile

Svantaggi:

  • non tiene conto la difficoltà del software
  • non tiene conto del linguaggio utilizzato

Per ovviare a tali svantaggi si sono introdotti dei coefficienti moltiplicativi e si utilizza il metodo PF (Function Point)

Posted in Senza categoria | Leave a comment

GPOI - Le metriche del software - introduzione

I costi di produzione del software superano i costi hardware.

I costi di manutenzione superano i costi dello sviluppo e quindi si devono introdurre dei metodi oggettivi per formulare stime, verifiche e sviluppo.

Le metriche del software forniscono delle misure quantitative del prodotto.

Quindi, come già evidenziato nei capitoli precedenti, si deve avere una stima a priori, nella fase di pianificazione, una misurazione permanente in corso d'opera ed una valutazione a posteriore, al termine del progetto.

3 parametri fondamentali: dimensione, funzionalità, complessità.

metrica dimensionale--> lunghezza del codice LOC (line of code)

metriche funzionali --> misura le funzioni che il software deve svolgere FPA (Function Points Analysis)

metriche sulla complessità --> metriche strutturali - ad esempio il metodo ciclomatico.

La bontà di una metrica del software deve cercare di misurare:

  • efficienza
  • complessità
  • comprensibilità
  • riuso
  • collaudabilità
  • manutenzione

Posted in Senza categoria | Leave a comment

Python - Liste dinamiche

Jacek Yerka

La gestione di una lista richiede in primis la sua definizione, come sempre deve avvenire:

lista[0]=b

quindi si usa il semplice comando:

lista.append(b)

L'usa delle liste dinamiche è utile se non si conoscono le dimensioni della lista che si vuole gestire ma ha lo svantaggio che se non usata in maniera oculata essa potrebbe portare al riempimento della memoria.

E' una struttura dati da sconsigliare oppure da usare mettendo sempre e comunque un limite.

Con il seguente comando conosco la lunghezza della lista:

n=len(lista)

Per vedere a video la lista posso usare questo semplice metodo:

print(lista)

oppure posso stampare in orizzontale i suoi elementi:

for i in range(0,n):
print(lista[i]," ",end=' ')

Con il seguente comando verifico che si siano immessi dei valori numerici:

if(g>47 and g<58):

b=int(b)
lista[0]=b

da notare che controllo il tipo di dato nella sua rappresentazione interna.

Con il comando:

b=b.upper()

faccio diventare maiuscolo la lettera immessa.

Il seguente programma effettua la somma dei numeri immessi in una lista dinamica finchè l'utente non inserisce la lettera S maiuscola.

#

Python 3.6.2

#Autore: Francesco Bragadin

#Data creazione: 28/12/2018

#Ultima modifica: 28/12/2018

#

#Nome file: listadinamica.py

#

#Commenti:

#lista di dimensione infinita e somma dei suoi elementi

#solo in python ho liste dinamiche con allocazione infinita

#da sconsigliare in quanto occupa dimensione infinita di memoria

#

#definisco l'oggetto lista

lista=[0]
b=0

g=0

#inserisco il primo valore della lista

b=input("Inserisco il valore finchè non scrivi S: ")

#controllo che il valore sia un intero per effettuarbi la somma

g=ord(b)
if(g>47 and g<58):

#quindi posso fare la conversione da stringa ad intero senza mai sbagliare

b=int(b)
lista[0]=b

else:
b=b.upper()

#uso del ciclo while finisco il ciclo finchè non inserisco il valore S

while b!='S':
b=input("Inserisco il valore finchè non scrivi S: ")
g=ord(b)
if(g>47 and g<58):

#quindi posso fare la conversione da stringa ad intero senza mai sbagliare

    b=int(b)
    lista.append(b)

#il comando append inserisce un elemento in fondo alla lista

else:
    b=b.upper()

#voglio sapere quanti sono i valori che ho inserito

n=len(lista)
print("Lunghezza della lista: ", n)

print("Lista primo metodo")
print(lista)

#oppure la stampo elemento per elemento in orizzontale - terzo metodo -

print("Terzo metodo di stampa della lista")
for i in range(0,n):
print(lista[i]," ",end=' ')

#mi serve solo per andare a capo

print(' ')

s=0

#Sommo gli elementi della lista

#Da notare che la prima volta del ciclo s=0

#le volte successiva s memorizza il valore precedente e lo somma al nuovo

#valore del vettore

for i in range(0,n):
s=s+lista[i]

#la somma dei suoi elementi

print("La somma degli elementi risulta: ",s)

b=int(b)
lista[0]=b

Posted in Senza categoria | Leave a comment