Compartir

C/C++. Curso de programación. 5 ed

Sinopsis del producto

"C es uno de los lenguajes de programación mÔs populares. Permite realizar una programación estructurada sin límite a la creatividad del programador; ademÔs, los compiladores C tienen la ventaja de producir programas reducidos y muy rÔpidos en su ejecución. Por ello, muchos paquetes de software estÔn escritos en C.
Puesto que C++ fue desarrollado a partir del lenguaje de programación C, con pocas excepciones incluye a C, de ahĆ­ el tĆ­tulo de este libro. Esta parte de C incluida en C++ es conocida como C– y podrĆ­a compilarse como C++ sin problemas. No obstante, cuando se utiliza C++ para lo que fue pensado, esto es, para realizar una programación orientada a objetos, los conocimientos nuevos que hay que adquirir son cuantiosos.
Este libro es el primero de una colección de tres:
1. C/C++: Curso de programación
2. Programación orientada a objetos con C++
3. Enciclopedia de C++
que cubren el camino que hay que recorrer para llegar a desarrollar aplicaciones orientadas a objetos. El libro tercero incluye a los dos anteriores pero con un nuevo enfoque, ya que estĆ” basado exclusivamente en la biblioteca de C++.

C/C++: Curso de programación es un libro:
• Totalmente actualizado al estĆ”ndar ISO/IEC 9899:2011, relativo al lenguaje C estĆ”ndar (C11).
• Con ejemplos claros y sencillos, fĆ”ciles de entender, que ilustran los fundamentos de la programación C.
• Que le permitirĆ” aprender lógica de programación.
• Que le enseƱarĆ” a trabajar con estructuras estĆ”ticas y dinĆ”micas de datos y con archivos, y a utilizar algoritmos de uso comĆŗn.
• Con el que adquirirĆ” unos elevados conocimientos en esta materia.
• Con el que aprenderĆ” a desarrollar aplicaciones.
• Y con el que adquirirĆ” la base necesaria para pasar a la programación orientada a objetos con C++.

Incluye material adicional con todos los ejemplos realizados y con los URL del software necesario para que el lector pueda reproducirlos durante el estudio."

