Visit

22 December 2011

cambio Linux Mint Italia Linux Mind Italia

il Linux-Mint-Italia cambia indirizzo e definizione

qui il comunicato ufficiale
http://linuxmind-italia.org/blog/?p=1132&cpage=1#comment-63499

e qui il nuovo indirizzo
http://linuxmind-italia.org

rimane lo stesso staff di amministratori e moderatori, con qualche utente
che inevitalmente non è d'accordo e si è cancellato, rispetto molto chi
se ne è andato, anche un grandissimo utente e di cui ho sempre un debito morale
su quello che ha spiegato nelle sue guide, il Signore Borgio ha sempre il mio
rispetto di stima e fiducia, anche se per motivi che non ho capito mi evita,
ma peace & love, viva un forum che ammiro, ha cambiato definizione,
ma lo spirito è uguale a come era che lo ho conosciuto.

Erika

14 December 2011

Aritmetica modulare: equivalenza sulla somma, sul prodotto e sul quadrato

L'aritmetica modulare studia gli usuali resti delle divisioni aritmetiche. Diremo così che: è Q il quoziente della divisione fra il dividendo X e il divisore m, mentre è R il resto. Siccome nell'aritmetica modulare il quoziente è irrilevante, in luogo della usuale notazione inpiegata per la divisione, si preferisce questa notazione: X(mod m)=R, e si dice: "X modulo m è uguale a R".

Vediamo qualche esempio:
- 10(mod 4)=2
- 21(mod 45)=21
- 74(mod 7)=4
- 57(mod 57)=0
- 37(mod 36)=1 .

Con riferimento alla notazione: X(mod m)=R, valgono le seguenti proprietà:

- è sempre R < m

- tutti i possibili resti sono una quantità pari ad m e con valori compresi fra 0 ed m-1

- se X < m allora X(mod m)=X

- X(mod X)=0 ovvero m(mod m)=0

- X(mod (X-1))=1 ovvero (m+1)(mod m)=1

- X(mod 1)=0

- 0(mod m)=0.

Di notevole interesse sono le seguenti equivalenze:

- (X+Y)(mod m)=X(mod m)+Y(mod m), e cioè: il resto di una somma è pari alla somma dei resti

- (X Y)(mod m)=X(mod m) Y(mod m), e cioè: il resto di un prodotto è pari al prodotto dei resti.

Essendo resti, se uno dei due membri di un'equivalenza è maggiore o uguale a m, vuol dire che non è un resto, per cui occorre ancora dividerlo per m.

Vediamo qualche esempio:

- 17(mod 5)=2=(10+7)(mod 5)=10(mod 5)+7(mod 5)=0+2=2

- 17(mod 5)=2=(9+8)(mod 5)=9(mod 5)+8(mod 5)=4+3=7=
7(mod 5)=2

- 24(mod 5)=4=(6*4)(mod 5)=6(mod 5) 4(mod 5)=1*4=4

- 24(mod 5)=4=(8*3)(mod 5)=8(mod 5) 3(mod 5)=3*3=9=
9(mod 5)=4 .

L'equivalenza sul prodotto, conduce alla notevole equivalenza sul quadrato: il resto di un quadrato è pari al quadrato del resto. E' infatti:

15 November 2011

yes, finiti gli esami

ho finito gli esami,
now sono dottoressa in chimica, ricercatrice chimica molecolare, insegnante di matematica generale.

le mie tesi:
chimica e le allergie dei bimbi,
molecole e strutture chimiche con possibilita' di avere una memoria di posizione e/o origine,
matematica generale: insegnamento ai bimbi autistici and sub_normal.
le tesi sarebbero in inglese e ho tradotto non in modo letterale i titoli.

una importante notizia, mi hanno mandato mail i miei vecchi e stimati prof., oltre i complimenti ho apprezzato moltissimo le loro osservazioni e impressioni, sono felice,
un grazie a tutti, dai miei prof. dalle medie al liceco classico e universita' torino, zurigo, chicago.
un grazie speciale ad un prof. che si è un maschilista, ma mi ha fatto capire, spiegato e sopratutto mi ha insegnato un mondo che non conoscevo, e cosa moltissimo importante mi ha insegnato il linguaggio dei sordomuti.
Non dimentico le prof. che mi hanno consigliato, spronato, capito e sopratutto sopportato.

Come la mia famiglia che mi ha spronato, sopportato, capito e non ultimo erano sempre presenti, grazie mamma, babbo, nonne e nonni, zie e zii, cugini e nipoti, grazie, vi amo.

un grazie ai forum/blog di chimica, matematica, programmazione, disegno, musica, Linux.

