[:it]C++: soluzione alla verifica[:]

[:it]

  • alexander averin

    alexander averin

    da notare l’uso delle variabili globali e locali

  • le funzioni prototipo
  • l’iterazione

#include <iostream>
using namespace std;

string prodotto;
string prodottomassimo;
const float k=100;

int maggiore(int a,int b);
float funzionecosto(float prezzo,int max);
bool probabilesconto(float costotoale);
float sconto(float costototale);

int main()
{

int n,max;
float costototale,prezzo,finale;
max=0;
cout<<“Inserimento prodotti”<<“\n”;
cout<<“0 – uscita”<<“\n”;
cout<<“Quantita: “;
cin>>n;
while (n!=0)
{
cout<<“Prodotto: “;
cin>>prodotto;
max=maggiore(max,n);
cout<<“Quantita: “;
cin>>n;
}
cout<<“Il prodotto maggiormente venduto risulta: “<<prodottomassimo<<” con “<<max<<” pezzi”<<“\n”;
cout<<“Prezzo del prodotto: “;
cin>>prezzo;
costototale=funzionecosto(prezzo,max);
cout<<“Spesa complessiva: “<<costototale<<“\n”;
if (probabilesconto(costototale))
finale=sconto(costototale);
else
finale=costototale;

cout<<“Il prezzo finale del “<<prodottomassimo<<” risulta: “<<finale;

return 0;
}

int maggiore(int a,int b)
{
int maxmaggiore;

if (b>a)
{
maxmaggiore=b;
prodottomassimo=prodotto;
return maxmaggiore;
}
else
{
return a;
}

}

float funzionecosto(float prezzo,int max)
{
return prezzo*max;
}

bool probabilesconto(float costototale)
{
if (costototale > k)
return true;
else return false;

}

float sconto(float costototale)
{
return (costototale – costototale*20/100);
}[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]Esercizi sugli array[:]

[:it]

  1. alexander averin

    Leggere un array di 10 elementi tramite funzione prototipo

  2. Leggere e scrivere un array di 10 elementi tramite funzione prototipo
  3. dopo aver caricato in memoria un array di numeri interi con 10 componenti, calcolarne il prodotto delle componenti
  4. dopo aver caricato in memoria un array di numeri interi con 10 componenti, contare le componenti che hanno un valore superiore a 5
  5. dopo aver caricato in memoria un array di numeri interi con 10 componenti raddoppiare il valore solo delle prime tre componenti.
  6. Genera casualmente 10 numeri, memorizzali in un array ed effettua lo scambio tra il massimo ed il minimo elemento (supponendo che i valori dell’array siano tutti distinti tra loro).
  7. Leggi 10 numeri interi da tastiera e visualizzali in sequenza senza stampare uno stesso numero due volte. Per esempio: valori dell’array: 15,3,5,3,11,5,15,5,15,11; valori stampati: 15,3,5,11.
  8. Leggi N numeri e visualizzali a rovescio.
  9. Genera casualmente N numeri, scegli causalmente un elemento del vettore, e quindi effettua la partizione dell’array rispetto a quell’elemento (cioè elabora il vettore in modo tale che tutti gli elementi  a sinistra dell’elemento scelto siano minori o, al limite, uguali, mentre tutti gli elementi a destra siano sempre maggiori).
  10. dato un vettore di n interi, costruisci altri due vettori di dimensioni opportune, contenenti rispettivamente gli elementi del primo vettore non maggiori e maggiori di un intero dato.
  11. leggi n numeri, inseriscili in un vettore e individua gli elementi duplicativi visualizzandoli sullo schermo.

[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]C++: array o vettore[:]

[:it]

Alexander Averin

L’array è un insieme di elementi omogenei fra loro. Con una variabile possiamo indicare solo un dato, con l’array possiamo indicare tanti dati dello stesso tipo con un solo nome collettivo di variabile: l’identificatore dell’array. Gli elementi si distinguono uno dall’altro attraverso l’indice che viene assegnato nell’array, e che viene posto accanto all’identificatore dell’array.