"CONTENIDO
PRƓLOGO
CAPƍTULO 1. FASES EN EL DESARROLLO DE UN PROGRAMA
QUƉ ES UN PROGRAMA
LENGUAJES DE PROGRAMACIƓN
Compiladores
IntƩrpretes
ĀæQUƉ ES C?
HISTORIA DEL LENGUAJE C
Lenguaje C++
REALIZACIƓN DE UN PROGRAMA EN C
Edición de un programa
¿Qué hace este programa?
Guardar el programa escrito en el disco
Compilar y ejecutar el programa
Biblioteca de funciones
Guardar el programa ejecutable en el disco
Depurar un programa
UN AVANCE SOBRE LA PROGRAMACIƓN CON C
Entrada y salida
Sentencias de control
Funciones
Matrices
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
VIII C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 2. ELEMENTOS DEL LENGUAJE C
PRESENTACIƓN DE LA SINTAXIS DE C
CARACTERES DE C
Letras, dƭgitos y carƔcter de subrayado
Espacios en blanco
Caracteres especiales y signos de puntuación
Secuencias de escape
TIPOS DE DATOS
Tipos primitivos
char
bool
short
int
long
long long
enum
Creación de una enumeración
float
double
long double
Ejemplo: tipos de datos
Otros tipos enteros
Tipos complejo e imaginario
Tipos derivados
SINƓNIMOS DE UN TIPO
LITERALES
Literales enteros
Literales reales
Literales de un solo carƔcter
Literales de cadenas de caracteres
IDENTIFICADORES
PALABRAS CLAVE
COMENTARIOS
DECLARACIƓN DE CONSTANTES SIMBƓLICAS
Constantes C++
¿Por qué utilizar constantes?
DECLARACIƓN DE UNA VARIABLE
Iniciación de una variable
EXPRESIONES NUMƉRICAS
OPERADORES
Operadores aritmƩticos
Operadores de relación
CONTENIDO IX
Operadores lógicos
Operadores unitarios
Operadores a nivel de bits
Operadores de asignación
Operador condicional
Otros operadores
Operador sizeof
Operador coma
Operador dirección-de
Operador de indirección
PRIORIDAD Y ORDEN DE EVALUACIƓN
CONVERSIƓN ENTRE TIPOS DE DATOS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 3. ESTRUCTURA DE UN PROGRAMA
ESTRUCTURA DE UN PROGRAMA C
Directrices para el preprocesador
Directriz de inclusión
Directriz de sustitución
Definiciones y declaraciones
Sentencia simple
Sentencia compuesta o bloque
Funciones
Declaración de una función
Definición de una función
Llamada a una función
Función main
Un ejemplo
PASANDO ARGUMENTOS A LAS FUNCIONES
PROGRAMA C FORMADO POR MÚLTIPLES ARCHIVOS
ƁMBITO DE UNA VARIABLE
Variables globales y locales
CLASES DE ALMACENAMIENTO DE UNA VARIABLE.
Calificación de variables globales
Calificación de variables locales
Calificación de funciones
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
X C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 4. ENTRADA Y SALIDA ESTƁNDAR
DATOS NUMƉRICOS Y CADENAS DE CARACTERES
FLUJOS DE E/S ESTƁNDAR
SALIDA CON FORMATO
Infinito y NaN
Macros para código independiente de la plataforma
ENTRADA CON FORMATO
CARƁCTER FIN DE ARCHIVO
CARƁCTER n
LEER UN CARƁCTER DE LA ENTRADA ESTƁNDAR
LIMPIAR EL BUFFER DE LA ENTRADA ESTƁNDAR
ESCRIBIR UN CARƁCTER EN LA SALIDA ESTƁNDAR
LEER UNA CADENA DE CARACTERES
VALIDAR UN DATO DE ENTRADA
REUTILIZAR CƓDIGO
LIMPIAR LA PANTALLA
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 5. SENTENCIAS DE CONTROL
SENTENCIA if
ANIDAMIENTO DE SENTENCIAS if
ESTRUCTURA else if
SENTENCIA switch
SENTENCIA while
Bucles anidados
SENTENCIA do while
SENTENCIA for
SENTENCIA break
SENTENCIA continue
SENTENCIA goto
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 6. TIPOS ESTRUCTURADOS DE DATOS
INTRODUCCIƓN A LAS MATRICES
MATRICES NUMƉRICAS UNIDIMENSIONALES
Definir una matriz
Acceder a los elementos de una matriz
CONTENIDO XI
Trabajar con matrices unidimensionales
Matrices de longitud variable
Iniciar una matriz
Matrices asociativas
CADENAS DE CARACTERES
Leer y escribir una cadena de caracteres
Funciones gets_s y fgets
Función puts
Trabajar con cadenas de caracteres
Funciones de la biblioteca de C
TIPO Y TAMAƑO DE UNA MATRIZ
MATRICES MULTIDIMENSIONALES
Matrices numƩricas multidimensionales
Matrices de cadenas de caracteres
COPIAR MATRICES
TRABAJAR CON BLOQUES DE BYTES
ESTRUCTURAS
Acceso a los miembros de una estructura
Crear una estructura
Definir variables de un tipo de estructura
Miembros que son estructuras
Operaciones con estructuras
Matrices de estructuras
UNIONES
Estructuras variables
CAMPOS DE BITS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 7. PUNTEROS
CREACIƓN DE PUNTEROS
Operadores
Importancia del tipo del objeto al que se apunta
OPERACIONES CON PUNTEROS
Operación de asignación
Operaciones aritmƩticas
Comparación de punteros
Punteros genƩricos
Puntero nulo
Calificadores
PUNTEROS Y MATRICES
XII C/C++: CURSO DE PROGRAMACIƓN
Punteros a cadenas de caracteres
MATRICES DE PUNTEROS
Punteros a punteros
Matriz de punteros a cadenas de caracteres
Ordenar matrices de cadenas de caracteres
ASIGNACIƓN DINƁMICA DE MEMORIA
Funciones para administrar dinƔmicamente la memoria
malloc
free
Reasignar un bloque de memoria
MATRICES DINƁMICAS
Matrices dinƔmicas numƩricas
Matrices dinÔmicas de una dimensión
Matrices dinƔmicas de dos dimensiones
Matrices dinƔmicas de cadenas de caracteres
PUNTEROS A ESTRUCTURAS
PUNTEROS COMO PARƁMETROS EN FUNCIONES
DECLARACIONES COMPLEJAS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 8. MƁS SOBRE FUNCIONES
PASAR UNA MATRIZ COMO ARGUMENTO A UNA FUNCIƓN
Matrices estƔticas
Matrices dinƔmicas
PASAR UN PUNTERO COMO ARGUMENTO A UNA FUNCIƓN
PASAR UNA ESTRUCTURA A UNA FUNCIƓN
DATOS RETORNADOS POR UNA FUNCIƓN
Retornar una copia de los datos
Retornar un puntero al bloque de datos.
Retornar la dirección de una variable declarada static
ARGUMENTOS EN LA LƍNEA DE ƓRDENES
REDIRECCIƓN DE LA ENTRADA Y DE LA SALIDA
FUNCIONES EN LƍNEA
FUNCIONES RECURSIVAS
PUNTEROS A FUNCIONES
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CONTENIDO XIII
CAPƍTULO 9. TRABAJAR CON FICHEROS
VISIƓN GENERAL DE LOS FLUJOS DE E/S
VISIƓN GENERAL DE UN ARCHIVO
ABRIR UN ARCHIVO
fopen
freopen
CERRAR UN ARCHIVO
fclose
MANIPULACIƓN DE ERRORES
ferror
clearerr
feof
perror
POSICIƓN DEL PUNTERO DE L/E
ftell
fseek
rewind
E/S CARƁCTER A CARƁCTER
fputc
fgetc
E/S DE CADENAS DE CARACTERES
fputs
fgets
ENTRADA/SALIDA CON FORMATO
fprintf
fscanf
E/S UTILIZANDO REGISTROS
fwrite
fread
ABRIENDO ARCHIVOS PARA ACCESO SECUENCIAL
Un ejemplo de acceso secuencial
ESCRIBIR DATOS EN UNA IMPRESORA
Escribir en una impresora USB
CONTROL DEL BUFFER ASOCIADO CON UN FLUJO.
setvbuf
fflush
ARCHIVOS TEMPORALES
tmpfile
ABRIENDO ARCHIVOS PARA ACCESO ALEATORIO
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
XIV C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 10. EL PREPROCESADOR DE C
DIRECTRIZ #define
Macros predefinidas
Funciones en lĆ­nea frente a macros
El operador #
El operador ##
DIRECTRIZ #undef
DIRECTRIZ #include
COMPILACIƓN CONDICIONAL
Operador defined
DIRECTRIZ #pragma
CONSTANTE DEFINIDA EN LA ORDEN DE COMPILACIƓN
DIRECTRICES #ifdef e #ifndef
DIRECTRIZ "