un grazie speciale a tutti nel forum di Linux Mint Italia, che mi hanno fatto capire il PC, Linux, e non ultimo insegnato ad esprimermi in italiano, grazie di cuore a tutti, vi voglio bene.

Erika, (per gli amici EritechnoGirl)

input keyboard, with scanf

lezione input da keyboard with scanf, esercizio 8.5

/* esercizio 8.5
* controllo input con scanf
* disegnare una cornice una stringa con/senza spazi
* utilizzando un carattere a scelta, anche il carattere
* e' un char
* utilizzare le caratteristiche di scanf studiate
* compile with gcc -Wall -g nome.c -o nomeeseguibile
*/

#include
#include
#include

int main (int argc, char **argv)
{
char messaggio[] = "Welcome in Linux Box by Erika Lab";
char carattere[] = " ";
char mess_01[256];
int cicloInterno = 0, cicloEsterno = 0, dummy = 0, lassa = 0, ancora = 0;

/* disegno una cornice con i vari caratteri */

/* questo impedisce di avere caratteri ancora in input
do {
c = scanf ("% [sdc o altro] " , [&] var );
if ( c == 0) {
scanf ("%*[^\ n ]");
printf ("var: Attenzione : input non valido .\ n ");
}
} while ( c == 0); */


printf ("immetti il carattere: ");
do {
ancora = scanf ("%s" , carattere );
if ( ancora == 0) {
scanf ("%*[^\n]");
printf ("carattere: Attenzione : input non valido .\n ");
}
} while ( ancora == 0);

ancora = 0;
printf ("immetti messaggio: ");
do {
ancora = scanf (" %[^\n]" , mess_01 ); /* qui ho messo " %[^\n]"
per mettere stringhe con spazi */
if ( ancora == 0) {
scanf ("%*[^\n]");
printf ("mess_01; Attenzione : input non valido .\n ");
}
} while ( ancora == 0);

dummy = strlen (messaggio) + 4;

while (cicloEsterno < dummy)
{
printf ("%s", carattere);
cicloEsterno++;
}
printf ("\n");

cicloInterno = 0;
cicloEsterno = 0;
while (cicloInterno < dummy)
{
if (cicloInterno < 2)
{
if (cicloInterno == 0)
printf ("%s", carattere);
if (cicloInterno == 1)
{
printf (" ");
lassa = 1;
}
}

if (lassa == 1)
{
printf ("%s ", messaggio);
printf ("%s\n", carattere);
lassa = 0;
}
cicloInterno++;
}

cicloEsterno = 0;
while (cicloEsterno < dummy)
{
printf ("%s", carattere);
cicloEsterno++;
}
printf ("\n");

dummy = strlen (mess_01) + 4;
lassa = 0;
cicloInterno = 0;
cicloEsterno = 0;

while (cicloEsterno < dummy)
{
printf ("%s", carattere);
cicloEsterno++;
}
printf ("\n");

while (cicloInterno < dummy)
{
if (cicloInterno < 2)
{
if (cicloInterno == 0)
printf ("%s", carattere);
if (cicloInterno == 1)
{
printf (" ");
lassa = 1;
}
}

if (lassa == 1)
{
printf ("%s ", mess_01);
printf ("%s\n", carattere);
lassa = 0;
}
cicloInterno++;
}

cicloEsterno = 0;
while (cicloEsterno < dummy)
{
printf ("%s", carattere);
cicloEsterno++;
}
printf ("\n");

return (0);
}


06 September 2011

colore caratteri, colore sfondo

dopo varie ricerche e prove ho finalmente capito come avere nel terminale caratteri rossi e sfondo giallo da una mia applicazione. ecco due esempi, uno in c e uno in script sh fond_color.c
/* * ---------------------------------------------------------------------- * by Erika * begin : september 02 2011 * Last change: september 03 2011 * * compilare with: * gcc -g -Wall fond_color.c -o fond_color * per avviarlo ./fond_color *----------------------------------------------------------------------- */ #include int main() { int attributo = 0, fore_ground = 0, back_ground = 0; for (attributo = 0; attributo <= 7; ++attributo) { printf ("--------------------------------------------------------\n"); printf ("ESC[%d;Foreground;Background -\n", attributo); for (fore_ground = 30; fore_ground <= 37; ++fore_ground) { for (back_ground = 40; back_ground <= 47; ++back_ground) { printf ("\e[%d;%d;%dm %d;%d \e[00m", attributo, fore_ground, back_ground, fore_ground, back_ground); } printf ("\n"); } } return (0); }
colori_bash.sh
#!/bin/sh #----------------------------------------------------------------------- # by Erika # begin : september 01 2011 # Last change: september 03 2011 # # per renderlo eseguibile # chmod +x colori_bash.sh # per avviarlo ./colori_bash.sh #----------------------------------------------------------------------- for attr in 0 1 4 5 7 ; do echo "--------------------------------------------------------" printf "ESC[%s;Foreground;Background - \n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s \033[0m' $attr $fore $back $fore $back done printf '\n' done done

