Difference between revisions of "Esercizi a caso del Prof."

From Sistemi Operativi
Jump to navigation Jump to search
Line 34: Line 34:
 
* [Python3] (io ho fatto un Quine in python3 con il metodo ''format''... perché non ci provate ache voi? rd20131101)
 
* [Python3] (io ho fatto un Quine in python3 con il metodo ''format''... perché non ci provate ache voi? rd20131101)
  
Non sono riuscito in nessun modo a creare un quine usando la .format in python 2, ciò che occorreva per riuscirci era di poter usare la funzione repr() solo su certi fields ed altri no... cosa che grazie a questa pagina http://www.python.org/dev/peps/pep-3101/ ho scoperto possibile con !r usato dentro i fields...
+
 
 +
 
 +
 
 +
 
 +
*Non sono riuscito in nessun modo a creare un quine usando la .format in python 2, ciò che occorreva per riuscirci era di poter usare la funzione repr() solo su certi fields ed altri no... cosa che grazie a questa pagina http://www.python.org/dev/peps/pep-3101/ ho scoperto possibile con !r usato dentro i fields...
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
 
import string
 
import string

Revision as of 16:18, 1 November 2013

Cominciamo da una sfida:

Il programma che stampa se stesso

scrivere un programma che produca in output se stesso: i.e. non prevede input e l'output deve essere identico al sorgente.

Vince chi produce il programma piu' compatto (in ogni linguaggio).

Però non dovete fare come in questo tentativo. il programma deve stampare se stesso senza leggere il proprio sorgente! (è proprio quella la sfida divertente!, rd 20131027). Per il Pyhton il programma vuoto non vale, è una soluzione banale. Ecco un altro tentativo errato.

  print(__file__) 

non e' non Quine in Python 3.x perché stampa il proprio parametro, non il proprio sorgente. In caso contrario anche il comando echo sarebbe un Quine!

  • [Python] beccatevi questo (da Federico A. e Alessio G.):
    La prima versione con due variabili
     a='a=%r;b=%r;print a%%(a,b)';b='b=%r;print a%%(a,b)';print a%(a,b)
    
    Per capire meglio la logica del format ci siamo sbizzarriti
     a = 'a = %r ; b = %r ; c = %r ; print a%%(a,b,c) ' ; b = 'b = %r ; c = %r ; print a%%(a,b,c) ' ; c = 'c = %r ; print a%%(a,b,c) ' ; print a%(a,b,c)
    
  1. %% fuori stringa corrisponde ad un solo %.
  2. print a%(a,b,c) corrisponderebbe in C a printf(a,a,b,c).
  • [C] beccatevi anche questo (da Alessio G. e Federico A.):

Usando la stessa logica del programma in "pitone" lo abbiamo rielaborato in C:

/*Printf stampa la stringa s e sostituisce ad ogni occorrenza di %c i caratteri ascii corrispondenti ai numeri: 9 = \t , 10 = \n , 34 = \"  .
Il %s corrisponde alla stringa.*/
#include <stdio.h>
	char s[] = "#include <stdio.h>%c%cchar s[]=%c%s%c;%cvoid main(void){%c%cprintf(s,10,9,34,s,34,10,9,10,9,10);%c%c}%c";
void main(void){
       printf(s,10,9,34,s,34,10,10,9,10,9,10);  
	}

(bravi Alessio e Federico, questi sono proprio Quine!, rd 20131101)

  • [Python3] (io ho fatto un Quine in python3 con il metodo format... perché non ci provate ache voi? rd20131101)



  • Non sono riuscito in nessun modo a creare un quine usando la .format in python 2, ciò che occorreva per riuscirci era di poter usare la funzione repr() solo su certi fields ed altri no... cosa che grazie a questa pagina http://www.python.org/dev/peps/pep-3101/ ho scoperto possibile con !r usato dentro i fields...
import string
a='import string{1}a={0!r}{1}print(a.format(a,{1!r}))'
print(a.format(a,'\n'))

Programmi semplici

riscrivere le funzioni strcpy, strcmp, strncmp etc... (quelle elencate da "man 3 string") in C e in Python.

scrivere una funzione che controlli se una stringa e' palindroma (C python)

Una miniera di esercizi

Rosetta Stone. Tantissimi problemi risolti con tantissimi linguaggi.