<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LorenzoV</id>
	<title>Sistemi Operativi - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://so.v2.cs.unibo.it/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=LorenzoV"/>
	<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php/Special:Contributions/LorenzoV"/>
	<updated>2026-05-04T13:49:18Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.5</generator>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_12/02/2009&amp;diff=831</id>
		<title>Esercizio 1, prova pratica 12/02/2009</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=Esercizio_1,_prova_pratica_12/02/2009&amp;diff=831"/>
		<updated>2014-11-25T17:35:52Z</updated>

		<summary type="html">&lt;p&gt;LorenzoV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ho provato a svolgere l'esercizio 1 dell'esame di laboratorio del 2 febbraio 2009 ([http://www.cs.unibo.it/~renzo/so/pratiche/2009.02.12.pdf]).&lt;br /&gt;
&lt;br /&gt;
Consegna:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Esercizio1 (obbligatorio): (10 punti)&lt;br /&gt;
Scrivere un programma C denominato “invarg” che esegua il programma passato come parametro invertendo gli argomenti.&lt;br /&gt;
Esempio:&lt;br /&gt;
invarg cat a b c&lt;br /&gt;
deve avere l'effetto di&lt;br /&gt;
cat c b a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di Maldus==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc , char* argv[]){&lt;br /&gt;
	char *nargv[argc-1] ;	/*nargv è il vettore degli argomenti da passare al programma da eseguire*/&lt;br /&gt;
	int i , j ;		/*puntatori che scorrono, rispettivamente, argv ed nargv per riempire correttamente nargv*/&lt;br /&gt;
	nargv[0] = argv[1] ;	/*il primo valore di nargv deve essere il programma chiamato, l'ultimo deve essere NULL*/&lt;br /&gt;
	nargv[argc-1] = NULL ;&lt;br /&gt;
	for( i = argc - 1 , j = 1 ; i &amp;gt; 1 , j &amp;lt; (argc - 1) ; i-- , j++ ) nargv[j] = argv[i] ;	/*metto in nargv (dal secondo elemento in poi) gli argomenti presenti &lt;br /&gt;
in argv in ordine invertito*/&lt;br /&gt;
	execvp( nargv[0] , nargv  ) ;	/*eseguo il programma (il cui nome è contenuto in nargv[0]) passandogli nargv come vettore di parametri*/&lt;br /&gt;
	fprintf( stderr , &amp;quot;programma errato\n&amp;quot; ) ;	/*se ci troviamo in questo punto significa che la chiamata a execvp è fallita, probabilmente&lt;br /&gt;
 perchè il programma indicato non è stato trovato*/&lt;br /&gt;
	exit(1) ;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di Eddy==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void scambia_ordine(int argc, char **argv, int j);&lt;br /&gt;
&lt;br /&gt;
int main(int argc , char* argv[])&lt;br /&gt;
{&lt;br /&gt;
	if (argc &amp;lt; 2) return 2;&lt;br /&gt;
	argv++;	argc--;&lt;br /&gt;
	scambia_ordine(argc, argv, 1);&lt;br /&gt;
	execvp(argv[0], argv);&lt;br /&gt;
	perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
	return 3;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* piccola funzione ricorsiva che:&lt;br /&gt;
 * -memorizza in tmp gli argomenti dalla fine&lt;br /&gt;
 * -assegna ad argv in ordine inverso&lt;br /&gt;
 *&lt;br /&gt;
 *  non scambia il primo argomento&lt;br /&gt;
 */&lt;br /&gt;
void scambia_ordine(int argc, char **argv, int j)&lt;br /&gt;
{&lt;br /&gt;
	char *tmp;&lt;br /&gt;
	if (argc &amp;gt; 1){&lt;br /&gt;
		tmp = argv[argc-1];&lt;br /&gt;
		scambia_ordine (argc-1, argv, j+1);&lt;br /&gt;
		argv[j]=tmp;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[User:Eddy|Eddy]] ([[User talk:Eddy|talk]]) 21:00 Saturday, 22 November 2014 (CET)&lt;br /&gt;
&lt;br /&gt;
==Soluzione di GFede==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void scambia(int offset, int argc, char* argv[]);&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
   if(argc &amp;lt;= 1)&lt;br /&gt;
   {&lt;br /&gt;
      printf(&amp;quot;Usage: invarg.exe command [arguments...]\n&amp;quot;);&lt;br /&gt;
      return 2;&lt;br /&gt;
   }&lt;br /&gt;
   scambia(2, argc - 1, argv);&lt;br /&gt;
&lt;br /&gt;
   execvp(argv[1], argv + 1);&lt;br /&gt;
   perror(&amp;quot;execvp&amp;quot;);&lt;br /&gt;
   return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Scambia le stringhe all'interno dell'array&lt;br /&gt;
 * void scambia&lt;br /&gt;
 * int offset     Indice da cui iniziare a scambiare&lt;br /&gt;
 * int argc       Numero di valori nell'array (Compreso l'offset)&lt;br /&gt;
 * char* argv[]   array di stringhe da scambiare&lt;br /&gt;
 */&lt;br /&gt;
void scambia(int offset, int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
   int i;&lt;br /&gt;
   char* tmp;&lt;br /&gt;
   for( i = offset; i &amp;lt; argc - i + offset; i++ )&lt;br /&gt;
   {&lt;br /&gt;
      tmp = argv[i];&lt;br /&gt;
      argv[i] = argv[argc - i + offset];&lt;br /&gt;
      argv[argc - i + offset] = tmp;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Soluzione di LorenzoV==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void swap(char **p, char **q){		// La swap modifica solo i puntatori&lt;br /&gt;
	char *tmp;&lt;br /&gt;
	tmp=*p;&lt;br /&gt;
	*p=*q;&lt;br /&gt;
	*q=tmp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[]){	&lt;br /&gt;
	char **begin, **end;&lt;br /&gt;
	if (argc&amp;lt;3){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Usage:\n\t%s command ...arguments...\n&amp;quot;, argv[0]);&lt;br /&gt;
		exit(1);	&lt;br /&gt;
	}	&lt;br /&gt;
	begin=argv+2;&lt;br /&gt;
	end=argv+argc-1;&lt;br /&gt;
	while (begin&amp;lt;end){		// Inverte i parametri passati al comando&lt;br /&gt;
		swap(begin, end);&lt;br /&gt;
		begin++;&lt;br /&gt;
		end--;&lt;br /&gt;
	}&lt;br /&gt;
	execvp(argv[1], argv+1);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:LorenzoV|LorenzoV]] ([[User talk:LorenzoV|talk]]) 18:35, 25 November 2014 (CET)&lt;/div&gt;</summary>
		<author><name>LorenzoV</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=792</id>
		<title>(Programma C) Un quadrato nella matrice</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=792"/>
		<updated>2014-11-01T16:31:30Z</updated>

		<summary type="html">&lt;p&gt;LorenzoV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo è un problema uscito per le fasi di qualificazione della Facebook Hacker Cup 2014.&lt;br /&gt;
Il codice sorgente del programma di seguito riportato è in grado di riconoscere se in una matrice quadrata è presente un quadrato &amp;quot;pieno&amp;quot;: il programma accetta in '''input''' un file come da esempio:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
....&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
#...&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
####&lt;br /&gt;
#..#&lt;br /&gt;
#..#&lt;br /&gt;
####&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
.....&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dove il primo intero T indica il numero di casi (o test) e gli altri interi n indicano la grandezza di ogni matrice nxn.&amp;lt;br&amp;gt;&lt;br /&gt;
Valgono i seguenti vincoli: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ T ≤ 20&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ N ≤ 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Seguendo questo esempio, in '''output''' il programma stamperà le seguenti righe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Case #1: YES&lt;br /&gt;
Case #2: NO&lt;br /&gt;
Case #3: NO&lt;br /&gt;
Case #4: NO&lt;br /&gt;
Case #5: YES&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La matrice n. 2 contiene un # fuori dal quadrato, la matrice n. 3 contiene un quadrato non riempito e la matrice n. 4 contiene un rettangolo.&amp;lt;br&amp;gt;&lt;br /&gt;
Ecco il codice della mia soluzione:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct coordinate{&lt;br /&gt;
    int x;&lt;br /&gt;
    int y;&lt;br /&gt;
}coord;&lt;br /&gt;
&lt;br /&gt;
int max(int x, int y){&lt;br /&gt;
    if (x&amp;gt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int min(int x, int y){&lt;br /&gt;
    if (x&amp;lt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
	FILE *fin;&lt;br /&gt;
	const int N=20;&lt;br /&gt;
	int i, j, k, h, n, T, M[N][N];&lt;br /&gt;
	int acase, find;&lt;br /&gt;
	coord asx, adx, bsx, bdx;&lt;br /&gt;
	char str[N];&lt;br /&gt;
	fin = fopen(&amp;quot;input.txt&amp;quot;,&amp;quot;r&amp;quot;);&lt;br /&gt;
	if (fin == NULL){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Error opening file\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;T);&lt;br /&gt;
	if (T&amp;gt;20 || T&amp;lt;1){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Number of test cases not valid\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	for (k=0; k&amp;lt;T; k++){&lt;br /&gt;
        fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
        if (n&amp;gt;N){&lt;br /&gt;
            fprintf(stderr, &amp;quot;Number of cells too high\n&amp;quot;);&lt;br /&gt;
            exit(1);&lt;br /&gt;
        }&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            fscanf(fin, &amp;quot;%s&amp;quot;, &amp;amp;str);&lt;br /&gt;
            for (j=0; j&amp;lt;n; j++){&lt;br /&gt;
                M[i][j]=str[j];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        asx.x=asx.y=-1;&lt;br /&gt;
        adx.x=adx.y=-1;&lt;br /&gt;
        bsx.x=bsx.y=-1;&lt;br /&gt;
        bdx.x=bdx.y=-1;&lt;br /&gt;
        /*Angolo in alto a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    asx.x=i;&lt;br /&gt;
                    asx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in alto a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    adx.x=i;&lt;br /&gt;
                    adx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bsx.x=i;&lt;br /&gt;
                    bsx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bdx.x=i;&lt;br /&gt;
                    bdx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Verifico che non sia un rettangolo*/&lt;br /&gt;
        acase=1;&lt;br /&gt;
        if (max(bsx.x, bdx.x)-min(asx.x, adx.x)!=max(bsx.y, bdx.y)-min(asx.y, adx.y)){&lt;br /&gt;
            acase=0;&lt;br /&gt;
        } else {&lt;br /&gt;
            /*Verifico se il quadrato è pieno*/&lt;br /&gt;
            for (i=min(asx.x, adx.x); i&amp;lt;=max(bsx.x, bdx.x); i++){&lt;br /&gt;
                for (j=min(asx.y, adx.y); j&amp;lt;=max(bsx.y, bdx.y); j++){&lt;br /&gt;
                    if (M[i][j]!='#'){&lt;br /&gt;
                        acase=0;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (acase) printf(&amp;quot;Case #%i: YES\n&amp;quot;, k+1);&lt;br /&gt;
        else printf(&amp;quot;Case #%i: NO\n&amp;quot;, k+1);&lt;br /&gt;
	}&lt;br /&gt;
	fclose(fin);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:LorenzoV|LorenzoV]] ([[User talk:LorenzoV|talk]]) 17:25, 1 November 2014 (CET)&lt;/div&gt;</summary>
		<author><name>LorenzoV</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=791</id>
		<title>(Programma C) Un quadrato nella matrice</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=791"/>
		<updated>2014-11-01T16:25:37Z</updated>

		<summary type="html">&lt;p&gt;LorenzoV: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo è un problema uscito per le fasi di qualificazione della Facebook Hacker Cup 2014.&lt;br /&gt;
Il codice sorgente del programma di seguito riportato è in grado di riconoscere se in una matrice quadrata è presente un quadrato &amp;quot;pieno&amp;quot;: il programma accetta in '''input''' un file come da esempio:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
....&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
#...&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
####&lt;br /&gt;
#..#&lt;br /&gt;
#..#&lt;br /&gt;
####&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
.....&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dove il primo intero T indica il numero di casi (o test) e gli altri interi n indicano la grandezza di ogni matrice nxn.&amp;lt;br&amp;gt;&lt;br /&gt;
Valgono i seguenti vincoli: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ T ≤ 20&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ N ≤ 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Seguendo questo esempio, in '''output''' il programma stamperà le seguenti righe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Case #1: YES&lt;br /&gt;
Case #2: NO&lt;br /&gt;
Case #3: NO&lt;br /&gt;
Case #4: NO&lt;br /&gt;
Case #5: YES&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La matrice n. 2 contiene un # fuori dal quadrato, la matrice n. 3 contiene un quadrato non riempito e la matrice n. 4 contiene un rettangolo.&amp;lt;br&amp;gt;&lt;br /&gt;
Ecco il codice della mia soluzione:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct coordinate{&lt;br /&gt;
    int x;&lt;br /&gt;
    int y;&lt;br /&gt;
}coord;&lt;br /&gt;
&lt;br /&gt;
int max(int x, int y){&lt;br /&gt;
    if (x&amp;gt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int min(int x, int y){&lt;br /&gt;
    if (x&amp;lt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
	FILE *fin, *fout;&lt;br /&gt;
	const int N=20;&lt;br /&gt;
	int i, j, k, h, n, T, M[N][N];&lt;br /&gt;
	int acase, find;&lt;br /&gt;
	coord asx, adx, bsx, bdx;&lt;br /&gt;
	char str[N];&lt;br /&gt;
	fin = fopen(&amp;quot;input.txt&amp;quot;,&amp;quot;r&amp;quot;);&lt;br /&gt;
	if (fin == NULL){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Error opening file\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;T);&lt;br /&gt;
	if (T&amp;gt;20 || T&amp;lt;1){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Number of test cases not valid\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	for (k=0; k&amp;lt;T; k++){&lt;br /&gt;
        fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
        if (n&amp;gt;N){&lt;br /&gt;
            fprintf(stderr, &amp;quot;Number of cells too high\n&amp;quot;);&lt;br /&gt;
            exit(1);&lt;br /&gt;
        }&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            fscanf(fin, &amp;quot;%s&amp;quot;, &amp;amp;str);&lt;br /&gt;
            for (j=0; j&amp;lt;n; j++){&lt;br /&gt;
                M[i][j]=str[j];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        asx.x=asx.y=-1;&lt;br /&gt;
        adx.x=adx.y=-1;&lt;br /&gt;
        bsx.x=bsx.y=-1;&lt;br /&gt;
        bdx.x=bdx.y=-1;&lt;br /&gt;
        /*Angolo in alto a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    asx.x=i;&lt;br /&gt;
                    asx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in alto a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    adx.x=i;&lt;br /&gt;
                    adx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bsx.x=i;&lt;br /&gt;
                    bsx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bdx.x=i;&lt;br /&gt;
                    bdx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Verifico che non sia un rettangolo*/&lt;br /&gt;
        acase=1;&lt;br /&gt;
        if (max(bsx.x, bdx.x)-min(asx.x, adx.x)!=max(bsx.y, bdx.y)-min(asx.y, adx.y)){&lt;br /&gt;
            acase=0;&lt;br /&gt;
        } else {&lt;br /&gt;
            /*Verifico se il quadrato è pieno*/&lt;br /&gt;
            for (i=min(asx.x, adx.x); i&amp;lt;=max(bsx.x, bdx.x); i++){&lt;br /&gt;
                for (j=min(asx.y, adx.y); j&amp;lt;=max(bsx.y, bdx.y); j++){&lt;br /&gt;
                    if (M[i][j]!='#'){&lt;br /&gt;
                        acase=0;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (acase) printf(&amp;quot;Case #%i: YES\n&amp;quot;, k+1);&lt;br /&gt;
        else printf(&amp;quot;Case #%i: NO\n&amp;quot;, k+1);&lt;br /&gt;
	}&lt;br /&gt;
	fclose(fin);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--[[User:LorenzoV|LorenzoV]] ([[User talk:LorenzoV|talk]]) 17:25, 1 November 2014 (CET)&lt;/div&gt;</summary>
		<author><name>LorenzoV</name></author>
	</entry>
	<entry>
		<id>https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=790</id>
		<title>(Programma C) Un quadrato nella matrice</title>
		<link rel="alternate" type="text/html" href="https://so.v2.cs.unibo.it/wiki/index.php?title=(Programma_C)_Un_quadrato_nella_matrice&amp;diff=790"/>
		<updated>2014-11-01T16:21:44Z</updated>

		<summary type="html">&lt;p&gt;LorenzoV: Created page with &amp;quot;Questo è un problema uscito per le fasi di qualificazione della Facebook Hacker Cup 2014. Il codice sorgente del programma di seguito riportato è in grado di riconoscere se ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Questo è un problema uscito per le fasi di qualificazione della Facebook Hacker Cup 2014.&lt;br /&gt;
Il codice sorgente del programma di seguito riportato è in grado di riconoscere se in una matrice quadrata è presente un quadrato &amp;quot;pieno&amp;quot;: il programma accetta in '''input''' un file come da esempio:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
....&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
..##&lt;br /&gt;
..##&lt;br /&gt;
#...&lt;br /&gt;
....&lt;br /&gt;
4&lt;br /&gt;
####&lt;br /&gt;
#..#&lt;br /&gt;
#..#&lt;br /&gt;
####&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
.....&lt;br /&gt;
5&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
#####&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dove il primo intero T indica il numero di casi (o test) e gli altri indicano la grandezza di ogni matrice nxn.&amp;lt;br&amp;gt;&lt;br /&gt;
Valgono i seguenti vincoli: &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ T ≤ 20&amp;lt;br&amp;gt;&lt;br /&gt;
1 ≤ N ≤ 20&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Seguendo questo esempio, in '''output''' il programma stamperà le seguenti righe:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Case #1: YES&lt;br /&gt;
Case #2: NO&lt;br /&gt;
Case #3: NO&lt;br /&gt;
Case #4: NO&lt;br /&gt;
Case #5: YES&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La matrice n. 2 contiene un # fuori dal quadrato, la matrice n. 3 contiene un quadrato non riempito e la matrice n. 4 contiene un rettangolo.&amp;lt;br&amp;gt;&lt;br /&gt;
Ecco il codice della mia soluzione:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef struct coordinate{&lt;br /&gt;
    int x;&lt;br /&gt;
    int y;&lt;br /&gt;
}coord;&lt;br /&gt;
&lt;br /&gt;
int max(int x, int y){&lt;br /&gt;
    if (x&amp;gt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int min(int x, int y){&lt;br /&gt;
    if (x&amp;lt;y) return x;&lt;br /&gt;
    else return y;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char *argv[]){&lt;br /&gt;
	FILE *fin, *fout;&lt;br /&gt;
	const int N=20;&lt;br /&gt;
	int i, j, k, h, n, T, M[N][N];&lt;br /&gt;
	int acase, find;&lt;br /&gt;
	coord asx, adx, bsx, bdx;&lt;br /&gt;
	char str[N];&lt;br /&gt;
	fin = fopen(&amp;quot;input.txt&amp;quot;,&amp;quot;r&amp;quot;);&lt;br /&gt;
	if (fin == NULL){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Error opening file\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;T);&lt;br /&gt;
	if (T&amp;gt;20 || T&amp;lt;1){&lt;br /&gt;
		fprintf(stderr, &amp;quot;Number of test cases not valid\n&amp;quot;);&lt;br /&gt;
		exit(1);&lt;br /&gt;
	}&lt;br /&gt;
	for (k=0; k&amp;lt;T; k++){&lt;br /&gt;
        fscanf(fin, &amp;quot;%d&amp;quot;, &amp;amp;n);&lt;br /&gt;
        if (n&amp;gt;N){&lt;br /&gt;
            fprintf(stderr, &amp;quot;Number of cells too high\n&amp;quot;);&lt;br /&gt;
            exit(1);&lt;br /&gt;
        }&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            fscanf(fin, &amp;quot;%s&amp;quot;, &amp;amp;str);&lt;br /&gt;
            for (j=0; j&amp;lt;n; j++){&lt;br /&gt;
                M[i][j]=str[j];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        asx.x=asx.y=-1;&lt;br /&gt;
        adx.x=adx.y=-1;&lt;br /&gt;
        bsx.x=bsx.y=-1;&lt;br /&gt;
        bdx.x=bdx.y=-1;&lt;br /&gt;
        /*Angolo in alto a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    asx.x=i;&lt;br /&gt;
                    asx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in alto a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=0; j&amp;lt;n &amp;amp;&amp;amp; !find; j++){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    adx.x=i;&lt;br /&gt;
                    adx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a sinistra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=0; i&amp;lt;n; i++){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bsx.x=i;&lt;br /&gt;
                    bsx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Angolo in basso a destra*/&lt;br /&gt;
        find=0;&lt;br /&gt;
        for (i=n; i&amp;gt;=0; i--){&lt;br /&gt;
            for (j=n; j&amp;gt;=0 &amp;amp;&amp;amp; !find; j--){&lt;br /&gt;
                if (M[i][j]=='#'){&lt;br /&gt;
                    bdx.x=i;&lt;br /&gt;
                    bdx.y=j;&lt;br /&gt;
                    find=1;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        /*Verifico che non sia un rettangolo*/&lt;br /&gt;
        acase=1;&lt;br /&gt;
        if (max(bsx.x, bdx.x)-min(asx.x, adx.x)!=max(bsx.y, bdx.y)-min(asx.y, adx.y)){&lt;br /&gt;
            acase=0;&lt;br /&gt;
        } else {&lt;br /&gt;
            /*Verifico se il quadrato è pieno*/&lt;br /&gt;
            for (i=min(asx.x, adx.x); i&amp;lt;=max(bsx.x, bdx.x); i++){&lt;br /&gt;
                for (j=min(asx.y, adx.y); j&amp;lt;=max(bsx.y, bdx.y); j++){&lt;br /&gt;
                    if (M[i][j]!='#'){&lt;br /&gt;
                        acase=0;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        if (acase) printf(&amp;quot;Case #%i: YES\n&amp;quot;, k+1);&lt;br /&gt;
        else printf(&amp;quot;Case #%i: NO\n&amp;quot;, k+1);&lt;br /&gt;
	}&lt;br /&gt;
	fclose(fin);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>LorenzoV</name></author>
	</entry>
</feed>