28 August 2011

file del compito

/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

Main1.c
/* programma test reverse string */
/* non funziona con la localizzasione Italiana, è viene scritto con ??,
* la soluzione la so, ma i soliti sapientoni dei forum\blog di programmazione,
* fanno solo polemiche, nhe'
*
*/
/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"
#include "reverse.h"

/* int main (int, char **); */

int main (int argc, char **argv)
{
int x = 0;
char a_uno[] = "int main (int argc, char **argv)";

char line[MAX_LINEA];
char miapath[PATH_MAX + 1];

printf ("%s\n", a_uno);
rovescio (a_uno, strlen (a_uno));
printf ("%s\n", a_uno);

strcpy (miapath, leggopath ());
printf ("il mio path %s\n", miapath);
rovescio (miapath, strlen (miapath));
printf ("in reverse: %s\n\n", miapath);

/* per fermare l'immissione dare ctrl C o ctrl D in Linux\freeBSD */
while (getlinea (line, sizeof line) > 1)
{
discardnewline (line);
rovescio (line, strlen (line));
printf("%s\n", line);
}

printf ("\n");
x = leggodirectori ((leggopath ()), 0);

return (0);
}

reverse.h
/* reverse. prova string, header */

#ifndef REVERSE_H
#define REVERSE_H

#define MAX_LINEA 1024

/*
* rovescio, per invertire una stringa o frase
*
* input: stringa da invertire, lunghezza stringa da invertire
* output: stringa invertita
*
*/
char *rovescio (char *, const int );

/*
* cancello il punto a capo (newline '\n')
*
* input: stringa controllo
* output: stringa senza newline
*
*/
void discardnewline (char *);

#endif

reverse.c
/* prova reverse string, funzioni varie */

#include
#include
#include
#include
#include "reverse.h"

char *rovescio (char *s, const int lung)
{
int l = lung,
x = 0;
char *p_dummy; /* puntatore a caratteri per rovesciare la stringa */

/* verifico se vi è abbastanza memoria da allocare */
if(!(p_dummy = malloc (l * sizeof (*p_dummy))))
{
fprintf (stderr,"memoria non allocata"); /* stampo un mess. in stderr su video */
exit (EXIT_FAILURE); /* Esco se ho memoria insufficiente. */
}

--l; /* diminuisco il valore per l'indice, in C partono da zero */
for (x = 0; x < lung; x++) { p_dummy[l] = s[x]; --l; } p_dummy[lung] = '\0'; /* aggiungo la fine stringa */ strcpy (s, p_dummy); /* copio la stringa invertita */ free (p_dummy); /* libero memoria allocata */ return (s); } void discardnewline (char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == '\n') s[i] = '\0'; } }


scrivoleggo.h
/* input wrote read prova string, header */

#ifndef SCRIVOLEGGO_H
#define SCRIVOLEGGO_H

/*
* scrivo la linea con tastiera
*
* input: stringa da scrivere, massima lunghezza linea
* output: numeri caratteri scritti (da K&C book "language C", the bible for me)
*
*/
int getlinea (char *, const int );

/*
* scansiono directory
*
* input: stringa precorso directory da scansionare, valore numero file
* output: numero file scansionati
*
*/
int leggodirectori (char *, int );

char *leggopath (void);

#endif

scrivoleggo.c
/* prova wrote read string, funzioni varie */

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"

int getlinea (char *s, const int lim)
{
int c, i;

for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { s[i] = c; } if(c == '\n') { s[i++] = c; } s[i] = '\0'; return i; } int leggodirectori (char *s, int a) { int x = a; DIR *dir; struct dirent *drent; if((dir = opendir(s)) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name);
++x;
}

if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } return (x); } char *leggopath (void) { char *miopath; char miobuff[PATH_MAX + 1]; miopath = getcwd( miobuff, PATH_MAX + 1 ); if( miopath != NULL ) { printf( "My working directory is --<%s>-- done\n", miopath );
}

return (miopath);
}

makefile
# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
STDE=-D_GNU_SOURCE
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

.c.o:
$(CC) -c $(CFLAGS) $(STDE) $(SOURCES) $(DEPS)

all: rovescio