9788499648125

Sierra, Ceballos

Sinopsis del producto

"C es uno de los lenguajes de programación mÔs populares. Permite realizar una programación estructurada sin límite a la creatividad del programador; ademÔs, los compiladores C tienen la ventaja de producir programas reducidos y muy rÔpidos en su ejecución. Por ello, muchos paquetes de software estÔn escritos en C.
Puesto que C++ fue desarrollado a partir del lenguaje de programación C, con pocas excepciones incluye a C, de ahĆ­ el tĆ­tulo de este libro. Esta parte de C incluida en C++ es conocida como C– y podrĆ­a compilarse como C++ sin problemas. No obstante, cuando se utiliza C++ para lo que fue pensado, esto es, para realizar una programación orientada a objetos, los conocimientos nuevos que hay que adquirir son cuantiosos.
Este libro es el primero de una colección de tres:
1. C/C++: Curso de programación
2. Programación orientada a objetos con C++
3. Enciclopedia de C++
que cubren el camino que hay que recorrer para llegar a desarrollar aplicaciones orientadas a objetos. El libro tercero incluye a los dos anteriores pero con un nuevo enfoque, ya que estĆ” basado exclusivamente en la biblioteca de C++.

C/C++: Curso de programación es un libro:
• Totalmente actualizado al estĆ”ndar ISO/IEC 9899:2011, relativo al lenguaje C estĆ”ndar (C11).
• Con ejemplos claros y sencillos, fĆ”ciles de entender, que ilustran los fundamentos de la programación C.
• Que le permitirĆ” aprender lógica de programación.
• Que le enseƱarĆ” a trabajar con estructuras estĆ”ticas y dinĆ”micas de datos y con archivos, y a utilizar algoritmos de uso comĆŗn.
• Con el que adquirirĆ” unos elevados conocimientos en esta materia.
• Con el que aprenderĆ” a desarrollar aplicaciones.
• Y con el que adquirirĆ” la base necesaria para pasar a la programación orientada a objetos con C++.

