Entrada/Salida (Standard)

Anuncio
Entrada/Salida (Standard)
Clase 6
Introducción a la Computación
Patricia Borensztejn
Euler 3
The prime factors of 13195 are 5, 7, 13 and 29.
What is the largest prime factor of the number 600851475143 ?
Euler 3: Algoritmo
• Encontrar los factores primos de un número, se llama
factorizar. Por lo tanto necesitamos saber como se
factoriza, es decir, encontrar el algoritmo de la
factorización.
• Usaremos el que se enseña en los colegios. Consiste
en partir del número y dividirlo por 2 tantas veces
como sea posible, cuando ya no es mas posible,
entonces lo dividimos por 3 tantas veces como sea
posible, y asi sucesivamente. Podemos saltarnos los
pares, porque ya dividimos por 2 tantas veces como
sea posible….El algoritmo finaliza cuando llegamos al 1
Factorización
524
262
2
Factorización
524
2
262
2
131
Factorización
524
2
262
2
131
131
1
Pruebo con 2, con 3, con 5, 7, 9…. hasta 131
Cuando da 1, termino
524=22*131
Euler 3 (printf)
• Veamos el programa
int main()
{
unsigned long long numero = 600851475143LLU;
int factor;
printf("Factor Primo de %llu\n",numero);
while(numero % 2 == 0) numero = numero / 2;
for (factor = 3; numero > 1; factor+=2){
while(numero % factor == 0) numero = numero / factor;
}
printf("El resultado es %d\n",factor-=2);
return 0;
Euler 3 (scanf)
• Veamos el programa
int main()
{
unsigned long long int numero;
int factor;
printf("Ingresa el número a factorizar ");
scanf( "%llu",&numero);
printf("Factor Primo de %llu\n",numero);
while(numero % 2 == 0) numero = numero / 2;
for (factor = 3; numero > 1; factor+=2){
while(numero % factor == 0) numero = numero / factor;
}
printf("El resultado es %d\n",factor-=2);
return 0;
Entrada/Salida
• Las operaciones de
entrada/salida no son parte
del lenguaje C.
• La biblioteca standard
contiene un conjunto de
funciones que proporcionan
entrada y salida, manipulación
de caracteres, manejo de
memoria, rutinas matemáticas
y una variedad de otros
servicios para programas en C.
• Las propiedades de las
funciones de la biblioteca
están especificadas en mas de
una docena de archivos .h
(headers) . Por ejemplo:
stdio.h
ctype.h
string.h
math.h
stdlib.h
time.h
Archivos Header
• Los archivos header contienen información
sobre la función, pero no el código de la
función. Es decir: contienen su interface con el
programa: su entrada y su salida. Esto se
denomina el prototipo de la función. Los
archivos de header se guardan en el directorio
/include de la distribución del compilador.
• La implementación de la función se guarda en
el directorio /lib
Printf
• La función de salida printf traduce valores internos a
caracteres.
• Convierte, da formato e imprime sus argumentos en la
salida standard bajo el control de format. Devuelve el
número de caracteres impresos
int printf (char *format, arg1,arg2,…..)
• La cadena de formato contiene dos tipos de objetos:
caracteres ordinarios, que son copiados al flujo de
salida, y especificaciones de conversión, cada uno de
los cuales causa la conversión e impresión de los
siguientes argumentos.
Printf
int printf (char *format, arg1,arg2,…..)
printf("El factor mas grande de %llu es %d\n", numero, factor-=2);
Printf
• Cada especificación de conversión comienza
con un % y termina con un carácter de
conversión. Entre el % y el carácter de
conversión pueden estar, en orden
Printf
Scanf
• Lee caracteres de la entrada estándar y los
interpreta de acuerdo con las especificaciones
que están en format y almacena los resultados
a través de los argumentos restantes. El resto
de los argumentos indican donde deberá
almacenarse la entrada correspondiente, por
lo tanto…. deberán ser apuntadores.
scanf( "%llu",&numero);
Valor y Dirección de una Variable
• Para asignarle un valor a la variable lo hacemos de la siguiente
manera:
var1=3456 ;
Esto se lee así: en la dirección de memoria var1 guardar el valor 3456
var1=var2;
Esto se lee así: en la dirección de memoria var1 guardar el valor almacenado en la
dirección de memoria var2
• Es decir:
– Cuando la variable está a la izquierda de la asignación, se interpreta
como una dirección
– Cuando la variable está a la derecha de la asignación, sola o formando
parte de expresiones mas complejas, se interpreta como un valor.
• Y, cual es esa dirección? Puedo saberlo?
– Si, puedo saberlo y usar esa dirección: en C es &var1
var2=&var1;
O bien
printf ("la dirección de la variable var es %i y su valor es %i\n", &var1, var1);
Punteros en C
• Bueno, solo para confundir :
– Si hacemos esta asignación:
• a= &var1;
Lo que hemos creado (o sea, a) es un puntero.
0
b=a+var1; // b=04+D204=D208
1
b=(*a)+var1; // b=D204+D204=1A408
2
3
Fijense que &a= 0006 hexa
var1
a=a+2 ; // ahora a vale 08 y ya no es mas igual a var1
a
TODO ESTO y MUCHO MAS EN: ARITMÉTICA DE PUNTEROS
4
04
5
6
D2
04
7
00
Scanf
• La dirección de numero es &numero
600851475143
8BE589EAC7
numero
0
C7
1
EA
2
3
89
E5
4
8B
5
00
6
00
7
00
Entrada /Salida en Python
• Función raw_input: devuelve una cadena
>>> s=raw_input()
hola como estas
>>> print s
hola como estas
>>>
>>> i=raw_input("Escribe algo ")
Escribe algo hola
>>> i
'hola'
>>>
Operador %
• Es el operador de formato en Python.
• %d, el valor se muestra como int
• %s, el valor se muestra como string (ya veremos los
strings)
• El operador % va a ser removido del lenguaje!!!! Lo que
se viene es: format
Print con format
>>> for x in range(1,11):
... print "{0:2d} {1:3d} {2:4}".format(x,x*x,x*x*x)
...
1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729
10 100 1000
>>>
Esta es una función
propia de las cadenas
Esto es una cadena
Descargar