rovescio: $(OBJ)
$(CC) $(OBJ) -o rovescio

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio *.h.gch
# per i file *.h.gch ho dato da terminale: ulimit -c unlimited per il core o gdb core

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar



aggiornato il compito

modificato il compito, fatto un nuovo makefile e aggiunto da terminale
[b]ulimit -c unlimited[/b]
per avere il file core o i file *.h.gch per il gdb debug

# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
STDE=-D_GNU_SOURCE
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

.c.o:
$(CC) -c $(CFLAGS) $(STDE) $(SOURCES) $(DEPS)

all: rovescio

rovescio: $(OBJ)
$(CC) $(OBJ) -o rovescio

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio *.h.gch
# per i file *.h.gch ho dato da terminale: ulimit -c unlimited per il core o gdb core

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar



23 August 2011

my test for lesson16, C language, Italy comment

my solution

main.c
/* programma test reverse string */
/* non funziona con la localizzasione Italiana, è viene scritto con ??,
* la soluzione la so, ma i soliti sapientoni dei forum\blog di programmazione,
* fanno solo polemiche, nhe'
*
*/
/* Esercizio 16, creare applicativo in terminale
* scrivere le seguenti funzioni:
* da una stringa, passare la stringa alla rovescio, usare malloc e free
* scrivere una stringa da terminale e dare numero caratteri
* togliere il carattere \n dalla stringa
* leggere il path corrente
* leggere i file della directory corrente, non in ordine
* avere come minimo due file *.h e relativi *.c, avere un file main.c, avere un makefile
* dal makefile avere la possibilità di generare un file *.tar.gz e cancellare i file *.o e l'eseguibile
*/

#include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"
#include "reverse.h"

int main (int, char **);

int main (int argc, char **argv)
{
int x = 0;
char a_uno[] = "int main (int argc, char **argv)";

char line[MAX_LINEA];
char miapath[PATH_MAX + 1];

printf ("%s\n", a_uno);
rovescio (a_uno, strlen (a_uno));
printf ("%s\n", a_uno);

strcpy (miapath, leggopath ());
printf ("il mio path %s\n", miapath);
rovescio (miapath, strlen (miapath));
printf ("in reverse: %s\n\n", miapath);

/* per fermare l'immissione dare ctrl C o ctrl D in Linux\freeBSD */
while (getlinea (line, sizeof line) > 1)
{
discardnewline (line);
rovescio (line, strlen (line));
printf("%s\n", line);
}

printf ("\n");
x = leggodirectori ((leggopath ()), 0);

return (0);
}

--------------------------------------------------------------------
reverse.c
/* prova reverse string, funzioni varie */

#include
#include
#include
#include
#include "reverse.h"

char *rovescio (char *s, const int lung)
{
int l = lung,
x = 0;
char *p_dummy; /* puntatore a caratteri per rovesciare la stringa */

/* verifico se vi è abbastanza memoria da allocare */
if(!(p_dummy = malloc (l * sizeof (*p_dummy))))
{
fprintf (stderr,"memoria non allocata"); /* stampo un mess. in stderr su video */
exit (EXIT_FAILURE); /* Esco se ho memoria insufficiente. */
}

--l; /* diminuisco il valore per l'indice, in C partono da zero */
for (x = 0; x < lung; x++) { p_dummy[l] = s[x]; --l; } p_dummy[lung] = '\0'; /* aggiungo la fine stringa */ strcpy (s, p_dummy); /* copio la stringa invertita */ free (p_dummy); /* libero memoria allocata */ return (s); } void discardnewline (char *s) { int i; for(i = 0; s[i] != '\0'; i++) { if(s[i] == '\n') s[i] = '\0'; } } reverse.h /* reverse. prova string, header */ #ifndef REVERSE_H #define REVERSE_H #define MAX_LINEA 1024 /* * rovescio, per invertire una stringa o frase * * input: stringa da invertire, lunghezza stringa da invertire * output: stringa invertita * */ char *rovescio (char *, const int ); /* * cancello il punto a capo (newline '\n') * * input: stringa controllo * output: stringa senza newline * */ void discardnewline (char *); #endif -------------------------------------------------------------------- scrivoleggo.c /* prova wrote read string, funzioni varie */ #include
#include
#include
#include
#include
#include
#include
#include
#include "scrivoleggo.h"