Un array si definisce con la seguente dichiarazione:

tipo NomeArray[dimensione];

Alla normale dichiarazione di variabile si aggiunge semplicemente, tra parentesi quadre, il numero di elementi (dimensione) che compongono l’array.

Per esempio, la seguente dichiarazione crea un array di 10 elementi di tipo double:

double coeff[10];

L’indice è solitamente una variabile di tipo int.

Si può usare l’istruzione di asegnazione:

coeff[7]=7;

oppure produrre in output i valori delle componenti di un array con un ciclo for:

for (int i=0; i<10; i++){

cout<<coeff[i]<<endl;

}

La numerazione degli indici del linguaggio in C++ inizia da 0 e quindi, nel nostro esempio, gli elementi dell’array sono coeff[0], coeff[1], …,coeff[9].

E’ possibile inizializzare un array assegnando i valori alle componenti in fase di dichiarazione, come in questo esempio:

double numeri[3]={2.5,1.2,3.0}

I valori indicati all’interno delle parentesi graffe e separati dalla virgola.

Per passare un vettore ad una funzione è sufficiente indicare il nome del vettore ad esempio il seguente esempio legge un vettore e lo restituisce alla main, poi chiamo una funzione che lo stampa a video:

#include <iostream>
using namespace std;
const int MAX=100;
void ReadVector(int v[],int d);
void WriteVector(int v[],int d);

main(){
int d;
int v[MAX];

cout<<“Inserisci la dimensione del vettore: “;
cin>>d;
ReadVector(v,d);
WriteVector(v,d);
return 0;

}

Void ReadVector(int v[],int d)
{
for (int i=0;i<d;i++)
{
cout<<“Elemento di posto “<<i<<“: “;
cin>>v[i];
}

}