Incluye material adicional con todos los ejemplos realizados y con los URL del software necesario para que el lector pueda reproducirlos durante el estudio."

"CONTENIDO
PRƓLOGO
CAPƍTULO 1. FASES EN EL DESARROLLO DE UN PROGRAMA
QUƉ ES UN PROGRAMA
LENGUAJES DE PROGRAMACIƓN
Compiladores
IntƩrpretes
ĀæQUƉ ES C?
HISTORIA DEL LENGUAJE C
Lenguaje C++
REALIZACIƓN DE UN PROGRAMA EN C
Edición de un programa
¿Qué hace este programa?
Guardar el programa escrito en el disco
Compilar y ejecutar el programa
Biblioteca de funciones
Guardar el programa ejecutable en el disco
Depurar un programa
UN AVANCE SOBRE LA PROGRAMACIƓN CON C
Entrada y salida
Sentencias de control
Funciones
Matrices
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
VIII C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 2. ELEMENTOS DEL LENGUAJE C
PRESENTACIƓN DE LA SINTAXIS DE C
CARACTERES DE C
Letras, dƭgitos y carƔcter de subrayado
Espacios en blanco
Caracteres especiales y signos de puntuación
Secuencias de escape
TIPOS DE DATOS
Tipos primitivos
char
bool
short
int
long
long long
enum
Creación de una enumeración
float
double
long double
Ejemplo: tipos de datos
Otros tipos enteros
Tipos complejo e imaginario
Tipos derivados
SINƓNIMOS DE UN TIPO
LITERALES
Literales enteros
Literales reales
Literales de un solo carƔcter
Literales de cadenas de caracteres
IDENTIFICADORES
PALABRAS CLAVE
COMENTARIOS
DECLARACIƓN DE CONSTANTES SIMBƓLICAS
Constantes C++
¿Por qué utilizar constantes?
DECLARACIƓN DE UNA VARIABLE
Iniciación de una variable
EXPRESIONES NUMƉRICAS
OPERADORES
Operadores aritmƩticos
Operadores de relación
CONTENIDO IX
Operadores lógicos
Operadores unitarios
Operadores a nivel de bits
Operadores de asignación
Operador condicional
Otros operadores
Operador sizeof
Operador coma
Operador dirección-de
Operador de indirección
PRIORIDAD Y ORDEN DE EVALUACIƓN
CONVERSIƓN ENTRE TIPOS DE DATOS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 3. ESTRUCTURA DE UN PROGRAMA
ESTRUCTURA DE UN PROGRAMA C
Directrices para el preprocesador
Directriz de inclusión
Directriz de sustitución
Definiciones y declaraciones
Sentencia simple
Sentencia compuesta o bloque
Funciones
Declaración de una función
Definición de una función
Llamada a una función
Función main
Un ejemplo
PASANDO ARGUMENTOS A LAS FUNCIONES
PROGRAMA C FORMADO POR MÚLTIPLES ARCHIVOS
ƁMBITO DE UNA VARIABLE
Variables globales y locales
CLASES DE ALMACENAMIENTO DE UNA VARIABLE.
Calificación de variables globales
Calificación de variables locales
Calificación de funciones
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
X C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 4. ENTRADA Y SALIDA ESTƁNDAR
DATOS NUMƉRICOS Y CADENAS DE CARACTERES
FLUJOS DE E/S ESTƁNDAR
SALIDA CON FORMATO
Infinito y NaN
Macros para código independiente de la plataforma
ENTRADA CON FORMATO
CARƁCTER FIN DE ARCHIVO
CARƁCTER n
LEER UN CARƁCTER DE LA ENTRADA ESTƁNDAR
LIMPIAR EL BUFFER DE LA ENTRADA ESTƁNDAR
ESCRIBIR UN CARƁCTER EN LA SALIDA ESTƁNDAR
LEER UNA CADENA DE CARACTERES
VALIDAR UN DATO DE ENTRADA
REUTILIZAR CƓDIGO
LIMPIAR LA PANTALLA
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 5. SENTENCIAS DE CONTROL
SENTENCIA if
ANIDAMIENTO DE SENTENCIAS if
ESTRUCTURA else if
SENTENCIA switch
SENTENCIA while
Bucles anidados
SENTENCIA do while
SENTENCIA for
SENTENCIA break
SENTENCIA continue
SENTENCIA goto
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 6. TIPOS ESTRUCTURADOS DE DATOS
INTRODUCCIƓN A LAS MATRICES
MATRICES NUMƉRICAS UNIDIMENSIONALES
Definir una matriz
Acceder a los elementos de una matriz
CONTENIDO XI
Trabajar con matrices unidimensionales
Matrices de longitud variable
Iniciar una matriz
Matrices asociativas
CADENAS DE CARACTERES
Leer y escribir una cadena de caracteres
Funciones gets_s y fgets
Función puts
Trabajar con cadenas de caracteres
Funciones de la biblioteca de C
TIPO Y TAMAƑO DE UNA MATRIZ
MATRICES MULTIDIMENSIONALES
Matrices numƩricas multidimensionales
Matrices de cadenas de caracteres
COPIAR MATRICES
TRABAJAR CON BLOQUES DE BYTES
ESTRUCTURAS
Acceso a los miembros de una estructura
Crear una estructura
Definir variables de un tipo de estructura
Miembros que son estructuras
Operaciones con estructuras
Matrices de estructuras
UNIONES
Estructuras variables
CAMPOS DE BITS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 7. PUNTEROS
CREACIƓN DE PUNTEROS
Operadores
Importancia del tipo del objeto al que se apunta
OPERACIONES CON PUNTEROS
Operación de asignación
Operaciones aritmƩticas
Comparación de punteros
Punteros genƩricos
Puntero nulo
Calificadores
PUNTEROS Y MATRICES
XII C/C++: CURSO DE PROGRAMACIƓN
Punteros a cadenas de caracteres
MATRICES DE PUNTEROS
Punteros a punteros
Matriz de punteros a cadenas de caracteres
Ordenar matrices de cadenas de caracteres
ASIGNACIƓN DINƁMICA DE MEMORIA
Funciones para administrar dinƔmicamente la memoria
malloc
free
Reasignar un bloque de memoria
MATRICES DINƁMICAS
Matrices dinƔmicas numƩricas
Matrices dinÔmicas de una dimensión
Matrices dinƔmicas de dos dimensiones
Matrices dinƔmicas de cadenas de caracteres
PUNTEROS A ESTRUCTURAS
PUNTEROS COMO PARƁMETROS EN FUNCIONES
DECLARACIONES COMPLEJAS
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CAPƍTULO 8. MƁS SOBRE FUNCIONES
PASAR UNA MATRIZ COMO ARGUMENTO A UNA FUNCIƓN
Matrices estƔticas
Matrices dinƔmicas
PASAR UN PUNTERO COMO ARGUMENTO A UNA FUNCIƓN
PASAR UNA ESTRUCTURA A UNA FUNCIƓN
DATOS RETORNADOS POR UNA FUNCIƓN
Retornar una copia de los datos
Retornar un puntero al bloque de datos.
Retornar la dirección de una variable declarada static
ARGUMENTOS EN LA LƍNEA DE ƓRDENES
REDIRECCIƓN DE LA ENTRADA Y DE LA SALIDA
FUNCIONES EN LƍNEA
FUNCIONES RECURSIVAS
PUNTEROS A FUNCIONES
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
CONTENIDO XIII
CAPƍTULO 9. TRABAJAR CON FICHEROS
VISIƓN GENERAL DE LOS FLUJOS DE E/S
VISIƓN GENERAL DE UN ARCHIVO
ABRIR UN ARCHIVO
fopen
freopen
CERRAR UN ARCHIVO
fclose
MANIPULACIƓN DE ERRORES
ferror
clearerr
feof
perror
POSICIƓN DEL PUNTERO DE L/E
ftell
fseek
rewind
E/S CARƁCTER A CARƁCTER
fputc
fgetc
E/S DE CADENAS DE CARACTERES
fputs
fgets
ENTRADA/SALIDA CON FORMATO
fprintf
fscanf
E/S UTILIZANDO REGISTROS
fwrite
fread
ABRIENDO ARCHIVOS PARA ACCESO SECUENCIAL
Un ejemplo de acceso secuencial
ESCRIBIR DATOS EN UNA IMPRESORA
Escribir en una impresora USB
CONTROL DEL BUFFER ASOCIADO CON UN FLUJO.
setvbuf
fflush
ARCHIVOS TEMPORALES
tmpfile
ABRIENDO ARCHIVOS PARA ACCESO ALEATORIO
EJERCICIOS RESUELTOS
EJERCICIOS PROPUESTOS
XIV C/C++: CURSO DE PROGRAMACIƓN
CAPƍTULO 10. EL PREPROCESADOR DE C
DIRECTRIZ #define
Macros predefinidas
Funciones en lĆ­nea frente a macros
El operador #
El operador ##
DIRECTRIZ #undef
DIRECTRIZ #include
COMPILACIƓN CONDICIONAL
Operador defined
DIRECTRIZ #pragma
CONSTANTE DEFINIDA EN LA ORDEN DE COMPILACIƓN
DIRECTRICES #ifdef e #ifndef
DIRECTRIZ "