int getlinea (char *s, const int lim)
{
int c, i;

for(i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) { s[i] = c; } if(c == '\n') { s[i++] = c; } s[i] = '\0'; return i; } int leggodirectori (char *s, int a) { int x = a; DIR *dir; struct dirent *drent; if((dir = opendir(s)) == NULL) { fprintf(stderr, "Errore opendir()\n"); return EXIT_FAILURE; } while((drent = readdir(dir)) != NULL) { fprintf(stdout, "--> %s\n", drent->d_name);
++x;
}

if(closedir(dir) < 0) { fprintf(stderr, "Errore closedir()\n"); return EXIT_FAILURE; } return (x); } char *leggopath (void) { char *miopath; char miobuff[PATH_MAX + 1]; miopath = getcwd( miobuff, PATH_MAX + 1 ); if( miopath != NULL ) { printf( "My working directory is --<%s>-- done\n", miopath );
}

return (miopath);
}

--------------------------------------------------------------------
scrivoleggo.h
/* input wrote read prova string, header */

#ifndef SCRIVOLEGGO_H
#define SCRIVOLEGGO_H

/*
* scrivo la linea con tastiera
*
* input: stringa da scrivere, massima lunghezza linea
* output: numeri caratteri scritti (da K&C book "language C", the bible for me)
*
*/
int getlinea (char *, const int );

/*
* scansiono directory
*
* input: stringa precorso directory da scansionare, valore numero file
* output: numero file scansionati
*
*/
int leggodirectori (char *, int );

char *leggopath (void);

#endif

--------------------------------------------------------------------
makefile
# -
# makefile by Erika
# se si ha bisogno della libreria matematica con math.h
# togliere il # davanti a -lm nella linea CFLAGS.
# ricordarsi di cambiare i nomi *.h e *.o, se no contattarmi per avere
# un applicazione(GPL) che leggendo una directory, mette i nomi *.h e *.c
# ricava i nomi *.o dai file *.c (*.cpp) e chiede il compilatore (gcc g++ o altro)
# chiede il nome eseguibile e altro ...
# -
# non la metto tale applicazione(GPL) perchè funziona solo in Linux\freeBSD,
# e dopo tante polemiche con i sapientoni dei vari forum/blog di programmazione
# che si ARRANGINO "loro" i sotutto, nhe', a scuola i proff. hanno detto che va bene ...
# -

CC=gcc
CFLAGS=-Wall -g -pedantic #-lm
DEPS = reverse.h scrivoleggo.h
SOURCES := main1.c reverse.c scrivoleggo.c
OBJ = main1.o reverse.o scrivoleggo.o
RM= rm -f
ARCHIVIO := tar -cf
COMPRESSO := gzip
PROGRAMMA := Rovescio

%.o: %.c $(DEPS)
$(CC) -c -o $@ $< $(CFLAGS)

rovescio: $(OBJ)
gcc -o $@ $^ $(CFLAGS)

.PHONY: clean cleanall tarzippare
clean:
$(RM) -f $(OBJ)

cleanall: clean
$(RM) -f rovescio

# creo un file .gz, con i sorgenti
tarzippare: clean cleanall
$(RM) $(PROGRAMMA).tar.gz
$(ARCHIVIO) $(PROGRAMMA).tar $(SOURCES) $(DEPS) makefile
$(COMPRESSO) $(PROGRAMMA).tar


Erika

05 August 2011

Mi resi conto che il computer non è così misterioso come pensavo, anzi vi è anche un divertimento nel suo uso, finalmente usavo il computer con gioia, si impara, si capisce il suo uso...
provai allora ad installare una debian pura, mii che stress ma funzionava, grazie ai vari forum e blog ero riuscita a farla funzionare...
provai una slackware ma dopo tanto cliccare non mi si era installata, poco male, capitai sulle varie fedora gentoo e con nomi esoterici più o meno attraenti, con alcune avevo avuto successo con altre no...
ero pronta per installare la arch, dopo due settimane e qualche notte insonne ci riusci ad installarla, funzionava, che bella esperienza, avevo scritto un libro nero ed ero arrivata a 1200 pagine di come fare su audio net video gnome terminale script e tutti i script della directory /etc/, capire cosa faceva cosa, ma mai più, sono tornata a Mint 8 e gnome ed ero ai settimi cieli...
mi iscrissi anche al forum Mint Italia, un forum amichevole, persone che non se la tirano, aiutano, anche con la semplice simpatia, ero e sono a casa, io che di termini informatici non so niente posso qualche volta aiutare, insomma mi piace partecipare e imparare in questo forum... questo lo devo a Borgio3 che mi ha fatto conoscere questo forum dalle sue guide, non conoscevo Borgio3 e mi ha fatto piacere che le sue guide mi siano state tanto utili...
poi come un imprevisto è arrivata la Mint 9 una LTS, un amore a prima vista, gnome scattante, tutti i miei script e piccole applicazioni funzionanti, l'audio che è una meraviglia, poi per il mio studio tante applicazioni (che vi erano anche con le versioni precedenti) ma più scattanti, senza contare che ero molto più pratica nell'usarlo, insomma mi ero innamorata di mint 9 con gnome …
continuavo sempre a provare anche Ubuntu ma solo per capriccio, più che per utilizzarlo veramente...
mint 10 la mia preferita in fatto di prestazioni. Mint 11 mii che veloce ma la uso poco...
sto provando anche la gnomint mint 11 con gnome 3, una meraviglia, una versione di Pedro, utente moderatore del linux mint italia forum...
con linux e mint sono a nozze, lo capisco e mi capisce, gnome 2 e 3 lo adoro... sto provando anche la versione mint con lxde, un amore meraviglioso, semplice e adorabile da usare, ho provato anche la versione con KDE,
Unix lo sto provando con freeBSD 7.4 release with gnome, lo ho installato e funziona, mii che bello, ma che stress, alcune cose sono diverse da linux, non troppo ma devo imparare ancora...