void WriteVector(int v[],int d)
{
for (int i=0;i<d;i++)
{
cout<<v[i]<<endl;
}
}

 [:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: forza magnetica su una corrente elettrica[:]

[:it]

Alexander Averin

Una corrente elettrica è un flusso di cariche elettriche in moto nel vuoto o attraverso un moto conduttore. L’intensità della corrente elettrica è definita come la carica passante attraverso una sezione del conduttore nell’unità di tempo.

Si consideri una sezione di un conduttore, attraverso la quale sono in moto con velocità v particelle con carica q.  Se ci sono n particelle per unità di volume, il numero totale di particelle passanti attraverso l’unità di area per unità di tempo è nv, e la densità di corrente, definita coe la carica passante per unità di area per unità di tempo. è il vettore:

\vec{j}=nq\vec{v}

Se S è l’area, in sezione del conduttore, orientato perpendicolarmente a \vec{j}, la corrente è lo scalare:

I=\vec{j}\cdot S=nqvS.

Come si nota la corrente elettrica viene quindi definita come il numero di cariche in un volume che presentano una certa velocità che attraversano una sezione in una sezione.

Supponiamo ora che il conduttore sia in un campo induzione magnetica. La forza su ogni carica è data dalla \vec{F}=q(\vec{v}\times \vec{B}) e, poiché vi sono n particelle per unità di volume, la forza f per unità di volume è:

\vec{f}=nq\vec{v}\times \vec{B}=\vec{j}\times\vec{B}.

Questa relazione consegue che un filo percorso da corrente sottoposto ad un campo induzione magnetico tende ad essere soggetto ad una forza.

\vec{F}=IL\vec{u_{T}}\times\vec{B}

ossia è soggetto ad una forza perpendicolare al suo asse e al campo magnetico. Con L lunghezza del filo. Questo è il principio sul quale funzionano i motori elettrici.

Se \theta è l’angolo tra il conduttore e il campo magnetico, possiamo scrivere per il modulo della forza F:

F=IBL\sin \theta

la forza è nulla se il conduttore è parallelo al campo induzione magnetica (\theta=0) e massima se è perpendicolare ad esso (\theta =\pi /2), risultato confermato sperimentalmente.[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: crittografia–>GPG[:]

[:it]In Linux è disponibile il programma gpg (GNU Privacy Guard), rilasciato sotto la licenza GNU GPL, che segue lo standard PGP (Pretty Good Privacy) per la crittografia a chiave asimmetrica.

per installare il programma si digiti:

sudo apt-get install gpg

se è già installato non utilizzare tale comando.

Cifrare un documento 

gpg –gen-key

si avranno queste schermate:

a questo punto impostare gli identificativi dell’utente:

ed alla fine avrò:

con il comando

gpg –list-secret-keys

vedo la mia chiave privata

gpg –list-keys 

vedo le chiavi pubbliche.

Quello che si vede non è la chiave ma l’ID della chiave stessa.

L’ID potrebbe essere anche inserito sotto il comando pub.

La chiave pubblica può essere distribuita ad altri utenti. Essa viene estratta con il comando:

gpg –export -o ../francesco.asc E655621B

oppure

gpg –export -o home/ ID della chiave

inserire la directory corretta per poter scrivere (in caso contrario non si hanno i permessi).

e lo spedisco ad esempio a marcello nella sua homedirectory

marcello importa la chiave pubblica di francesco nel suo portachiavi

gpg –import francesco.asc

adesso marcello prepara un file e lo codifica con la chiave pubblica di francesco

–output indica il nome con cui viene salvato il file cifrato

–encrypt l’operazione di cifratura

–recipient il riferimento alla chiave pubblica di francesco

il comando si chiude con il nome del file da cifrare.

Sposto il file su francesco

Con il comando

gpg –output docMarcello –decrypt cifratoB.gpg

–ouput indica il nome con il quale viene salvato il file in chiaro

–decrypt indica l’operazione inversa e l’ultima nome è il file ricevuto

[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: approfondimenti utenti e gruppi[:]

[:it]

Claude Monet

Nel post precedente avevo usato il comando

useradd -G nomegruppo nomeutente

tale comando se non abbinato all’opzione -m non crea la home directory.

Il comando per la creazione della home directory diventa pertanto:

useradd -G nomegruppo nomeutente -m

Esso pertanto è comodo se si è cancellato un utente e lo si vuole ricreare sapendo che la sua home directory esiste già.

Il comando nativo, se si vuole anche fornire ulteriori informazioni è:

adduser con le opzioni precedenti.

Per vedere adesso l’elenco degli utenti si deve usare il comando

cat /etc/passwd

in particolare se si vuole sapere quali sono gli utenti che hanno una home si usa il comando:

cat /etc/passwd | grep home/

Verifica permessi sui file

Con il comando

ls -al

si vedono tutti i permessi di un file o directory

La colonna dei permessi contiene 10 lettere (o trattini):

  • il primo spazio i ndica la tipologia dell’elemento e può avere i seguenti valori: d (directory), l(link simbolico),  (file);
  • i seguenti nove spazi indicano i permessi; più precisamente si tratta di tre distinti gruppi di 3 permessi (r = lettura; w = scrittura; x = esecuzione). Il primo gruppo da tre riguarda il proprietario, il secondo riguarda il gruppo ed il terzo riguarda gli altri utenti.

Comando che cambia i permessi chmod

Ad esempio il comando:

chmod a=rwx nomefile

si assegna a tutti la rwx

L’assegnatario viene identificato attraverso una lettera:

  • a (tutti)
  • u (utente proprietario)
  • g (gruppo)
  • o (altri utenti)

Si può usare anche la notazione ottale:

chmod 777 nomefile

Di seguito una tabella dei valori numerici e del loro significato:

  • 7 corrisponde a rwx
  • 6 corrisponde a rw
  • 5 corrisponde a rx
  • 4 corrisponde a r
  • 3 corrisponde a wx
  • 2 corrisponde a w
  • 1 corrisponde a x
  • 0 negato ogni accesso

Cambio nome proprietario e gruppo chown e chgrp

Il comando chown è utilizzato per cambiare l’utente proprietario e/o il gruppo assegnato ad un file o ad una directory. La sintassi di chown è molto semplice:

chown marcello:programmatori esercizio1

se voglio invece cambiare solo il gruppo

chgrp programmatori esercizio1

Adesso l’utente marcello che è all’interno del gruppo programmatori non può cambiare il file documento senza titolo1 ma può cambiare il documento esercizio1.

Cancellazione gruppo secondario

cancello il gruppo programmatori

delgroup programmatori 

la lista dei file sarà:

Adesso appena aggiungo un nuovo gruppo esso prenderà il GID 1001.

Aggiunta utente in ambiente con samba attivo:

si usa il comando:

smbldap -useradd -a -m nomeutente

[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: forza magnetica su una carica in moto[:]

[:it]

Magnesia attuale Manisa

Secoli prima di Cristo, si osservò che certi minerali di ferro, come la magnetite, avevano la proprietà di attrarre piccoli pezzi di ferro. Questa proprietà è mostrata da ferro, cobaldo e manganese e da molti composti di questi metalli. La proprietà non è in relazione con la gravitazione, in quanto non solo in natura non tutti i corpi la presentano, ma inoltre essa appare concentrata in certo punti nel minerale del ferro. Essa è chiaramente non in relazione con l’interazione elettrica, perché né palline di sughero, né pezzi di carta sono attratti affatto da questi minerali. Pertanto un nuovo nome, magnetismo (il nome deriva dall’antica città dell’Asia Minore chiamata Magnesia, dove, secondo la tradizione, il fenomeno fu notato per la prima volta) , fu dato a questa proprietà fisica.

Quando una carica elettrica in quiete viene posta in un campo magnetico, non si osserva nessuna forza o interazione speciale sulla carica.

Però quando una carica elettrica si muove in una regione ove c’è un campo magnetico si osserva una nuova forza sulla carica, oltre a quelle dovute alle interazioni gravitazionali ed elettrica.

La forza esercitata da un campo induzione magnetico su una carica in moto è proporzionale alla carica elettrica ed alla sua velocità e la direzione della forza è perpendicolare alla velocità della carica.

\vec{F}=q\vec{v}\times \vec{B}

Quando la particella è in moto in una regione in cui vi sono un campo elettrico e un campo magnetico, la forza totale è la somma della forza elettrica e della forza induzione magnetica:

\vec{F}=q\left ( \vec{E}+\vec{v}\times \vec{B} \right )

questa espressone è chiamata forza di Lorentz.

[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: Linux aggiunta utente, gruppi[:]

[:it]

Giuseppe Borsato

Prima di tutto con il comando

su

si diventa root.

Con il comando

exit

si torna utente.

Si possono aggiungere gli utenti e gestire i gruppi solo quando si è root.

Prima di tutto si aggiunge un gruppo:

addgroup programmatori

con il comando:

cat /etc/group

vedo la lista dei gruppi:

Adesso aggiungo un utente alla lista dei programmatori con il comando:

useradd -G programmatori marcello

con il comando

cat /etc/group |grep marcello

questo comando fa vedere il contenuto del file di configurazione group presente nella directory etc

vedo a quali gruppi appartiene l’utente marcello

Si può anche usare il comando

groups marcello

Da notare alcune cose molto importanti.

con il comando -G maiuscolo ho creato un utente assegnandoli un gruppo ma il sistema deve assegnare ogni utente ad un gruppo primario. Siccome in questo caso ho semplicemente specificato -G ossia l’associazione del mio utente al gruppo secondario, il mio sistema ha creato anche il gruppo primario marcello.

E’ cosa buona questa?

In realtà la cosa migliore è sempre creare un gruppo primario e poi i vari gruppi secondari a cui associare i vari utenti.

Il gruppo primario è quello che viene usato quando creiamo un file, che diventa anche il gruppo proprietario del file.

I gruppi secondari sono quelli che vengono controllati, oltre a quello primario, quando vogliamo accedere ad un file o ad una risorsa di cui non siamo proprietari.

Per aggiungere la password all’utente marcello si deve usare il comando:

passwd marcello

il sistema chiederà due volte l’inserimento della password.

Per cancellare un utente si usa il comando

deluser marcello

Per aggiungere un utente ad un gruppo si usa il comando:

adduser nomeutente nomegruppo 

ade sempio adduser francesco programmatori

se ho creato un gruppo primario (che deve esistere) e devo creare un nuovo utente devo usare  il comando

adduser -g gruppoprimario -G grupposecondario nomeutente

se poi voglio cancellare il gruppo primario senza aver prima cancellato o spostato tutti gli utenti del gruppo primario il sistema mi fornisce un messaggio:

Se invece cancello il gruppo secondario posso farlo senza problemi come si vede nella videata precedente.

Per cambiare utente si usa il comando

su nomeutente

NOTA FINALE

adduser crea una directory home per l’utente, la popola con il contenuto di / etc / skel e consente di impostare la password in modo interattivo.[:]

Pubblicato in Senza categoria | Lascia un commento

[:it]TPSIT: firewall[:]

[:it]

Eugene Delacroix

Il firewall è uno strumento che è in grado di analizzare il traffico di rete e di gestirlo in base a regole predefinite, può essere un programma software oppure un componente hardware dedicato.

Tutto il traffico di una rete è formato da pacchetti.

Un pacchetto possiede un’intestazione (header) che contiene le informazioni sul pacchetto (indirizzo del mittente, indirizzo di destinazione, porta, ecc.) e un corpo (body) che contiene le informazioni da trasmettere.

Il firewall decide se bloccare o lasciare transitare ogni pacchetto

  • a seconda delle informazioni contenute nell’header
  • la porta sorgente o di destinazione

Quindi avviene un packet filter

Tramite il componente Netfiler si realizzano tutte le componenti avanzate del firewall. Lo strumento per manipolare netfilter si chiama Iptables.

Il sistema netfilter è basato su regole raggruppate in catene (chain), a loro volta raggruppate in tabelle (tables).

Ogni tabella definisce un tipo diverso di operazioni che è possibile effettuare sui pacchetti; ogni catena definisce come vengono trattati i pacchetti nelle diverse fasi della loro elaborazione.

Le tabelle in considerazione sono:

tabella filtro (filter): è responsabile del filtraggio dei pacchetti, permette cioè di bloccarli o di farli passare. Ogni pacchetto passa attraverso la tabella filtro. Essa contiene le seguenti catene predefinite:

  • catena INPUT: tutti i pacchetti destinati al sistema passano attraverso questa catena.
  • catena OUTPUT: tutti i pacchetti creati dal sistema passano attraverso questa catena.
  • catena FORWARD: tutti i pacchetti che hanno come destinazione finale un altro sistema e che non sono stati generati dal sistema stesso, cioè tutti i pacchetti che vengono meramente instradati dal sistema, passano attraverso questa catena.

tabella nat: questa tabella è responsabile dell’impostazione delle regole per la modifica degli indirizzi e porte dei pacchetti. Il primo pacchetto di una connessione passa attraverso questa tabella, e il risultato del passaggio del primo pacchetto determina come tutti gli altri pacchetti della stessa connessione verranno modificati. La tabella nat contiene le seguenti catene predefinite:

  • catena PREROUTING: passano attraverso questa catena i pacchetti in entrata, il passaggio avviene prima che la locale tabella di routing venga consultata per effettuare l’instradamento. Essa è usata per il NAT sulla destinazione o DNAT.
  • catena POSTROUTING: passano attraverso questa catena i pacchetti in uscita dopo che la locale tabella di routing sia stata consultata. Usata per il NAT sulla sorgente o SNAT.
  • catena OUTPUT: permette un DNAT limitato sui pacchetti generati localmente.

tabella mangle: questa tabella è responsabile delle modifiche alle opzioni dei pacchetti, come ad esempio quella che determina la qualità del servizio. Tutti i pacchetti passano attraverso questa tabella. Essa contiene tutte le catene predefinite:

  • catena PREROUTING: esamina tutti i pacchetti che in qualche modo entrano nel sistema. Questo processo avviene prima che il routing decida se il pacchetto debba essere inoltrato (catena FORWARD) o se sia destinato al sistema. Viene utilizzata per manipolare l’header del pacchetto (catena INPUT).
  • catena INPUT: tutti i pacchetti destinati al sistema passano per questa catena.
  • catena FORWARD: tutti i pacchetti che vengono instradati dal sistema ma di cui il sistema non è né sorgente iniziale né destinazione finale, passano per questa catena.
  • catena OUTPUT: tutti i pacchetti generati dal sistema passano per questa catena.
  • catena POSTROUTING: tutti i pacchetti che lasciano il sistema, sia quelli in OUTPUT sia quelli in FORWARD, passano poi per questa catena.

tabella raw: questa tabella, introdotta ufficialmente nel corso dello sviluppo della serie 2.6 del kernel, ha lo scopo di evitare il connection tracking per quei pacchetti che, per una qualche ragione, non si vogliono filtrare in maniera stateful. Le catene previste per la tabella raw sono solo due:

  • catena OUTPUT: in tale catena si andrà ad operare sui pacchetti generati da processi locali.
  • catena PREROUTING: in tale catena si andrà, invece, ad operare sui pacchetti provenienti da qualsiasi interfaccia di rete.

La tabella di default è la tabella filter.

Al termine di ogni catena vi è la politica ACCEPT ossia un pacchetto raggiunge la fine della catena e viene accettato.

ESEMPIO

Si consideri il comando

ossia il comando

sudo iptables -A INPUT -p udp -j DROP

per cancellare la regola ho usato il comando

sudo iptables -F

 

Non avendo specificato alcun indirizzo, né del mittente né del destinatario, viene mostrata la dicitura anywhere.
Le seguenti opzioni consentono di aggiungere, modificare o eliminare determinate regole di una catena:
-A nome_catena
aggiunge una regola in fondo alla catena indicata (append);
-D nome_catena numero_regola
rimuove la regola dalla catena indicata (delete);
-L nome_catena
mostra l’elenco delle regole della catena (senza opzioni mostra le tre catene della tabella filter);
-F nome_catena
svuota una catena (senza opzioni svuota le tre catene della tabella filter).

Le opzioni per descrivere il pacchetto permettono di specificare:
–p il protocollo
–s l’indirizzo IP sorgente
–d l’indirizzo IP destinatario
–i l’interfaccia
–g la catena da attraversare successivamente
–t la tabella (senza alcuna opzione viene usata la tabella filter).

Per esempio, il seguente comando blocca ogni tipo di pacchetto in uscita verso un particolare indirizzo IP (per esempio 123.12.13.12):

sudo iptables –A OUTPUT –d 123.12.13.12 –j DROP

Per bloccare qualsiasi connessione sulla porta 22, proveniente dall’esterno, si deve scrivere il comando:

sudo iptables –A INPUT –p 22 –j DROP

Per impostare il sistema in modo che non venga fornita risposta al comando ping inviato ad una particolare interfaccia di rete (per esempio eth0) si deve utilizzare il comando seguente:

sudo iptables –A INPUT -i eth0 –p icmp –j DROP

Si consideri un altro esempio rappresentato dalla seguente situazione: si supponga di essere connessi alla rete Internet tramite l’interfaccia di rete ppp0 e di avere avviato un server FTP per il trasferimento di file nella rete locale. Per evitare che vi siano dall’esterno, cioè da Internet, connessioni non desiderate di tipo FTP, che utilizzano la porta 21, si deve scrivere il seguente comando:
sudo iptables –A INPUT –p 21 –i ppp0 –j DROP

Analogamente, nel caso di un server Web locale, si può bloccare la porta 80 con il comando seguente:

sudo iptables –A INPUT –p 80 –i ppp0 –j DROP

 [:]

Pubblicato in Senza categoria | Lascia un commento

[:it]GPOI: test sul Pert, dstribuzioni di prrobabilità, analisi costi[:]

[:it]

Jackson Pollock

[WpProQuiz 58][:]

Pubblicato in Senza categoria | Lascia un commento