9788499648125

Sierra, Ceballos

Ver mƔs
Ver menos

$90.529,00

99999 disponibles

*Precios vƔlidos solo para compras online.
Costo de envĆ­o      Medios de pago
mp-logo-hand-shake
Hasta 12 pagos sin tarjeta con Mercado Pago. Saber mƔs
Compra con Mercado Pago sin tarjeta y paga mes a mes
1
Agrega tu producto al carrito y al momento de pagar, elige ā€œCuotas sin Tarjetaā€ o ā€œMeses sin Tarjetaā€.
2
Inicia sesión en Mercado Pago.
3
Elige la cantidad de pagos que se adapten mejor a ti ”y listo!

Crédito sujeto a aprobación.

ĀæTienes dudas? Consulta nuestra Ayuda.

Con esta compra sumƔs 90529 puntos
Comprar ahora

Especificaciones

Tapa blanda o Bolsillo
Argentina
EspaƱol / Castellano
Producto a la venta formado por un Ćŗnico componente
Ra-Ma
20/02/2020
170mm X 240mm X 0mm
ISBN 9788499648125

QuizƔs te interese

Valoraciones

No hay valoraciones aĆŗn.

ĀæYa lo leĆ­ste? ValorĆ” “C/C++. Curso de programación. 5 ed”

Creado por Livriz