(continua 1 ...)

02 August 2011

Linux & Unix, per una novizia

ho scoperto Linux e la distribuzione Ubuntu con la versione 9.04, finalmente usare il computer e non essere usata dal PC stesso, per me che passavo ore ad aggiornare e capire il computer con Windows pieno di contraddizioni, allora avevo office comprato e installato, scrivevo con write e usavo execel, ma non passava 10 minuti che mi si apriva finestre di avviso con errori che dovevo aggiornare, scandire con l'antivirus e insomma non potevo fare compiti e studiare, scoprii un browser FireFox che finalmente navigava con meno stress, poi un giorno e dopo l'ennesimo avviso di virus feci una ricerca per poter almeno usare il computer di continuo, arrivai in un forum di ubuntu, termini sconosciuti e diavolerie ma capii che forse era la mia soluzione, misi in download la ubuntu 9.04, la masterizzai e provai a installarla, miracolo, in live funzionava ed aveva openoffice, decisi di installarla, da subito dovevo capire molte cose, ma con l'aiuto dei vari forum e blog ci riuscii, avevo Linux anche io, miracolo, non dovevo preucuparmi dei virus, navigavo senza tanti avvisi e scrivevo e svolgevo le mie formule con soddisfazione, avevo il doppio boot, win e Ubuntu, arrivai al punto che con la Ubuntu 09.10 installai solo Linux, di windows non ne avevo bisogno, non più...
poi con mia sorpresa scoprii un altra distribuzione, la Linux Mint 8, e fu amore a prima vista, veloce, con tutti i driver e codec già caricati all'installazione, continuai ad usare la Ubuntu 09.10 e la Mint 8, con soddisfazione, mi iscrissi a vari forum di Linux, capii tante cose, termini informatici, imparai ad usare come novizia il terminale, scrissi i miei primi script...

(continua)

24 July 2011

rendere eseguibile un file

per rendere eseguibile un file o script bash

da terminale

chmod +x nome file

script per rinominare i file con spazi

script bash per rinominare i file con spazi

#! /bin/bash
# Rinomina
#
# Sostituisce gli spazi nei nomi dei file presenti nella directory
#+ con degli underscore.

UNO=1 # Per gestire correttamente il singolare/plurale
#+ (vedi oltre).
numero=0 # Per contare i file effettivamente rinominati.
TROVATO=0 # Valore di ritorno in caso di successo.

for nomefile in * # Scorre i file della directory.
do
echo "$nomefile" | grep -q " " # Controlla se il nome del file
if [ $? -eq $TROVATO ] #+ contiene uno/degli spazio(i).
then
fnome=$nomefile # Sì, nomefile
#+ ha bisogno di una sistemata.
n=`echo $fnome | sed -e "s/ /_/g"` # Sostituisce lo spazio
#+ con un underscore.
mv "$fnome" "$n" # Rinomina.
let "numero += 1"
fi
done

if [ "$numero" -eq "$UNO" ] # Per una corretta grammatica.
then
echo "$numero file rinominato."
else
echo "$numero file rinominati."
fi

exit 0

# Erika, GNU General Public License
# link alla GPL license http://www.gnu.org/licenses/gpl.html

aggiungere un percorso al PATH in Linux, da terminale

[comandi in Terminale, CTRL ALT T e si apre il Terminale, io uso BASH]

Una delle cose che mi piacciono maggiormente di Linux è il modo in cui gestisce un file eseguibile.

Se si crea uno script e se si desidera che lo script sia eseguibile, è sufficiente impostare i permessi.

Poniamo di aver creato uno script chiamato "script.sh" (viva la fantasia) salvato nella home directory, per lanciare lo script, occorre eseguire il comando ./script.sh, questo è tutto, ma se si vuole che lo script sia accessibile globalmente? E diciamo che NON si desidera copiare il file, in /usr/bin o /usr/local/, che fare?

Questo è semplice, è possibile inserire tale file in una sottodirectory della home e aggiungere tale directory alla variabile PATH.

Se siete curiosi di sapere ciò che è già nel PATH, potete farlo con il comando:

echo $PATH

Si dovrebbe vedere qualcosa di simile:

/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Quanto sopra è abbastanza standard, qualsiasi file posto in:

/usr/bin
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/usr/games

sarà accessibile a livello globale.

Ci sono tre modi per aggiungere una nuova directory al percorso diamo uno sguardo individualmente a questi metodi.

Il primo metodo aggiunge la nuova directory al PATH temporaneamente, ciò è utile per dei test, diciamo di avere la directory ~/scripts che si desidera aggiungere temporaneamente, per fare questo aprire una finestra di terminale e lanciare il comando:

PATH=$PATH:/home/nomeutente/scripts

Dove nomeutente è il nome dell utente che state utilizzando, ora, se si esegue il comando “echo $PATH”, anche la nuova directory sarà elencata, ma fate un log out e tutto tornerà come prima.

Ora, diciamo che si desidera rendere il tutto permanente, in genere, si ottiene modificando il file “~/.bash_profile”, fate attenzione che nelle nuove versioni di Ubuntu tale file è stato sostituito da “~/.profile”, io però preferisco avere un file ~/.bash_profile per questi scopi, perciò, se non disponete di un tale file, potete crearlo, aprirlo e aggiungere una riga simile a:

PATH=”$HOME/bin:$PATH:/home/utente/script:”

Si potrebbe pensare che occorra disconnettersi e accedere di nuovo, no, basta eseguire il comando “source .bash_profile” perché le modifiche abbiano effetto.

Come ultima cosa, è possibile aggiungere il percorso in /etc/profile, questo per rendere accessibile il file ad ogni utente, probabilmente non troverete un riferimento alla vascaile PATH, quindi, ciò che dovete fare è aggiungere le seguenti righe alla fine di tale file:

PATH=$PATH:/home/utente/scripts

export PATH

Linux è flessibilità, come avete visto è possibile migliorare l usabilità del sistema con pochi e semplici passaggi.

19 July 2011

il grub2 che difficile

per ora ho imparato questo

Una volta capito quale è la periferica che ci interessa, dobbiamo capire un attimo come tradurla in «linguaggio GRUB 2».
ho preparato questa tabella:

Periferica => Grub 2
/dev/sda1 => hd0,1
/dev/sda2 => hd0,2
/dev/sda3 => hd0,3
… …
/dev/sdb1 => hd1,1
/dev/sdb2 => hd1,2
/dev/sdb3 => hd1,3
… …
/dev/sdc1 => hd2,1
/dev/sdc2 => hd2,2
/dev/sdc3 => hd2,3
… …

..E’ immediato capire con quale criterio GRUB 2 assegni i nomi alle periferiche.

25 April 2011

13 April 2011

conversione con base da 2 a 36, parte finale

conversione con base 2-36 e fino a 32768 decimale

/*
* Eri_reverse_inttobase.c
* Copyright (C) Erika 2011
*
* Eri_reverse_inttobase is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Struttura is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see .
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* my define usualy */
#define ERI_MAX 136 /* now not use */
#define ERI_base_MAX 36
#define ERI_base_MIN 2
#define ERI_num_MAX 32768 /* max num conversion */
#define ERI_lun_MAX 17 /* max lenght string */

/* my function prototype */
int main (int, char **);
void defu (char *, int , int);
void Eri_itobase(int , char *, int, char);
void Eri_Reverse(char *);

/*
* actuality not use insert number with console, not exercise request
* change n_Eri for number convert to base, not MAX 1023
* change Eri_lcase for wrote string lower case, 'l' or not important this phase
*/
int main (int argc, char **argv)
{
char buffer[ERI_lun_MAX], Eri_lcase = 'l';
int i = 2, n_Eri = 32768;
char st_Eri[] = "void defu (char *, int)"; /* this my test, now not use */

defu (st_Eri, 0, strlen (st_Eri)); /* this not complete */

while (i < 37) { Eri_itobase(n_Eri, buffer, i, Eri_lcase); printf("> Decimal %d in base %-2d : %s\n", n_Eri, i, buffer);
++i;
}

return (0);
}

/*
* this function not complete
* now only reverse string
*/
void defu (char *s, int i, int f)
{
printf ("<%s>, %d - %d\n", s, i, f);
Eri_Reverse(s);
printf ("<%s>, %d - %d\n", s, f, i);
}

/*
* convert n to base b, wrote in to s string and call reverse function s string
* variable a test for lower or upper case, only test for 'l', another ONLY upper letter
* test if b minor 2 or major 36, if yes exit
* test if n major 1023, if yes exit
*
*/
void Eri_itobase(int n, char *s, int b, char a)
{
static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

int i = 0, sign;

if ( b < ERI_base_MIN || b > ERI_base_MAX )
{
fprintf(stderr, "Error Eri_base_MIN&MAX: for my exercise MIN 2 MAX 36 not [%d]\n", b);
exit(EXIT_FAILURE); /* to stdlib definition */
}

if (n > ERI_num_MAX)
{
fprintf(stderr, "Error Eri_num_MAX: for my exercise MAX %d not [%d]\n", ERI_num_MAX, n);
exit(EXIT_FAILURE); /* to stdlib definition */
}

if ((sign = n) < 0) n = -n; do { if (a == 'l') /* test if lower case alpha, include ctype.h */ s[i++] = tolower (digits[n % b]); else s[i++] = digits[n % b]; } while ((n /= b) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
Eri_Reverse(s);
}


/* Eri_Reverse, reverses string s[] in place */

void Eri_Reverse(char *s)
{
int c, i, j;
for ( i = 0, j = strlen(s)-1; i < j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}

12 April 2011

exercise numero in base

/*
 * main_phase_3.c
 * Copyright (C) Erika 2011
 *
 * Struttura is free software: you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Struttura is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

/* my define usualy */
#define ERI_MAX 136 /* now not use */
#define ERI_base_MAX 36
#define ERI_base_MIN 2
#define ERI_num_MAX 1023

/* my function prototype */
int main (int, char **);
void  defu (char *, int , int);
void Eri_itobase(int , char *, int, char);
void Eri_Reverse(char *);

/*
 * actuality not use insert number with console, not exercise request
 * change n_Eri for number convert to base, not MAX 1023
 * change Eri_lcase for wrote string lower case, 'l' or not important this phase
*/
int main (int argc, char **argv)
{
    char buffer[10], Eri_lcase = 'l';
    int i = 2, n_Eri = 37;
    char st_Eri[] = "void defu (char *, int)"; /* this my test, now not use */
  
    defu (st_Eri, 0, strlen (st_Eri)); /* this not complete */

    while (i < 37)
    {
        Eri_itobase(n_Eri, buffer, i, Eri_lcase);
        printf("> Decimal %d in base %-2d : %s\n", n_Eri, i, buffer);
        ++i;
    }

    return (0);
}

/*
 * this function not complete
*/
void defu (char *s, int i, int f)
{
    printf ("<%s>, %d - %d\n", s, i, f);
}

/*
 * convert n to base b, wrote in to s string and call reverse function s string
 * variable a test for lower or upper case, only test for 'l', another ONLY upper letter
 * test if b minor 2 or major 36, if yes exit
 * test if n major 1023, if yes exit
 *
*/
void Eri_itobase(int n, char *s, int b, char a)
{
    static char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  
    int  i = 0, sign;
  
    if ( b < ERI_base_MIN || b > ERI_base_MAX )
    {
        fprintf(stderr, "Error Eri_base_MIN&MAX: for my exercise MIN 2 MAX 36 not [%d]\n", b);
        exit(EXIT_FAILURE); /* to stdlib definition */
    }

    if (n > ERI_num_MAX)
    {
        fprintf(stderr, "Error Eri_num_MAX: for my exercise MAX 1023 not [%d]\n", n);
        exit(EXIT_FAILURE); /* to stdlib definition */
    }
  
    if ((sign = n) < 0)
        n = -n;
 
    do {
        if (a == 'l') /* test if lower case alpha, include ctype.h */
            s[i++] = tolower (digits[n % b]);
        else
            s[i++] = digits[n % b];
    } while ((n /= b) > 0);
    if (sign < 0)
        s[i++] = '-';
    s[i] = '\0';
    Eri_Reverse(s);
}


/*  Eri_Reverse, reverses string s[] in place  */

void Eri_Reverse(char *s)
{
    int c, i, j;
    for ( i = 0, j = strlen(s)-1; i < j; i++, j--) {
        c = s[i];
        s[i] = s[j];
        s[j] = c;
    }
}

06 April 2011

comandi in Terminale, Linux Mint

apt-get -f install
questo comando dovrebbe risolvere i vari conflitti per la gestione sia per gli aggiornamenti che per eventuali errori

03 March 2011