OPERADORES
® Operadores Aritméticos
® Operadores de Asignación
® Operadores de Bits
® Operadores de Comparación
® Operadores de Control de Errores
® Operador de Ejecución
® Operadores de Incremento/decremento
® Operadores Lógicos
® Operador de cadenas de texto
® Operadores de Matrices
® Operadores de Tipo
® Precedencia y asociatividad de operandos
5.1. Operadores Aritméticos
Disponemos de los clásicos operadores aritméticos:
Operación Nombre Resultado
$a + $b Suma Suma de $a y $b.
$a - $b Resta Diferencia entre $a y $b.
$a * $b Multiplicación Producto de $a y $b.
$a / $b División Cociente de $a y $b.
$a % $b Módulo Resto de la operación $a / $b.
-$a Negación El opuesto de $a
5.2. Operadores de Asignación
El operador básico de asignación es "=". A primera vista podrías pensar que es el
operador de comparación "igual que". Pero no. Realmente significa que el operando de
la izquierda toma el valor de la expresión a la derecha, (esto es, "toma el valor de").
El valor de una expresión de asignación es el propio valor asignado. Esto es, el
valor de "$a = 3" es 3. Esto permite hacer cosas curiosas como
$a = ($b = 4) + 5; // ahora $a es igual a 9, y $b vale 4.
Además del operador básico de asignación, existen los "operadores combinados"
para todas las operaciones aritméticas y de cadenas que sean binarias. Este operador
combinado permite, de una sola vez, usar una variable en una expresión y luego
establecer el valor de esa variable al resultado de la expresión. Por ejemplo:
$a = 3;
$a += 5; // establece $a a 8, como si hubiésemos escrito: $a = $a + 5;
$b = "Hola ";
$b .= "Ahí!"; // establece $b a "Hola Ahí!", igual que si hiciésemos $b = $b . "Ahí!";
Al igual que en C, C++ y Java, en PHP se dispone de estos operadores
combinados para, en una sola operación, operar sobre una variable y asignarle a esa
misma variable el resultado. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
60
Las operaciones susceptibles de ser usadas con estos operadores son:
+ - * / % & ^ . >> y <<
resultando en los nuevos signos de operación-asignación:
+= -= *= /= %= &= ^= .= >>= y <<=
Ejemplos de uso:
$var1 += 3; // $var1 = $var1 + 3;
$var2 /= 2; // $var2 = $var2 / 2;
$var3 >>= 1; // $var3 = $var3 >> 1;
Fíjese en que la asignación realiza una nueva copia de la variable original
(asignación por valor), por lo que cambios a la variable original no afectan a la copia.
Esto puede tener interés si necesitas copiar algo como un array con muchos elementos
dentro de un bucle que se repita muchas veces (cada vez se realizará una nueva copia
del array). PHP soporta asignación por referencia, usando la sintaxis $var =
&$othervar; , pero esto no es posible en PHP3. 'Asignación por referencia' quiere decir
que ambas variables acabarán apuntando al mismo dato y que nada es realmente
copiado. A partir de PHP5 los objetos son asignados por referencia a menos que
explícitamente se diga lo contrario con la nueva palabra clave clone.
5.3. Operadores de bits
Veamos ahora los operadores BIT a BIT de que dispone PHP:
Operación Nombre Resultado
$a & $b Y Se ponen a 1 los bits que están a 1 en $a y $b.
$a | $b O Se ponen a 1 los bits que están a 1 en $a o $b.
$a ^ $b
O Exclusivo
(XOR)
Se ponen a 1 los bits que están a 1 en $a o $b, pero no
en ambos.
~ $a No Se invierten los bits (se cambian 1 por 0 y viceversa.)
$a << $b Desp. Izq.
Desplaza $b posiciones a la izquierda todos los bits de
$a (cada posición supone multiplicar por dos).
$a >> $b Desp. Drch.
Desplaza $b posiciones a la derecha todos los bits de $a
(cada posición supone dividir por dos).
5.4. Operadores de Comparación
Los operadores de comparación, como su nombre indica, permiten comparar dos
valores.
Operación Nombre Resultado
$a == $b Igualdad
Compara si el valor de los dos operandos es el
mismo.
$a === $b Identidad
Compara si el valor es el mismo y, además, el
tipo coincide (A partir de PHP4).
$a != $b No igual Cierto si el valor de $a no es igual al de $b.
$a !== $b No idéntico
Cierto si $a no es igual a $b, o si no tienen
el mismo tipo.
$a < $b Menor que Cierto si $a es estrictamente menor que $b. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
61
Operación Nombre Resultado
$a > $b Mayor que Cierto si $a es estrictamente mayor que $b.
$a <= $b Menor o igual que Cierto si $a es menor o igual que $b.
$a >= $b Mayor o igual que Cierto si $a es mayor o igual que $b.
$a <> $b No igual Cierto si el valor de $a no es igual al de $b
Si se compara un entero con una cadena, la cadena es convertida a un número. Si
se compara dos cadenas numéricas, son comparadas como enteros. Estas reglas también
se aplican a la sentencia switch.
Otro operador condicional es el operador "?:" (o ternario), que funciona como en
C y otros muchos lenguajes.
(expr1) ? (expr2) : (expr3);
La expresión toma el valor expr2 si expr1 se evalúa a cierto, y expr3 si expr1 se
evalúa a falso.
$cad = $a > $b ? “a es mayor que b” : “a no es mayor que b”;
5.5. Operadores de Control de Errores
PHP ofrece soporte para un operador de control de errores: el signo de arroba
(@). Cuando es colocado al comienzo de una expresión en PHP, cualquier mensaje de
error que pudiera generarse a causa de esa expresión será ignorado.
Si la característica track_errors está habilitada, cualquier mensaje de error
generado por la expresión será almacenado en la variable $php_errormsg. La variable
será sobrescrita en cada instancia de error, así que realice sus chequeos de forma
temprana si quiere usarla.
<?php
/* Error intencionado de archivo */
$mi_archivo = @file ('archivo_que_no_existe')
or die ("La apertura de archivo ha fallado: el error fue
'$php_errormsg'");
// esto funciona con cualquier expresión, no solo con funciones:
$valor = @$cache[$llave];
// no producirá una anotación si el índice $llave no existe.
?>
Puede usar el operado @ al inicio de variables, llamadas a funciones y sentencias
include(), constantes. No puede usarlo sobre definiciones de función o clase, ni sobre
estructuras condicionales como if y foreach.
5.6. Operador de ejecución
PHP soporta un operador de ejecución: la comilla invertida (`). ¡Fíjese que no
son comillas normales! PHP intentará ejecutar la instrucción contenida dentro de las PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
62
comillas invertidas como si fuera un comando del shell; y su salida devuelta como el
valor de esta expresión (i.e., no tiene por qué ser simplemente volcada como salida;
puede asignarse a una variable). El uso de este operados es idéntico a la función
shell_exec().
$output = `dir /a-d`;
echo "<pre>$output</pre>";
5.7. Operadores de Incremento/decremento
PHP soporta los operadores de pre y post decremento y incremento al estilo de
C. Estos operadores no afectan a valores booléanos y incrementar NULL resulta en 1.
Operación Nombre Resultado
++$a Pre-incremento
Incrementa $a en 1, y devuelve $a (ya
incrementado)
$a++ Post-incremento
Devuelve $a (sin incrementar), y después lo
incrementa en 1.
--$a Pre-decremento Decrementa $a en 1, y después lo devuelve.
$a-- Post-decremento Devuelve $a, y después lo incrementa en 1.
He aquí un listado de ejemplo:
<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a++ . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debería ser 6: " . ++$a . "<br>\n";
echo "Debería ser 6: " . $a . "<br>\n";
echo "<h3>Postdecremento</h3>";
$a = 5;
echo "Debería ser 5: " . $a-- . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debería ser 4: " . --$a . "<br>\n";
echo "Debería ser 4: " . $a . "<br>\n";
?>
5.8. Operadores lógicos
Los operadores lógicos realizan operaciones dependiendo del valor booleano de
los operandos.
Operación Nombre Resultado
$a and $b Y Cierto si $a y $b son ciertos.
$a or $b O Cierto si $a o $b es cierto.
$a xor $b O Exclusivo.
Cierto si $a o $b es cierto, pero no
ambos.
! $a No Cierto si $a es falso.
$a && $b Y Cierto si $a y $b son ciertos.
$a || $b O Cierto si $a o $b es cierto. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
63
La razón de que haya dos operadores distintos para las operaciones Y y O lógicas
es que tienen distinta precedencia.
5.9. Operador de cadenas de texto
Para operar con cadenas sólo disponemos de un operador: la concatenación de
cadenas representada por el punto ‘.’.
Por ejemplo:
$a = 1;
$b = 2;
$c = “El resultado de “ . $a . “ + “ . $b . “ es “ . ($a + $b);
Que dejaría en $c la cadena “El resultado de 1 + 2 es 3”. Antes de cada
concatenación se realizarán las conversiones de tipo que fueran necesarias (en el
ejemplo, los enteros se convierten a cadenas.)
5.10. Operadores de Matrices
Ejemplo Nombre Resultado
$a + $b Unión Unión de $a y $b.
$a == $b Igualdad Cierto si $a y $b tienen las mismas parejas llave/valor.
$a=== $b Identidad
Cierto si $a y $b tienen las mismas parejas llave/valor
en el mismo orden y de los mismos tipos.
$a != $b
Noigualdad
Cierto si $a no es igual a $b.
$a <> $b
Noigualdad
Cierto si $a no es igual a $b.
$a!== $b
Noidentidad
Cierto si $a no es idéntico a $b.
El operador + adiciona elementos de las claves restantes de la matriz del lado
derecho a aquella al lado izquierdo, al mismo tiempo que cualquier clave duplicada NO
es sobrescrita.
<?php
$a = array("a" => "manzana", "b" => "banano");
$b = array("a" => "pera", "b" => "fresa", "c" => "cereza");
$c = $a + $b; // Unión de $a y $b
echo "Unión de \$a y \$b: \n";
var_dump($c);
$c = $b + $a; // Unión de $b y $a
echo "Unión de \$b y \$a: \n";
var_dump($c);
?>
Cuando sea ejecutado, este script producirá la siguiente salida:
Unión de $a y $b:
array(3) {
["a"]=>
string(7) "manzana"
["b"]=> PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
64
string(6) "banano"
["c"]=>
string(6) "cereza"
}
Unión de $b y $a:
array(3) {
["a"]=>
string(4) "pera"
["b"]=>
string(5) "fresa"
["c"]=>
string(6) "cereza"
}
Los elementos de las matrices son considerados equivalentes en la comparación
si éstos tienen la misma clave y valor.
<?php
$a = array("manzana", "banano");
$b = array(1 => "banano", "0" => "manzana");
var_dump($a == $b); // bool(true) tiene las mismas clave-valor
var_dump($a === $b); // bool(false) pero en orden distinto
?>
5.11. Operadores de Tipo
instanceof es usado para determinar si una variable PHP es una instancia de
objeto de cierta clase:
<?php
class MiClase
{
}
class NoMiClase
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof NoMiClase);
?>
El resultado del ejemplo sería:
bool(true)
bool(false)
El operador instanceof fue introducido en PHP5. Anteriormente se usaba la
función is_a() pero desde la introdución del operados instanceof, la función anterior se
considera obsoleta.
5.12. Precedencia y asociatividad de operandos
La precedencia de los operandos resuelve el orden en el que se evalúa una
expresión múltiple que no ha sido delimitada con paréntesis. Por ejemplo, 1 + 5 * 3 en
PHP daría como resultado 1 + (5 * 3) = 16 y no (1 + 5) * 3 = 18 ya que el producto
tiene mayor precedencia que la suma. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
La tabla muestra la asociatividad de los operandos en PHP, y está ordenada en
orden creciente de precedencia (los más prioritarios al final):
Asociatividad Operandos
izquierda ,
izquierda or
izquierda xor
izquierda and
Derecha = += -= *= /= .= %= &= |= ^= ~= <<= >>=
izquierda ? :
izquierda ||
izquierda &&
izquierda |
izquierda ^
izquierda &
no-asociativo == != === !==
no-asociativo < <= > >=
izquierda << >>
izquierda + - .
izquierda * / %
derecha !
no-asociativo
~ - (int) (float) (string) (array) (object)
(bool) @
no-asociativo ++ --
izquierda [
no-asociativo clone new
La asociatividad de izquierda quiere decir que la expresión es evaluada desde la
izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario.
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
Mostrando las entradas con la etiqueta programacion. Mostrar todas las entradas
Mostrando las entradas con la etiqueta programacion. Mostrar todas las entradas
Tipos de datos de php
Tipos de Datos
® Booleanos
® Enteros
® Números en punto flotante
® Cadenas
® Arrays
® Objetos
® Recursos
® NULL
® Forzado de tipos
PHP soporta ocho tipos primitivos:
• booleanos
• enteros
• números en punto flotante
• cadenas
• matrices
• objetos
• recursos (resource)
• NULL
El tipo de una variable normalmente no lo indica el programador; en su lugar, lo
decide PHP en tiempo de ejecución dependiendo del contexto en el que se utilice esa
variable.
Si desea conocer el tipo y valor de una expresión, se puede usar la función
var_dump(). Para obtener una representación legible para humanos del tipo de una
variable para propósitos de depuración, se puede usar la función gettype(). Para
comprobar si una variable es de un cierto tiepo, no se debe usar gettype(), si no las
funciones is_tipo.
<?php
$un_bool = TRUE; // un valor booleano
$un_str = "foo"; // una cadena
$un_str2 = 'foo'; // una cadena
$un_int = 12; // un entero
echo gettype($un_bool); // imprime: boolean
echo gettype($un_str); // imprime: string
// Si este valor es un entero, incrementarlo en cuatro
if (is_int($un_int)) {
$un_int += 4;
}
// Si $bool es una cadena, imprimirla
// (no imprime nada)
if (is_string($un_bool)) {
echo "Cadena: $un_bool";
}
?>
Si se quisiese obligar a que una variable se convierta a un tipo concreto, se
podría forzar la variable o usar la función settype() para ello. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
50
Nótese que una variable se puede comportar de formas diferentes en ciertas
situaciones, dependiendo de qué tipo sea en ese momento.
4.1. Booleanos
Este es el tipo más simple. Un booleano expresa un valor de verdad. Puede ser
TRUE o FALSE. Para especificar un literal booleano, use alguna de las palabras clave
TRUE o FALSE. Ambas son insensibles a mayúsculas y minúsculas.
$foo = True; // asigna el valor TRUE a $foo
4.2. Enteros
Los enteros se pueden especificar usando una de las siguientes sintaxis:
$a = 1234; # número decimal
$a = -123; # un número negativo
$a = 0123; # número octal (equivalente al 83 decimal)
$a = 0x12; # número hexadecimal (equivalente al 18 decimal)
4.3. Números en punto flotante
Los números en punto flotante (double) se pueden especificar utilizando
cualquiera de las siguientes sintaxis:
$a = 1.234;
$a = 1.2e3;
$a = 7E-10;
4.4. Cadenas
Las cadenas de caracteres se pueden especificar usando uno de dos tipos de
delimitadores.
Si la cadena está encerrada entre dobles comillas ("), las variables que estén
dentro de la cadena serán expandidas (sujetas a ciertas limitaciones de interpretación).
Como en C y en Perl, el carácter de barra invertida ("\") se puede usar para especificar
caracteres especiales:
secuencia significado
\n Nueva línea
\r Retorno de carro
\t Tabulación horizontal
\\ Barra invertida
\$ Signo del dólar
\" Comillas dobles
\[0-7]{1,3}
la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación octal
\x[0-9A-Fa-f]{1,2}
la secuencia de caracteres que coincida con la expresión regular es un carácter en
notación hexadecimal
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
51
Se puede proteger cualquier otro carácter, pero se producirá una advertencia en
el nivel de depuración más alto.
La segunda forma de delimitar una cadena de caracteres usa el carácter de
comilla simple (‘). Cuando una cadena va encerrada entre comillas simples, los únicos
caracteres de escape que serán comprendidos son \\ y \'. Esto es por convenio, así que se
pueden tener comillas simples y barras invertidas en una cadena entre comillas simples.
Las variables no se expandirán dentro de una cadena entre comillas simples.
Las cadenas se pueden concatenar usando el operador . (punto). Nótese que el
operador + (suma) no sirve para esto.
Se puede acceder a los caracteres dentro de una cadena tratándola como un array
de caracteres indexado numéricamente, usando una sintaxis similar a la de C. Vea un
ejemplo más abajo.
<?php
/* Asignando una cadena. */
$str = "Esto es una cadena";
/* Añadiendo a la cadena. */
$str = $str . " con algo más de texto";
/* Otra forma de añadir, incluye un carácter de nueva línea protegido. */
$str .= " Y un carácter de nueva línea al final.\n";
/* Esta cadena terminará siendo '<p>Número: 9</p>' */
$num = 9;
$str = "<p>Número: $num</p>";
/* Esta será '<p>Número: $num</p>' */
$num = 9;
$str = '<p>Número: $num</p>';
/* Obtener el primer carácter de una cadena */
$str = 'Esto es una prueba.';
$first = $str[0];
/* Obtener el último carácter de una cadena. */
$str = 'Esto es aún una prueba.';
$last = $str[strlen($str)-1];
?>
4.4.1. Conversión a cadenas
Un valor puede ser convertido a cadena usando el moldeamiento (string) o la
función strval().
Un valor booleano TRUE es convertido a la cadena "1", el valor FALSE se
representa como "" (la cadena vacía). De esta forma, se puede convertir de ida y vuelta
entre valores booleanos y de cadena.
Un número integer o de punto flotante (float) es convertido a una cadena que
representa el número textualmente (incluyendo la parte del exponente para los números
de punto flotante). Los números de punto flotante pueden ser convertidos usando la
notación exponencial (4.1E+6).
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
52
Las matrices son siempre convertidas a la cadena "Array"; por esta razón,
echo() y print() no pueden por su cuenta mostrar los contenidos de un valor array. Para
ver un elemento sencillo, use una construcción como echo $arr['foo'].
Los objetos a partir de PHP 4 son convertidos siempre a la cadena "Object". Por
eso, al igual que pasa con las matrices echo() y print() no pueden por su cuenta mostrar
los contenidos de un valor objecto.
Los recursos son siempre convertidos a cadenas con la estructura "Resource id
#1" en donde 1 es el número único del valor recurso asignado por PHP en tiempo de
ejecución. No se debe escribir código que dependa de esta estructura; está sujeta a
cambios.
NULL se convierte siempre a una cadena vacía.
Como se ha indicado anteriormente, convertir directamente un valor tipo array,
object, o resource a un string no ofrece información útil sobre los valores más allá de su
tipo. Si desea inspeccionar el contenido de estos tipos debe usar las funciones print_r()
y var_dump().
La mayoría de valores PHP pueden ser convertidos también a string para su
almacenamiento permanentemente. Este método es conocido como serialización
(seriación), y es efectuado por la función serialize().
4.4.2. Conversión de cadenas a números
Cuando una cadena se evalúa como un valor numérico, el valor resultante y el
tipo se determinan como sigue.
La cadena se evaluará como un doble si contiene cualquiera de los caracteres '.',
'e', o 'E'. En caso contrario, se evaluará como un entero.
El valor viene dado por la porción inicial de la cadena. Si la cadena comienza
con datos de valor numérico, este será el valor usado. En caso contrario, el valor será 0
(cero). Los datos numéricos válidos son un signo opcional, seguido por uno o más
dígitos (que opcionalmente contengan un punto decimal), seguidos por un exponente
opcional. El exponente es una 'e' o una 'E' seguidos por uno o más dígitos.
Cuando la primera expresión es una cadena, el tipo de la variable dependerá de
la segunda expresión.
$foo = 1 + "10.5"; // $foo es doble (11.5)
$foo = 1 + "-1.3e3"; // $foo es doble (-1299)
$foo = 1 + "bob-1.3e3"; // $foo es entero (1)
$foo = 1 + "bob3"; // $foo es entero (1)
$foo = 1 + "10 Cerditos"; // $foo es entero (11)
$foo = 1 + "10.0 Cerditos"; // $foo es double (11)
$foo = "10.0 cerdos " + 1; // $foo es double (11)
$foo = "10.0 cerdos " + 1.0; // $foo es double (11)
Si quisiera probar cualquiera de los ejemplos de esta sección, puede cortar y
pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va
ocurriendo: PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
53
echo "\$foo==$foo; el tipo es " . gettype( $foo ) . "<br>\n";
4.5. Arrays
Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como
arrays indexados (vectores).
4.5.1. Arrays unidimensionales
PHP soporta tanto arrays escalares como asociativos. De hecho, no hay
diferencias entre los dos. Se puede crear una array usando las funciones list() o array(),
o se puede asignar el valor de cada elemento del array de manera explícita.
$a[0] = "abc";
$a[1] = "def";
$b["foo"] = 13;
$matriz = array("foo" => "bar", 12 => true);
También se puede crear un array simplemente añadiendo valores al array.
Cuando se asigna un valor a una variable array usando corchetes vacíos, el valor se
añadirá al final del array.
$a[] = "hola"; // $a[2] == "hola"
$a[] = "mundo"; // $a[3] == "mundo"
Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(),
rsort(), sort(), uasort(), usort(), y uksort() dependiendo del tipo de ordenación que se
desee.
Se puede contar el número de elementos de un array usando la función count().
Se puede recorrer un array usando las funciones next() y prev(). Otra forma
habitual de recorrer un array es usando la función each().
4.5.2. Arrays Multidimensionales
Los arrays multidimensionales son bastante simples actualmente. Para cada
dimensión del array, se puede añadir otro valor [clave] al final:
$a[1] = $f; # ejemplos de una sola dimensión
$a["foo"] = $f;
$a[1][0] = $f; # bidimensional
$a["foo"][2] = $f; # (se pueden mezclar índices numéricos y asociativos)
$a[3]["bar"] = $f; # (se pueden mezclar índices numéricos y asociativos)
$a["foo"][4]["bar"][0] = $f; # tetradimensional!
En PHP3 no es posible referirse a arrays multidimensionales directamente dentro
de cadenas. Por ejemplo, lo siguiente no tendrá el resultado deseado:
$a[3]['bar'] = 'Bob';
echo "Esto no va a funcionar: $a[3][bar]"; PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
54
En PHP3, lo anterior tendrá la salida Esto no va a funcionar: Array[bar]. De
todas formas, el operador de concatenación de cadenas se puede usar para solucionar
esto:
$a[3]['bar'] = 'Bob';
echo "Esto va a funcionar: " . $a[3][‘bar’];
A partir de PHP4, sin embargo, todo el problema se puede solucionar encerrando
la referencia al array (dentro de la cadena) entre llaves:
$a[3]['bar'] = 'Bob';
echo "Esto va a funcionar: {$a[3][‘bar’]}";
Se pueden "rellenar" arrays multidimensionales de muchas formas, pero la más
difícil de comprender es cómo usar el comando array() para arrays asociativos. Estos
dos trozos de código rellenarán el array unidimensional de la misma manera:
# Ejemplo 1:
$a["color"] = "rojo";
$a["sabor"] = "dulce";
$a["forma"] = "redondeada";
$a["nombre"] = "manzana";
$a[3] = 4;
# Ejemplo 2:
$a = array(
"color" => "rojo",
"sabor" => "dulce",
"forma" => "redondeada",
"nombre" => "manzana",
3 => 4
);
La función array() se puede anidar para arrays multidimensionales:
<?php
$a = array(
"manzana" => array(
"color" => "rojo",
"sabor" => "dulce",
"forma" => "redondeada"
),
"naranja" => array(
"color" => "naranja",
"sabor" => "ácido",
"forma" => "redondeada"
),
"plátano" => array(
"color" => "amarillo",
"sabor" => "paste-y",
"forma" => "aplatanada"
)
);
echo $a["manzana"]["sabor"]; # devolverá "dulce"
?>
Siempre deben usarse comillas alrededor de un índice de matriz tipo cadena
literal. Por ejemplo, $foo['bar'] es correcto, mientras que $foo[bar] no lo es. Funciona
pero no es correcto. Funciona porque PHP automáticamente convierte una cadena pura
(una cadena sin comillas que no corresponda con símbolo conocido alguno) en una
cadena que contiene la cadena pura. Por ejemplo, si no se ha definido una constante
llamada bar, entonces PHP reemplazará su valor por la cadena 'bar' y usará ésta última. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
55
4.6. Objetos
Para inicializar un objeto, se usa la sentencia new para instanciar el objeto a una
variable.
class foo {
function do_foo () {
echo "Haciendo foo.";
}
}
$bar = new foo;
$bar->do_foo();
4.7. Recursos
Un valor tipo resource es una variable especial, que contiene una referencia a un
recurso externo. Los recursos son creados y usados por funciones especiales. Gracias al
sistema de conteo de referencias introducido con el Motor Zend de PHP 4, un recurso
que ya no es referenciado es detectado automáticamente, y es liberado por el recolector
de basura. Por esta razón, rara vez se necesita liberar la memoria manualmente. Los
enlaces persistentes con bases de datos son una excepción a esta regla. Estos no son
destruidos por el recolector de basura.
4.8. NULL
El valor especial NULL representa una variable que no tiene valor. NULL es el
único valor posible del tipo NULL. Una variable es considerada como null si:
Ö se le ha asignado la constante NULL.
Ö no ha sido definida con valor alguno.
Ö ha sido eliminada con unset().
Existe un solo valor de tipo null, y ese es la palabra clave NULL, insensible a
mayúsculas y minúsculas.
$var = NULL;
Hay varias funciones interesantes para trabajar con el valor null: is_null() y unset().
4.9. Forzado de tipos
PHP no requiere (o soporta) la declaración explícita del tipo en la declaración de
variables; el tipo de una variable se determina por el contexto en el que se usa esa
variable. Esto quiere decir que si se asigna un valor de cadena a la variable var, var se
convierte en una cadena. Si después se asigna un valor entero a la variable var, se
convierte en una variable entera.
PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
56
Un ejemplo de conversión de tipo automática en PHP es el operador suma '+'. Si
cualquiera de los operandos es un flotante, entonces todos los operandos se evalúan
como flotantes, y el resultado será un flotante. En caso contrario, los operandos se
interpretarán como enteros, y el resultado será también un entero. Nótese que esto NO
cambia los tipos de los operandos propiamente dichos; el único cambio está en cómo se
evalúan los operandos.
$foo = "0"; // $foo es una cadena (ASCII 48)
$foo++; // $foo es la cadena "1" (ASCII 49) convertido a entero (1)
$foo += 1; // $foo ahora es un entero (2)
$foo = $foo + 1.3; // $foo ahora es un doble (3.3)
$foo = 5 + "10 Cerditos Pequeñitos"; // $foo es entero (15)
$foo = 5 + "10 Cerditos"; // $foo es entero (15)
Si se desea obligar a que una variable sea evaluada con un tipo concreto se
puede realizar un forzado de tipos. Si se desea cambiar el tipo de una variable se puede
usar la función settype().
Si quisiese probar cualquiera de los ejemplos de esta sección, puede cortar y
pegar los ejemplos e insertar la siguiente línea para ver por sí mismo lo que va
ocurriendo o usar la función var_dump():
echo "\$foo==$foo; el tipo es " . gettype( $foo ) . "<br>\n";
Nota: La posibilidad de una conversión automática a array no está definida
actualmente.
$a = 1; // $a es un entero
$a[0] = "f"; // $a se convierte en un array, en el que $a[0] vale "f"
Aunque el ejemplo anterior puede parecer que claramente debería resultar en que
$a se convierta en un array, el primer elemento del cual es 'f', consideremos esto:
$a = "1"; // $a es una cadena
$a[0] = "f"; // ¿Qué pasa con los índices de las cadenas? ¿Qué ocurre?
Dado que PHP soporta indexación en las cadenas vía offsets usando la misma
sintaxis que la indexación de arrays, el ejemplo anterior nos conduce a un problema:
¿debería convertirse $a en un array cuyo primer elemento sea "f", o debería convertirse
"f" en el primer carácter de la cadena $a?
El forzado de tipos en PHP funciona como en C: el nombre del tipo deseado se
escribe entre paréntesis antes de la variable a la que se pretende forzar.
$foo = 10; // $foo es un entero
$bar = (double) $foo; // $bar es un doble
Los forzados de tipo permitidos son:
(int), (integer) - fuerza a entero (integer)
(bool),(bolean) – fuerza a booleano
(real), (double), (float) - fuerza a doble (double)
(string) - fuerza a cadena (string)
(array) - fuerza a array (array)
(object) - fuerza a objeto (object) PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
57
Nótese que las tabulaciones y espacios se permiten dentro de los paréntesis, así
que los siguientes ejemplos son funcionalmente equivalentes:
$foo = (int) $bar;
$foo = ( int ) $bar;
Puede no ser obvio que ocurrirá cuando se fuerce entre ciertos tipos. Por
ejemplo, lo siguiente debería ser tenido en cuenta.
Cuando se fuerza el cambio de un escalar o una variable de cadena a un array, la
variable se convertirá en el primer elemento del array:
$var = 'ciao';
$arr = (array) $var;
echo $arr[0]; // produce la salida 'ciao'
Cuando se fuerza el tipo de una variable escalar o de una cadena a un objeto, la
variable se convertirá en un atributo del objeto; el nombre del atributo será 'scalar':
$var = 'ciao';
$obj = (object) $var;
echo $obj->scalar; // produce la salida 'ciao'
Cuando se fuerza el tipo de una variable a booleano, el valor de la variable será
FALSE si: es el valor booleano FALSE, si es el entero 0, si es el flotante 0.0 si es la
cadena vacía o la cadena “0”, si es un array con cero elementos, si es NULL; en
cualquier otro caso el valor será TRUE.
HTML y PHP ¿Cual es mejor?
Para interpretar un archivo, PHP simplemente interpreta el texto del archivo
hasta que encuentra uno de los carácteres especiales que delimitan el inicio de código
PHP. El intérprete ejecuta entonces todo el código que encuentra, hasta que encuentra
una etiqueta de fin de código, que le dice al intérprete que siga ignorando el código
siguiente. Este mecanismo permite embeber código PHP dentro de HTML: todo lo que
está fuera de las etiquetas PHP se deja tal como está, mientras que el resto se interpreta
como código.
Hay cuatro conjuntos de etiquetas que pueden ser usadas para denotar bloques
de código PHP. De estas cuatro, sólo 2 (<?php ... ?> y <script language="php"> ...
</script>) están siempre disponibles; el resto pueden ser configuradas en el fichero de
php.ini para ser o no aceptadas por el intérprete. Mientras que el formato corto de
etiquetas (short-form tags) y el estilo ASP (ASP-style tags) pueden ser convenientes, no
son portables como la versión de formato largo de etiquetas. Además, si se pretende
embeber código PHP en XML o XHTML, será obligatorio el uso del formato <?php ...
?> para la compatibilidad con XML.
Las etiquetas soportadas por PHP son:
Formas de escapar de HTML
<?php
echo("si quieres servir documentos XHTML o XML, haz como aquí<BR>");
?>
<?
echo ("esta es la más simple, una instrucción de procesado SGML <BR>");
?>
<?= expression ?> Esto es una abreviatura de "<? echo expression ?>"<BR>
<script language="php">
echo ("muchos editores (como FrontPage) no aceptan instrucciones de
procesado<BR>");
</script>
<%
echo ("Opcionalmente, puedes usar las etiquetas ASP<BR>");
%>
<%= $variable; # Esto es una abreviatura de "<% echo . . ." %>
El método primero, <?php ... ?>, es el más conveniente, ya que permite el uso
de PHP en código XML como XHTML.
El método segundo no siempre está disponible. El formato corto de etiquetas
está disponible con la función short_tags() (sólo PHP 3), activando el parámetro del
fichero de configuración de PHP short_open_tag, o compilando PHP con la opción --
enable-short-tags del comando configure. Está activa por defecto en php.ini-dist. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
34
El método cuarto sólo está disponible si se han activado las etiquetas ASP en el
fichero de configuración: asp_tags.
Nota: El soporte de etiquetas ASP se añadió en la versión 3.0.4.
Nota: No se debe usar el formato corto de etiquetas cuando se desarrollen
aplicaciones o librerías con intención de redistribuirlas, o cuando se
desarrolle para servidores que no están bajo nuestro control, porque puede
ser que el formato corto de etiquetas no esté soportado en el servidor. Para
generar código portable y redistribuíble, asegúrate de no usar el formato
corto de etiquetas.
La etiqueta de fin de bloque incluirá tras ella la siguiente línea si hay alguna
presente. Además, la etiqueta de fin de bloque lleva implícito el punto y coma; no
necesitas por lo tanto añadir el punto y coma final de la última línea del bloque PHP.
PHP permite estructurar bloques como:
<?php
if ($expression) {
?>
<strong>This is true.</strong>
<?php
} else {
?>
<strong>This is false.</strong>
<?php
}
?>
Este ejemplo realiza lo esperado, ya que cuando PHP encuentra las etiquetas ?>
de fin de bloque, empieza a escribir lo que encuentra tal cual hasta que encuentra otra
etiqueta de inicio de bloque. El ejemplo anterior es, por supuesto, inventado. Para
escribir bloques grandes de texto generamente es más eficiente separalos del código
PHP que enviar todo el texto mediante las funciones echo(), print() o similares.
2.2. Comentarios
Una vez visto como se introduce código PHP dentro del código HTML, lo
siguiente es ver como se puede comentar el código PHP. PHP soporta el estilo de
comentarios de 'C', 'C++' y de la interfaz de comandos de Unix. Por ejemplo:
<?php
echo "Esto es una prueba"; // Comentario estilo c++
/* Comentario multi-linea
con varias lineas de comentario */
echo "Otra prueba";
echo "Prueba final"; # Comentario estilo shell de Unix
?>
Los estilos de comentarios de una línea (es decir, // y #) actualmente sólo
comentan hasta el final de la línea o el bloque actual de código PHP, lo primero que
ocurra.
<h1>Esto es un <?php # echo "simple";?> ejemplo.</h1>
<p>La cabecera de arriba dice 'Esto es un ejemplo.'. PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
Hay que tener cuidado con no anidar comentarios de estilo 'C', algo que puede
ocurrir al comentar bloques largos de código.
<?php
/*
echo "Esto es una prueba"; /* Este comentario causa problemas*/
*/
?>
Los estilos de comentarios de una linea actualmente sólo comentan hasta el final
de la linea o del bloque actual de código PHP, lo primero que ocurra. Esto implica que
el código HTML tras // ?> será impreso: ?> sale del modo PHP, retornando al modo
HTML, el comentario // no le influye.
2.3. Instrucciones
Un fragmento de código PHP va a estar compuesto por una o varias
instrucciones. En PHP la separación de instrucciones se hace de la misma manera que
en C o Perl - terminando cada instrucción con un punto y coma.
La etiqueta de fin de bloque (?>) implica el fin de la instrucción, por lo tanto no
es necesario un punto y coma después de la última instrucción. Como se ve en el
ejemplo donde los dos fragmentos siguientes son equivalentes:
<?php
echo "Esto es una prueba";
?>
<?php echo "Esto es una preba" ?>
Todo script PHP se compone de una serie de sentencias o instrucciones. Una
sentencia puede ser una asignación, una llamada a función, un bucle, una sentencia
condicional e incluso una sentencia que no haga nada (una sentencia vacía). Las
sentencias normalmente acaban con punto y coma como se ha dicho anteriormente.
Además, las sentencias se pueden agrupar en grupos de sentencias encapsulando un
grupo de sentencias con llaves. Un grupo de sentencias es también una sentencia.
Para construir las sentencias o instrucciones se necesitan distintos elementos:
variables y constantes, operadores, estructuras de control, funciones, ...
A continuación se irán viendo cada uno de estos elementos que permiten construir los
scripts de PHP.
PHP frente a otros lenguajes
Para seleccionar un lenguaje de Script las cuatro grandes características que debe
cumplir son: Velocidad, estabilidad, seguridad y simplicidad.
• Velocidad: No sólo la velocidad de ejecución, la cual es importante, sino además no
crear demoras en la máquina. Por esta razón no debe requerir demasiados recursos
de sistema. PHP se integra muy bien junto a otro software, especialmente bajo
ambientes Unix, cuando se configura como módulo de Apache, esta listo para ser
utilizado.
• Estabilidad: La velocidad no sirve de mucho si el sistema se cae cada cierta
cantidad de ejecuciones. Ninguna aplicación es 100% libre de bugs, pero teniendo
de respaldo una increíble comunidad de programadores y usuarios es mucho mas
difícil para lo bugs sobrevivir. PHP utiliza su propio sistema de administración de
recursos y dispone de un sofisticado método de manejo de variables, conformando
un sistema robusto y estable.
• Seguridad: El sistema debe poseer protecciones contra ataques. PHP provee
diferentes niveles de seguridad, estos pueden ser configurados desde el archivo .ini
• Simplicidad: Se les debe permitir a los programadores generar código
productivamente en el menor tiempo posible. Usuarios con experiencia en C y C++
podrán utilizar PHP rápidamente.
Bueno otra característica a tener en cuenta seria la conectividad. PHP dispone de
una amplia gama de librerías, y agregarle extensiones es muy fácil. Esto le permite al
PHP ser utilizado en muchas áreas diferentes, tales como encriptado, gráficos, XML y
otras.
Ventajas adicionales de PHP
• PHP corre en (casi) cualquier plataforma utilizando el mismo código fuente,
pudiendo ser compilado y ejecutado en algo así como 25 plataformas, incluyendo
diferentes versiones de Unix, Windows (95,98,NT,ME,2000,XP,...) y Macs. Como
en todos los sistemas se utiliza el mismo código base, los scripts pueden ser
ejecutados de manera independiente al OS.
• La sintaxis de PHP es similar a la del C, por esto cualquiera con experiencia en
lenguajes del estilo C podrá entender rápidamente PHP. Entre los lenguajes del tipo
C incluimos al Java y Javascript, de hecho mucha de la funcionalidad del PHP se la
debe al C en funciones como fread() o srtlen(), así que muchos programadores se
sentirán como en casa.
• PHP es completamente expandible. Está compuesto de un sistema principal (escrito
por Zend), un conjunto de módulos y una variedad de extensiones de código.
• Muchas interfaces distintas para cada tipo de servidor. PHP actualmente se puede
ejecutar bajo Apache 1.3 y 2.X, IIS, Lighttpd, Netscape servers (Sun Java System,
Sun One, iPlanet, …),… . Otra alternativa es configurarlo como modulo CGI.
• Puede interactuar con muchos motores de bases de datos tales como MySQL, MS
SQL, Oracle, Informix, PostgreSQL, y otros muchos. Siempre podrás disponer de
ODBC para situaciones que lo requieran.
• Una gran variedad de módulos cuando un programador PHP necesite una interfase
para una librería en particular, fácilmente podrá crear una API para esta. Algunas de
las que ya vienen implementadas permiten manejo de gráficos, archivos PDF, Flash,
Cybercash, calendarios, XML, IMAP, POP, etc.
• Rapidez. PHP generalmente es utilizado como modulo de Apache, lo que lo hace
extremadamente veloz. Esta completamente escrito en C, así que se ejecuta
rápidamente utilizando poca memoria.
• PHP es Open Source, lo cual significa que el usuario no depende de una compañía
específica para arreglar cosas que no funcionan, además no estás forzado a pagar
actualizaciones anuales para tener una versión que funcione.
Algunas desventajas
• El manejo de errores no es tan sofisticado como otros lenguajes (ASP.Net, …) .
• No existe IDE o Debugger consolidado. Aunque en la actualidad existen proyectos
varios entre los mas destacados está Eclipse (gratuito) o Zend Studio (de pago).
Cuando debes utilizar PHP y cuando debes utilizar otro lenguaje
Si estás desarrollando bajo una plataforma UNIX o Linux, debes elegir entre
Perl y PHP, ambos excelentes. Para mucha gente PHP es más simple a la hora de
escribir scripts, haciéndolo más productivo en proyectos.
En ambientes Windows compite muy de cerca con ASP.Net , aquí la elección se
basa en asuntos un poco más técnicos y en la política que desee utilizarse para el sitio.
ASP.Net junto a IIS es probablemente más estable que PHP con IIS. Pero en términos
puramente técnicos, PHP bajo Windows Server es mucho más estable (además de ser
más rápido y utilizar menos recursos). De cualquier manera ASP.Net ofrece una mejor
integración con este ambiente sobre todo si se desea utilizar COM+.
cumplir son: Velocidad, estabilidad, seguridad y simplicidad.
• Velocidad: No sólo la velocidad de ejecución, la cual es importante, sino además no
crear demoras en la máquina. Por esta razón no debe requerir demasiados recursos
de sistema. PHP se integra muy bien junto a otro software, especialmente bajo
ambientes Unix, cuando se configura como módulo de Apache, esta listo para ser
utilizado.
• Estabilidad: La velocidad no sirve de mucho si el sistema se cae cada cierta
cantidad de ejecuciones. Ninguna aplicación es 100% libre de bugs, pero teniendo
de respaldo una increíble comunidad de programadores y usuarios es mucho mas
difícil para lo bugs sobrevivir. PHP utiliza su propio sistema de administración de
recursos y dispone de un sofisticado método de manejo de variables, conformando
un sistema robusto y estable.
• Seguridad: El sistema debe poseer protecciones contra ataques. PHP provee
diferentes niveles de seguridad, estos pueden ser configurados desde el archivo .ini
• Simplicidad: Se les debe permitir a los programadores generar código
productivamente en el menor tiempo posible. Usuarios con experiencia en C y C++
podrán utilizar PHP rápidamente.
Bueno otra característica a tener en cuenta seria la conectividad. PHP dispone de
una amplia gama de librerías, y agregarle extensiones es muy fácil. Esto le permite al
PHP ser utilizado en muchas áreas diferentes, tales como encriptado, gráficos, XML y
otras.
Ventajas adicionales de PHP
• PHP corre en (casi) cualquier plataforma utilizando el mismo código fuente,
pudiendo ser compilado y ejecutado en algo así como 25 plataformas, incluyendo
diferentes versiones de Unix, Windows (95,98,NT,ME,2000,XP,...) y Macs. Como
en todos los sistemas se utiliza el mismo código base, los scripts pueden ser
ejecutados de manera independiente al OS.
• La sintaxis de PHP es similar a la del C, por esto cualquiera con experiencia en
lenguajes del estilo C podrá entender rápidamente PHP. Entre los lenguajes del tipo
C incluimos al Java y Javascript, de hecho mucha de la funcionalidad del PHP se la
debe al C en funciones como fread() o srtlen(), así que muchos programadores se
sentirán como en casa.
• PHP es completamente expandible. Está compuesto de un sistema principal (escrito
por Zend), un conjunto de módulos y una variedad de extensiones de código.
• Muchas interfaces distintas para cada tipo de servidor. PHP actualmente se puede
ejecutar bajo Apache 1.3 y 2.X, IIS, Lighttpd, Netscape servers (Sun Java System,
Sun One, iPlanet, …),… . Otra alternativa es configurarlo como modulo CGI.
• Puede interactuar con muchos motores de bases de datos tales como MySQL, MS
SQL, Oracle, Informix, PostgreSQL, y otros muchos. Siempre podrás disponer de
ODBC para situaciones que lo requieran.
• Una gran variedad de módulos cuando un programador PHP necesite una interfase
para una librería en particular, fácilmente podrá crear una API para esta. Algunas de
las que ya vienen implementadas permiten manejo de gráficos, archivos PDF, Flash,
Cybercash, calendarios, XML, IMAP, POP, etc.
• Rapidez. PHP generalmente es utilizado como modulo de Apache, lo que lo hace
extremadamente veloz. Esta completamente escrito en C, así que se ejecuta
rápidamente utilizando poca memoria.
• PHP es Open Source, lo cual significa que el usuario no depende de una compañía
específica para arreglar cosas que no funcionan, además no estás forzado a pagar
actualizaciones anuales para tener una versión que funcione.
Algunas desventajas
• El manejo de errores no es tan sofisticado como otros lenguajes (ASP.Net, …) .
• No existe IDE o Debugger consolidado. Aunque en la actualidad existen proyectos
varios entre los mas destacados está Eclipse (gratuito) o Zend Studio (de pago).
Cuando debes utilizar PHP y cuando debes utilizar otro lenguaje
Si estás desarrollando bajo una plataforma UNIX o Linux, debes elegir entre
Perl y PHP, ambos excelentes. Para mucha gente PHP es más simple a la hora de
escribir scripts, haciéndolo más productivo en proyectos.
En ambientes Windows compite muy de cerca con ASP.Net , aquí la elección se
basa en asuntos un poco más técnicos y en la política que desee utilizarse para el sitio.
ASP.Net junto a IIS es probablemente más estable que PHP con IIS. Pero en términos
puramente técnicos, PHP bajo Windows Server es mucho más estable (además de ser
más rápido y utilizar menos recursos). De cualquier manera ASP.Net ofrece una mejor
integración con este ambiente sobre todo si se desea utilizar COM+.
Funcionamiento de un Servidor Web
Dado que en este curso se va a tratar el desarrollo de sitios web dinámicos
mediante PHP, antes de entrar en porque elegir PHP y no otro lenguaje de
programación, y como funciona dicho lenguaje, hemos de comprender como funciona
un servidor web cuando un usuario solicita una de esas páginas que nosotros vamos a
construir con PHP.
Vamos a comenzar explicando como funciona un servidor web (como Apache,
IIS, PWS, ...) cuando un usuario solicita una página HTML estática que contiene 5
imágenes en su contenido.
Para resolver dicha petición, el navegador del usuario debe establecer una
conexión HTTP distinta para cada elemento que se desea solicitar al servidor web, es
decir, una conexión HTTP para la página HTML y 5 conexiones HTTP adicionales para
las imágenes (una por imagen).
Es decir, la situación vendría a ser como se muestra a continuación:
Si en lugar de páginas estáticas, las páginas son dinámicas, es decir muestran
información obtenida de ficheros, bases de datos, u otras fuentes, pero que varía en
función de una serie de parámetros sin la intervención del programador web, se nos
presentan distintas alternativas para dar el carácter dinámico a las páginas: bien darles
dinamismo en la parte de clientes (por ejemplo usando applets), o bien darles
dinamismo en la parte del servidor (usando CGI, SERVLETS o lenguajes como PHP,
ASP O JSP).
Si optamos por dar dinamismo en la parte del cliente, el funcionamiento cuando
el usuario solicita una página que contiene un APPLET es bastante similar al visto para
las páginas estáticas, es decir, se tendrá que realizar una conexión HTTP para obtener la
página y tantas conexiones HTTP como APPLETS contenga dicha página. Un
APPLET, que es un programa escrito en el lenguaje JAVA, se ejecuta en la propia
CLIENTE SERVIDOR
Petición HTTP
Archivo HTML
CLIENTE SERVIDOR
Petición HTTP 1 imagen
Archivo imagen
5 veces5 veces PROGRAMACIÓN EN LENGUAJE PHP5. NIVEL BÁSICO
máquina del cliente, con las consiguientes desventajas de acceso a recursos ubicados en
el servidor, y con la desventaja de que se tiene que ejecutar en una JVM (Java Virtual
Machine) que hay que tener instalada en la máquina en la que se sitúa el cliente.
Su uso se reduce a dotar a las páginas de efectos visuales y sonoros, textos en
movimiento, pequeñas utilidades para incluir en la página como un reloj, pequeños
programas educativos, pequeños juegos interactivos, presentaciones multimedia, etc
Sin embargo, si optamos por dar dinamismo en la parte del servidor el
funcionamiento es un poco diferente. Desde el punto de vista del usuario que solicita
una página el funcionamiento es el ya visto, es decir, el usuario solicita una página y se
le devuelve un archivo HTML (lo que genera una conexión HTTP al servidor) y tantas
imágenes o elementos como tenga incluidos la página (una conexión HTTP por cada
uno de estas imágenes o elementos).
Pero desde el punto de vista del servidor la cosa es un poco más compleja.
Cuando se solicita una pagina web que contiene código denominado script, es decir,
incluido dentro de la página HTML, escrito en PHP, ASP, JSP o cualquier otro lenguaje
similar, el servidor web antes de devolver dicha página HTML, solicita al interprete de
scripts que ejecute ese código como si de un programa se tratase y le devuelva un
resultado. Ese resultado incrustado en el documento HTML original constituye el
documento HTML devuelto al usuario. El interprete de scripts para ejecutar dicho
código script y devolver un resultado puede acceder a multitud de recursos del servidor
(bases de datos, ficheros, servicios de correo, ftp, news, ....) u de otros servidores. De
esta forma el esquema anterior se complica para quedar de la siguiente forma:
CLIENTE SERVIDOR
Petición HTTP
Archivo HTML
CLIENTE SERVIDOR
Petición HTTP
Archivo HTML
SCRIPT RECURSOS
Ejecutar Script Obtener recurso
Devolver recurso Devolver resultado
Las diferencias de amigos y mejores amigos
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
Amigo: Te pide permiso para agarrar agua o comida.
Mejor amigo: Es la razón por la cual no tienes comida en la nevera.
Mejor amigo: Es la razón por la cual no tienes comida en la nevera.
Amigo: Te sacaría de la cárcel.
Mejor amigo: Estaría preso contigo diciéndote: “¿tienes frío maricon?”.
Mejor amigo: Estaría preso contigo diciéndote: “¿tienes frío maricon?”.
Amigo: No te ha visto llorar.
Mejor amigo: No le diría a nadie que has llorado, pero se cagaría de la risa cuando ya no estuvieras triste.
Mejor amigo: No le diría a nadie que has llorado, pero se cagaría de la risa cuando ya no estuvieras triste.
Amigo: Te pide prestadas tus cosas un par de días y te las devuelve.
Mejor amigo: Bota tus vainas y te dice “Coño pana; no se donde lo dejé”…
Mejor amigo: Bota tus vainas y te dice “Coño pana; no se donde lo dejé”…
Amigo: Solo sabe algunas cosas sobre ti.
Mejor amigo: Podría escribir un libro con todas las pendejadas que han pasado y las brutalidades que has hecho.
Mejor amigo: Podría escribir un libro con todas las pendejadas que han pasado y las brutalidades que has hecho.
Amigo: Te dejaría de hablar si los demás lo hacen.
Mejor amigo: Manda a comer mierda a los que te dejen de hablar.
Mejor amigo: Manda a comer mierda a los que te dejen de hablar.
Amigo: Toca la puerta de tu casa.
Mejor amigo: Entra hasta tu cuarto y grita: Hay comida…?
Mejor amigo: Entra hasta tu cuarto y grita: Hay comida…?
Amigo: Te quita la cerveza cuando ve que ya estás cayéndote de la pea.
Mejor amigo: Ya tambaleándose se acerca y te medio dice: “te la terminas GÜEVÓN porque aquí no desperdiciamos nada”
Mejor amigo: Ya tambaleándose se acerca y te medio dice: “te la terminas GÜEVÓN porque aquí no desperdiciamos nada”
C++ ejemplos
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
Ejemplos
En este apéndice se incluyen algunos programas de ejemplo escritos en lenguaje
C. Los programas han sido realizados de forma que puedan ser compilados en la
mayoría de compiladores existentes para los sistemas operativos MS-DOS y UNIX sin
que exista la necesidad de realizar ningún tipo de cambio en los mismos.
B.1 - palindro.c.
/* Programa que calcula si una palabra es palindroma, esto es, se lee
igual de derecha a izquierda que de izquierda a derecha. */
#include <stdio.h>
#include <string.h>
#define TAM 100
/* Rutina que calcula si una palabra es palindroma.
Parametros: char *cadena Puntero al string con la palabra.
Return: int 0 no palindroma, <>0 palindroma. */
int Palindroma(char *cadena)
{
register int i,j;
i=0;
j=strlen(cadena)-1;
while (i<j && cadena[i]==cadena[j])
{
i++;
j--;
}
return (i>=j);
}
int main(void)
{
char cadena[TAM];
printf("\nIntroduce la palabra\n");
gets(cadena);
printf("La palabra: %s %s palindroma.\n",cadena,
(Palindroma(cadena)) ? "es" : "no es");
return 0;
}
B.2 - matriz.c.
/* Programa que calcula el producto de dos matrices. */
#include <stdio.h>
75El lenguaje de programación C
/* Definicion del tamaño maximo */
#define TAM 10
/* Definicion de los codigos de error */
#define OK 0
#define ERROR 1
/* Definicion de la estructura de datos */
struct MATRIZ
{
unsigned fila,columna;
float matriz[TAM][TAM];
};
/* Rutina que muestra un menu y pide una opcion del menu.
Parametros: Ninguno.
Return: char Opcion del menu elegida. */
char Menu(void)
{
register char d;
printf("\nElige la opcion deseada:\n");
printf("\t0 -- Salir del programa.\n");
printf("\t1 -- Cambiar la matriz A.\n");
printf("\t2 -- Cambiar la matriz B.\n");
printf("\t3 -- Calcular A*B\n");
printf("\t4 -- Calcular B*A\n");
while ((d=getchar())<'0' || d>'4');
return d;
}
/* Rutina que pide el numero de filas o de columnas de una matriz.
Parametros: char *cadena Puntero al string a mostrar.
Return: unsigned Numero de filas o de columnas. */
unsigned PedirTamano(const char *cadena)
{
unsigned valor;
do
{
printf("%s",cadena);
scanf("%u",&valor);
}
while (valor==0 || valor>TAM);
return valor;
}
/* Rutina que cambia una matriz.
Parametros: struct MATRIZ *a Puntero a la matriz que vamos a cambiar.
Return: Ninguno. */
void PedirMatriz(struct MATRIZ *a)
{
register unsigned i,j;
float valor;
76El lenguaje de programación C
a->fila=PedirTamano("\nNumero de filas de la matriz: ");
a->columna=PedirTamano("\nNumero de columnas de la matriz: \n");
for(i=0;i<a->fila;i++)
for(j=0;j<a->columna;j++)
{
printf("M[%u][%u]: ",i,j);
scanf("%f",&valor);
a->matriz[i][j]=valor;
}
}
/* Rutina que multiplica dos matrices. Las matrices se pasan por
puntero pues ello es mas rapido, aunque no se modifican en toda la
funcion.
Parametros: struct MATRIZ *a Puntero a la estructura con la primera
matriz a multiplicar.
struct MATRIZ *b Puntero a la estructura con la segunda
matriz a multiplicar.
struct MATRIZ *res Puntero a la estructura que contendra
el resultado.
Return: int Codigo de error. */
int Multiplicar(const struct MATRIZ *a,const struct MATRIZ *b,struct
MATRIZ *res)
{
register unsigned i,j,k;
if (a->columna!=b->fila)
return ERROR;
res->fila=a->fila;
res->columna=b->columna;
for(i=0;i<a->fila;i++)
for(j=0;j<b->columna;j++)
{
res->matriz[i][j]=0;
for(k=0;k<a->fila;k++)
res->matriz[i][j]+=a->matriz[i][k]*b->matriz[k][j];
}
return OK;
}
/* Rutina que muestra en pantalla el resultado de la operacion.
Parametros: struct MATRIZ *res Puntero a la estructura con el
resultado.
Return: Ninguno. */
void Mostrar(const struct MATRIZ *res)
{
register unsigned i,j;
for(i=0;i<res->fila;i++)
{
for(j=0;j<res->columna;j++)
printf("Res[%u][%u]= %f\n",i,j,res->matriz[i][j]);
printf("\nPulsa Enter para continuar.\n");
getchar();
}
}
77El lenguaje de programación C
int main(void)
{
struct MATRIZ a,b,res;
char d;
a.fila=a.columna=b.fila=b.columna=1;
a.matriz[0][0]=b.matriz[0][0]=1.0;
do
switch(d=Menu())
{
case '0':break;
case '1':PedirMatriz(&a);
break;
case '2':PedirMatriz(&b);
break;
case '3':
if (Multiplicar(&a,&b,&res)==ERROR)
printf("\nNo es posible multiplicar A*B\n");
else
Mostrar(&res);
break;
case '4':
if (Multiplicar(&b,&a,&res)==ERROR)
printf("\nNo es posible multiplicar B*A\n");
else
Mostrar(&res);
break;
}
while (d!='0');
return 0;
}
B.3 - ordenar.c.
/* Programa que ordena un fichero de cualquier tamaño mediante el
algoritmo QuickSort. El fichero contiene como primer elemento un
unsigned con el numero de elementos del fichero, y a continuacion
figuran todos los elementos a ordenar */
#include <stdio.h>
#include <stdlib.h>
/* Rutina que lee el fichero de datos y devuelve un puntero al array
de la memoria reservada.
Parametros: char *nombre Nombre del fichero a leer.
unsigned *num Puntero al unsigned que contendra el numero
de elementos del array.
Return: float * Puntero al array de float, NULL si sucede un error. */
float *LeerFichero(const char *nombre, unsigned *num)
{
FILE *fp;
float *p;
register unsigned i;
78El lenguaje de programación C
if ((fp=fopen(nombre,"rt"))==NULL)
{
printf("\nError, no puedo abrir el fichero: %s\n",nombre);
return NULL;
}
fscanf(fp,"%u\n",num);
if ((p=(float *)calloc(*num,sizeof(float)))==NULL)
{
printf("\nError, memoria insuficiente.\n");
fclose(fp);
return NULL;
}
for(i=0;i<*num;i++)
fscanf(fp,"%f\n",&p[i]);
fclose(fp);
return p;
}
/* Rutina que escribe el fichero de datos ordenado.
Parametros: char *nombre Nombre del fichero donde guardar los datos.
unsigned num Numero de elementos del array.
float *p Puntero al array ordenado.
Return: Ninguno. */
void GuardarFichero(const char *nombre,const unsigned num,const float
*p)
{
FILE *fp;
register unsigned i;
if ((fp=fopen(nombre,"wt"))==NULL)
{
printf("\nError, no puedo crear el fichero: %s\n",nombre);
return;
}
fprintf(fp,"%u\n",num);
for(i=0;i<num;i++)
fprintf(fp,"%f\n",p[i]);
fclose(fp);
}
/* Rutina que ordena un array segun el algoritmo Quick-Sort.
Parametros: float *p Puntero al array a ordenar.
unsigned izq Elemento de la izquierda a ordenar.
unsigned der Elemento de la derecha a ordenar.
Return: Ninguno. */
void QuickSort(float *p,unsigned izq,unsigned der)
{
register unsigned i=izq,j=der;
float val,inter;
val=p[(i+j)/2];
do
{
while (p[i]<val) i++;
while (p[j]>val) j--;
if (i<=j)
79El lenguaje de programación C
{
inter=p[i];
p[i]=p[j];
p[j]=inter;
i++;
j--;
}
}
while (i<=j);
if (izq<j) QuickSort(p,izq,j);
if (i<der) QuickSort(p,i,der);
return;
}
int main(int argc,char *argv[])
{
float *p;
unsigned num;
if (argc!=3)
{
printf("\nModo de uso: %s <fichero1> <fichero2>\n",argv[0]);
return(1);
}
if ((p=LeerFichero(argv[1],&num))==NULL)
return 1;
QuickSort(p,0,num-1);
GuardarFichero(argv[2],num,p);
free(p);
return 0;
}
B.4 - fichero.c.
/* Programa que maneja una pequeña base de datos directamente sobre el
fichero */
#include <stdio.h>
#include <string.h>
/* Definicion de las constantes del programa */
#define TAM 30
#define TAM_BUFFER 10
/* Definicion de los codigos de error */
#define OK 0
#define ERROR 1
/* Definicion de las estructuras de datos del programa */
struct FICHA
{
unsigned long dni;
char nombre[TAM];
char apellido[2][TAM];
};
80El lenguaje de programación C
/* Rutina que muestra un menu en pantalla.
Parametros: Ninguno.
Return: char Opcion elegida. */
char Menu(void)
{
register char d;
printf("\nElige una opcion:\n");
printf("\t0 -- Salir del programa.\n");
printf("\t1 -- Insertar un nuevo elemento.\n");
printf("\t2 -- Buscar un elemento por su dni.\n");
printf("\t3 -- Buscar un elemento por su apellido.\n");
while ((d=getchar())<'0' || d>'3');
return d;
}
/* Rutina que muestra un elemento en pantalla.
Parametros: struct FICHA *ficha Puntero a la estructura con los datos
a mostrar.
Return: Ninguno. */
void Mostrar(const struct FICHA *ficha)
{
printf("\n\nDNI: %lu\n",ficha->dni);
printf("NOMBRE: %s\n",ficha->nombre);
printf("PRIMER APELLIDO: %s\n",ficha->apellido[0]);
printf("SEGUNDO APELLIDO: %s\n",ficha->apellido[1]);
printf("\nPulsa Enter para continuar\n");
getchar();
}
/* Rutina que busca un elemento dado su dni.
Parametros: FILE *fichero Puntero al fichero de trabajo.
unsigned long dni Numero de dni a buscar.
char opcion Opcion de ejecucion, 1 mostrar, 0 no mostrar.
Return: int Codigo de error. */
int BuscarDni(FILE *fichero,const unsigned long dni,const char opcion)
{
struct FICHA ficha;
fseek(fichero,0L,SEEK_SET);
while (fread(&ficha,sizeof(struct FICHA),1,fichero)==1)
if (dni==ficha.dni)
{
if (opcion)
Mostrar(&ficha);
Return OK;
}
return ERROR;
}
/* Rutina que busca por apellidos.
Parametros: FILE *fichero Puntero al fichero de trabajo.
char *apellido Apellido a buscar.
Return: int Codigo de error.*/
81El lenguaje de programación C
int BuscarApellido(FILE *fichero,char *apellido)
{
struct FICHA ficha;
char encontrado=0;
fseek(fichero,0L,SEEK_SET);
while (fread(&ficha,sizeof(struct FICHA),1,fichero)==1)
if (!strcmp(apellido,ficha.apellido[0]) ||
!strcmp(apellido,ficha.apellido[1]))
{
Mostrar(&ficha);
encontrado=1;
}
return (encontrado) ? OK : ERROR;
}
/* Rutina que inserta un nuevo elemento en el fichero.
Parametros: FILE *fichero Puntero al fichero de trabajo.
struct FICHA *ficha Puntero a la ficha a insertar.
Return: int Codigo de error. */
int Insertar(FILE *fichero,const struct FICHA *ficha)
{
if (BuscarDni(fichero,ficha->dni,0)!=ERROR)
return ERROR;
fseek(fichero,0L,SEEK_END);
fwrite(ficha,sizeof(struct FICHA),1,fichero);
return OK;
}
/* Rutina que pide los datos de una ficha.
Parametros: struct FICHA *ficha Puntero a la ficha que contendra los
datos.
char opcion Opcion de ejecucion (0..2).
Return: struct FICHA * Puntero a la ficha que contiene los datos. */
struct FICHA *PedirDatos(struct FICHA *ficha,
const char opcion)
{
switch(opcion)
{
case 0: printf("\nDNI: ");
scanf("%lu",&ficha->dni);
fflush(stdin);
break;
case 1: fflush(stdin);
printf("APELLIDO: ");
strupr(gets(ficha->apellido[1]));
break;
case 2: printf("\nDNI: ");
scanf("%lu",&ficha->dni);
fflush(stdin);
printf("NOMBRE: ");
strupr(gets(ficha->nombre));
printf("PRIMER APELLIDO: ");
strupr(gets(ficha->apellido[0]));
printf("SEGUNDO APELLIDO: ");
strupr(gets(ficha->apellido[1]));
82El lenguaje de programación C
break;
}
return ficha;
}
int main(int argc,char *argv[])
{
FILE *fichero;
struct FICHA ficha;
register char d;
if (argc!=2)
{
printf("\nModo de uso: %s <fichero>\n",argv[0]);
return 1;
}
if ((fichero=fopen(argv[1],"a+b"))==NULL)
{
printf("\nError creando el fichero: %s\n",argv[1]);
return 1;
}
if (setvbuf(fichero,NULL,_IOFBF,
TAM_BUFFER*sizeof(struct FICHA))!=0)
{
printf("\nError creando el buffer para %d elementos.\n",
TAM_BUFFER);
fclose(fichero);
return 1;
}
do
switch(d=Menu())
{
case '0':break;
case '1':if (Insertar(fichero,PedirDatos(&ficha,2))==ERROR)
printf("\nNumero de dni duplicado.\n");
break;
case '2':PedirDatos(&ficha,0);
if (BuscarDni(fichero,ficha.dni,1)==ERROR)
printf("\nDni no existente.\n");
break;
case '3':PedirDatos(&ficha,1);
if (BuscarApellido(fichero,ficha.apellido[1])==ERROR)
printf("\nApellido inexistente.\n");
break;
}
while (d!='0');
fclose(fichero);
return 0;
}
B.5 - arbol.c.
/* Programa que lee las palabras de un fichero y las almacena en un
arbol binario */
#include <stdio.h>
El lenguaje de programación C
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
/* Definicion de la longitud maxima de una palabra */
#define TAM 30
/* Definicion de las estructuras de datos del programa */
struct ARBOL
{
char pal[TAM+1];
struct ARBOL *izq,*der;
};
/* Rutina que lee una palabra del fichero.
Parametros: FILE *fichero Puntero al fichero de donde se leen las
palabras.
char *cadena Array de caracteres donde almacenar las
palabras.
Return: char * Puntero a la cadena con la palabra leida, NULL si
error. */
char *LeerPalabra(FILE *fichero,char *cadena)
{
register char d,i=0;
while ((d=fgetc(fichero))!=EOF && !isalpha(d));
if (d==EOF)
return NULL;
do
cadena[i++]=d;
while (i<TAM && (isalpha(d=fgetc(fichero)) || isdigit(d) ||
d=='_'));
cadena[i]='\0';
return cadena;
}
/* Rutina que crea el arbol binario, leyendo para ello el fichero.
Parametros: char *nombre Nombre del fichero a leer.
Return: struct ARBOL * Puntero a la raiz del arbol creado, NULL si
error. */
struct ARBOL *LeerFichero(char *nombre)
{
FILE *fichero;
char cadena[TAM+1],insertado;
int val;
struct ARBOL *cab=NULL,*p,*q;
if ((fichero=fopen(nombre,"rt"))==NULL)
{
printf("\nError, no puedo leer el fichero: %s\n",nombre);
return(NULL);
}
while (LeerPalabra(fichero,cadena)!=NULL)
{
if ((q=(struct ARBOL *)malloc(sizeof(struct ARBOL)))==NULL)
{
84El lenguaje de programación C
printf("\nError reservando memoria.\n");
fclose(fichero);
return NULL;
}
strcpy(q->pal,cadena);
q->izq=q->der=NULL;
if (cab==NULL)
cab=q;
else
{
p=cab;
insertado=0;
while (!insertado)
if ((val=strcmp(cadena,p->pal))<0)
if (p->izq==NULL)
{
p->izq=p;
insertado=1;
}
else
p=p->izq;
else
if (val>0)
if (p->der==NULL)
{
p->der=q;
insertado=1;
}
else
p=p->der;
else
insertado=1;
}
}
fclose(fichero);
return cab;
}
/* Rutina que muestra por pantalla el arbol ordenado a la vez que
libera la memoria.
Parametros: struct ARBOL *p Puntero al nodo a mostrar.
unsigned *cont Puntero al contador de elementos para
permitir parar la visualizacion.
Return: Ninguno.
*/
void Mostrar(struct ARBOL *p,unsigned *cont)
{
if (p->izq!=NULL)
Mostrar(p->izq,cont);
puts(p->pal);
if (++*cont>21)
{
*cont=1;
printf("\nPulsa Enter para continuar.\n");
getchar();
}
if (p->der!=NULL)
85El lenguaje de programación C
Mostrar(p->der,cont);
free(p);
}
int main(int argc,char *argv[])
{
struct ARBOL *p;
unsigned cont=1;
if (argc!=2)
{
printf("\nModo de uso: %s <fichero>\n",argv[0]);
return 1;
}
if ((p=LeerFichero(argv[1]))==NULL)
return 1;
printf("\n\n\n\n\n\n");
Mostrar(p,&cont);
return 0;
}
En este apéndice se incluyen algunos programas de ejemplo escritos en lenguaje
C. Los programas han sido realizados de forma que puedan ser compilados en la
mayoría de compiladores existentes para los sistemas operativos MS-DOS y UNIX sin
que exista la necesidad de realizar ningún tipo de cambio en los mismos.
B.1 - palindro.c.
/* Programa que calcula si una palabra es palindroma, esto es, se lee
igual de derecha a izquierda que de izquierda a derecha. */
#include <stdio.h>
#include <string.h>
#define TAM 100
/* Rutina que calcula si una palabra es palindroma.
Parametros: char *cadena Puntero al string con la palabra.
Return: int 0 no palindroma, <>0 palindroma. */
int Palindroma(char *cadena)
{
register int i,j;
i=0;
j=strlen(cadena)-1;
while (i<j && cadena[i]==cadena[j])
{
i++;
j--;
}
return (i>=j);
}
int main(void)
{
char cadena[TAM];
printf("\nIntroduce la palabra\n");
gets(cadena);
printf("La palabra: %s %s palindroma.\n",cadena,
(Palindroma(cadena)) ? "es" : "no es");
return 0;
}
B.2 - matriz.c.
/* Programa que calcula el producto de dos matrices. */
#include <stdio.h>
75El lenguaje de programación C
/* Definicion del tamaño maximo */
#define TAM 10
/* Definicion de los codigos de error */
#define OK 0
#define ERROR 1
/* Definicion de la estructura de datos */
struct MATRIZ
{
unsigned fila,columna;
float matriz[TAM][TAM];
};
/* Rutina que muestra un menu y pide una opcion del menu.
Parametros: Ninguno.
Return: char Opcion del menu elegida. */
char Menu(void)
{
register char d;
printf("\nElige la opcion deseada:\n");
printf("\t0 -- Salir del programa.\n");
printf("\t1 -- Cambiar la matriz A.\n");
printf("\t2 -- Cambiar la matriz B.\n");
printf("\t3 -- Calcular A*B\n");
printf("\t4 -- Calcular B*A\n");
while ((d=getchar())<'0' || d>'4');
return d;
}
/* Rutina que pide el numero de filas o de columnas de una matriz.
Parametros: char *cadena Puntero al string a mostrar.
Return: unsigned Numero de filas o de columnas. */
unsigned PedirTamano(const char *cadena)
{
unsigned valor;
do
{
printf("%s",cadena);
scanf("%u",&valor);
}
while (valor==0 || valor>TAM);
return valor;
}
/* Rutina que cambia una matriz.
Parametros: struct MATRIZ *a Puntero a la matriz que vamos a cambiar.
Return: Ninguno. */
void PedirMatriz(struct MATRIZ *a)
{
register unsigned i,j;
float valor;
76El lenguaje de programación C
a->fila=PedirTamano("\nNumero de filas de la matriz: ");
a->columna=PedirTamano("\nNumero de columnas de la matriz: \n");
for(i=0;i<a->fila;i++)
for(j=0;j<a->columna;j++)
{
printf("M[%u][%u]: ",i,j);
scanf("%f",&valor);
a->matriz[i][j]=valor;
}
}
/* Rutina que multiplica dos matrices. Las matrices se pasan por
puntero pues ello es mas rapido, aunque no se modifican en toda la
funcion.
Parametros: struct MATRIZ *a Puntero a la estructura con la primera
matriz a multiplicar.
struct MATRIZ *b Puntero a la estructura con la segunda
matriz a multiplicar.
struct MATRIZ *res Puntero a la estructura que contendra
el resultado.
Return: int Codigo de error. */
int Multiplicar(const struct MATRIZ *a,const struct MATRIZ *b,struct
MATRIZ *res)
{
register unsigned i,j,k;
if (a->columna!=b->fila)
return ERROR;
res->fila=a->fila;
res->columna=b->columna;
for(i=0;i<a->fila;i++)
for(j=0;j<b->columna;j++)
{
res->matriz[i][j]=0;
for(k=0;k<a->fila;k++)
res->matriz[i][j]+=a->matriz[i][k]*b->matriz[k][j];
}
return OK;
}
/* Rutina que muestra en pantalla el resultado de la operacion.
Parametros: struct MATRIZ *res Puntero a la estructura con el
resultado.
Return: Ninguno. */
void Mostrar(const struct MATRIZ *res)
{
register unsigned i,j;
for(i=0;i<res->fila;i++)
{
for(j=0;j<res->columna;j++)
printf("Res[%u][%u]= %f\n",i,j,res->matriz[i][j]);
printf("\nPulsa Enter para continuar.\n");
getchar();
}
}
77El lenguaje de programación C
int main(void)
{
struct MATRIZ a,b,res;
char d;
a.fila=a.columna=b.fila=b.columna=1;
a.matriz[0][0]=b.matriz[0][0]=1.0;
do
switch(d=Menu())
{
case '0':break;
case '1':PedirMatriz(&a);
break;
case '2':PedirMatriz(&b);
break;
case '3':
if (Multiplicar(&a,&b,&res)==ERROR)
printf("\nNo es posible multiplicar A*B\n");
else
Mostrar(&res);
break;
case '4':
if (Multiplicar(&b,&a,&res)==ERROR)
printf("\nNo es posible multiplicar B*A\n");
else
Mostrar(&res);
break;
}
while (d!='0');
return 0;
}
B.3 - ordenar.c.
/* Programa que ordena un fichero de cualquier tamaño mediante el
algoritmo QuickSort. El fichero contiene como primer elemento un
unsigned con el numero de elementos del fichero, y a continuacion
figuran todos los elementos a ordenar */
#include <stdio.h>
#include <stdlib.h>
/* Rutina que lee el fichero de datos y devuelve un puntero al array
de la memoria reservada.
Parametros: char *nombre Nombre del fichero a leer.
unsigned *num Puntero al unsigned que contendra el numero
de elementos del array.
Return: float * Puntero al array de float, NULL si sucede un error. */
float *LeerFichero(const char *nombre, unsigned *num)
{
FILE *fp;
float *p;
register unsigned i;
78El lenguaje de programación C
if ((fp=fopen(nombre,"rt"))==NULL)
{
printf("\nError, no puedo abrir el fichero: %s\n",nombre);
return NULL;
}
fscanf(fp,"%u\n",num);
if ((p=(float *)calloc(*num,sizeof(float)))==NULL)
{
printf("\nError, memoria insuficiente.\n");
fclose(fp);
return NULL;
}
for(i=0;i<*num;i++)
fscanf(fp,"%f\n",&p[i]);
fclose(fp);
return p;
}
/* Rutina que escribe el fichero de datos ordenado.
Parametros: char *nombre Nombre del fichero donde guardar los datos.
unsigned num Numero de elementos del array.
float *p Puntero al array ordenado.
Return: Ninguno. */
void GuardarFichero(const char *nombre,const unsigned num,const float
*p)
{
FILE *fp;
register unsigned i;
if ((fp=fopen(nombre,"wt"))==NULL)
{
printf("\nError, no puedo crear el fichero: %s\n",nombre);
return;
}
fprintf(fp,"%u\n",num);
for(i=0;i<num;i++)
fprintf(fp,"%f\n",p[i]);
fclose(fp);
}
/* Rutina que ordena un array segun el algoritmo Quick-Sort.
Parametros: float *p Puntero al array a ordenar.
unsigned izq Elemento de la izquierda a ordenar.
unsigned der Elemento de la derecha a ordenar.
Return: Ninguno. */
void QuickSort(float *p,unsigned izq,unsigned der)
{
register unsigned i=izq,j=der;
float val,inter;
val=p[(i+j)/2];
do
{
while (p[i]<val) i++;
while (p[j]>val) j--;
if (i<=j)
79El lenguaje de programación C
{
inter=p[i];
p[i]=p[j];
p[j]=inter;
i++;
j--;
}
}
while (i<=j);
if (izq<j) QuickSort(p,izq,j);
if (i<der) QuickSort(p,i,der);
return;
}
int main(int argc,char *argv[])
{
float *p;
unsigned num;
if (argc!=3)
{
printf("\nModo de uso: %s <fichero1> <fichero2>\n",argv[0]);
return(1);
}
if ((p=LeerFichero(argv[1],&num))==NULL)
return 1;
QuickSort(p,0,num-1);
GuardarFichero(argv[2],num,p);
free(p);
return 0;
}
B.4 - fichero.c.
/* Programa que maneja una pequeña base de datos directamente sobre el
fichero */
#include <stdio.h>
#include <string.h>
/* Definicion de las constantes del programa */
#define TAM 30
#define TAM_BUFFER 10
/* Definicion de los codigos de error */
#define OK 0
#define ERROR 1
/* Definicion de las estructuras de datos del programa */
struct FICHA
{
unsigned long dni;
char nombre[TAM];
char apellido[2][TAM];
};
80El lenguaje de programación C
/* Rutina que muestra un menu en pantalla.
Parametros: Ninguno.
Return: char Opcion elegida. */
char Menu(void)
{
register char d;
printf("\nElige una opcion:\n");
printf("\t0 -- Salir del programa.\n");
printf("\t1 -- Insertar un nuevo elemento.\n");
printf("\t2 -- Buscar un elemento por su dni.\n");
printf("\t3 -- Buscar un elemento por su apellido.\n");
while ((d=getchar())<'0' || d>'3');
return d;
}
/* Rutina que muestra un elemento en pantalla.
Parametros: struct FICHA *ficha Puntero a la estructura con los datos
a mostrar.
Return: Ninguno. */
void Mostrar(const struct FICHA *ficha)
{
printf("\n\nDNI: %lu\n",ficha->dni);
printf("NOMBRE: %s\n",ficha->nombre);
printf("PRIMER APELLIDO: %s\n",ficha->apellido[0]);
printf("SEGUNDO APELLIDO: %s\n",ficha->apellido[1]);
printf("\nPulsa Enter para continuar\n");
getchar();
}
/* Rutina que busca un elemento dado su dni.
Parametros: FILE *fichero Puntero al fichero de trabajo.
unsigned long dni Numero de dni a buscar.
char opcion Opcion de ejecucion, 1 mostrar, 0 no mostrar.
Return: int Codigo de error. */
int BuscarDni(FILE *fichero,const unsigned long dni,const char opcion)
{
struct FICHA ficha;
fseek(fichero,0L,SEEK_SET);
while (fread(&ficha,sizeof(struct FICHA),1,fichero)==1)
if (dni==ficha.dni)
{
if (opcion)
Mostrar(&ficha);
Return OK;
}
return ERROR;
}
/* Rutina que busca por apellidos.
Parametros: FILE *fichero Puntero al fichero de trabajo.
char *apellido Apellido a buscar.
Return: int Codigo de error.*/
81El lenguaje de programación C
int BuscarApellido(FILE *fichero,char *apellido)
{
struct FICHA ficha;
char encontrado=0;
fseek(fichero,0L,SEEK_SET);
while (fread(&ficha,sizeof(struct FICHA),1,fichero)==1)
if (!strcmp(apellido,ficha.apellido[0]) ||
!strcmp(apellido,ficha.apellido[1]))
{
Mostrar(&ficha);
encontrado=1;
}
return (encontrado) ? OK : ERROR;
}
/* Rutina que inserta un nuevo elemento en el fichero.
Parametros: FILE *fichero Puntero al fichero de trabajo.
struct FICHA *ficha Puntero a la ficha a insertar.
Return: int Codigo de error. */
int Insertar(FILE *fichero,const struct FICHA *ficha)
{
if (BuscarDni(fichero,ficha->dni,0)!=ERROR)
return ERROR;
fseek(fichero,0L,SEEK_END);
fwrite(ficha,sizeof(struct FICHA),1,fichero);
return OK;
}
/* Rutina que pide los datos de una ficha.
Parametros: struct FICHA *ficha Puntero a la ficha que contendra los
datos.
char opcion Opcion de ejecucion (0..2).
Return: struct FICHA * Puntero a la ficha que contiene los datos. */
struct FICHA *PedirDatos(struct FICHA *ficha,
const char opcion)
{
switch(opcion)
{
case 0: printf("\nDNI: ");
scanf("%lu",&ficha->dni);
fflush(stdin);
break;
case 1: fflush(stdin);
printf("APELLIDO: ");
strupr(gets(ficha->apellido[1]));
break;
case 2: printf("\nDNI: ");
scanf("%lu",&ficha->dni);
fflush(stdin);
printf("NOMBRE: ");
strupr(gets(ficha->nombre));
printf("PRIMER APELLIDO: ");
strupr(gets(ficha->apellido[0]));
printf("SEGUNDO APELLIDO: ");
strupr(gets(ficha->apellido[1]));
82El lenguaje de programación C
break;
}
return ficha;
}
int main(int argc,char *argv[])
{
FILE *fichero;
struct FICHA ficha;
register char d;
if (argc!=2)
{
printf("\nModo de uso: %s <fichero>\n",argv[0]);
return 1;
}
if ((fichero=fopen(argv[1],"a+b"))==NULL)
{
printf("\nError creando el fichero: %s\n",argv[1]);
return 1;
}
if (setvbuf(fichero,NULL,_IOFBF,
TAM_BUFFER*sizeof(struct FICHA))!=0)
{
printf("\nError creando el buffer para %d elementos.\n",
TAM_BUFFER);
fclose(fichero);
return 1;
}
do
switch(d=Menu())
{
case '0':break;
case '1':if (Insertar(fichero,PedirDatos(&ficha,2))==ERROR)
printf("\nNumero de dni duplicado.\n");
break;
case '2':PedirDatos(&ficha,0);
if (BuscarDni(fichero,ficha.dni,1)==ERROR)
printf("\nDni no existente.\n");
break;
case '3':PedirDatos(&ficha,1);
if (BuscarApellido(fichero,ficha.apellido[1])==ERROR)
printf("\nApellido inexistente.\n");
break;
}
while (d!='0');
fclose(fichero);
return 0;
}
B.5 - arbol.c.
/* Programa que lee las palabras de un fichero y las almacena en un
arbol binario */
#include <stdio.h>
El lenguaje de programación C
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
/* Definicion de la longitud maxima de una palabra */
#define TAM 30
/* Definicion de las estructuras de datos del programa */
struct ARBOL
{
char pal[TAM+1];
struct ARBOL *izq,*der;
};
/* Rutina que lee una palabra del fichero.
Parametros: FILE *fichero Puntero al fichero de donde se leen las
palabras.
char *cadena Array de caracteres donde almacenar las
palabras.
Return: char * Puntero a la cadena con la palabra leida, NULL si
error. */
char *LeerPalabra(FILE *fichero,char *cadena)
{
register char d,i=0;
while ((d=fgetc(fichero))!=EOF && !isalpha(d));
if (d==EOF)
return NULL;
do
cadena[i++]=d;
while (i<TAM && (isalpha(d=fgetc(fichero)) || isdigit(d) ||
d=='_'));
cadena[i]='\0';
return cadena;
}
/* Rutina que crea el arbol binario, leyendo para ello el fichero.
Parametros: char *nombre Nombre del fichero a leer.
Return: struct ARBOL * Puntero a la raiz del arbol creado, NULL si
error. */
struct ARBOL *LeerFichero(char *nombre)
{
FILE *fichero;
char cadena[TAM+1],insertado;
int val;
struct ARBOL *cab=NULL,*p,*q;
if ((fichero=fopen(nombre,"rt"))==NULL)
{
printf("\nError, no puedo leer el fichero: %s\n",nombre);
return(NULL);
}
while (LeerPalabra(fichero,cadena)!=NULL)
{
if ((q=(struct ARBOL *)malloc(sizeof(struct ARBOL)))==NULL)
{
84El lenguaje de programación C
printf("\nError reservando memoria.\n");
fclose(fichero);
return NULL;
}
strcpy(q->pal,cadena);
q->izq=q->der=NULL;
if (cab==NULL)
cab=q;
else
{
p=cab;
insertado=0;
while (!insertado)
if ((val=strcmp(cadena,p->pal))<0)
if (p->izq==NULL)
{
p->izq=p;
insertado=1;
}
else
p=p->izq;
else
if (val>0)
if (p->der==NULL)
{
p->der=q;
insertado=1;
}
else
p=p->der;
else
insertado=1;
}
}
fclose(fichero);
return cab;
}
/* Rutina que muestra por pantalla el arbol ordenado a la vez que
libera la memoria.
Parametros: struct ARBOL *p Puntero al nodo a mostrar.
unsigned *cont Puntero al contador de elementos para
permitir parar la visualizacion.
Return: Ninguno.
*/
void Mostrar(struct ARBOL *p,unsigned *cont)
{
if (p->izq!=NULL)
Mostrar(p->izq,cont);
puts(p->pal);
if (++*cont>21)
{
*cont=1;
printf("\nPulsa Enter para continuar.\n");
getchar();
}
if (p->der!=NULL)
85El lenguaje de programación C
Mostrar(p->der,cont);
free(p);
}
int main(int argc,char *argv[])
{
struct ARBOL *p;
unsigned cont=1;
if (argc!=2)
{
printf("\nModo de uso: %s <fichero>\n",argv[0]);
return 1;
}
if ((p=LeerFichero(argv[1]))==NULL)
return 1;
printf("\n\n\n\n\n\n");
Mostrar(p,&cont);
return 0;
}
c++ apendice e y f
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
A.5 - Asignación dinámica de memoria.
calloc
#include <stdlib.h>
void *calloc(size_t num,size_t tam);
La función calloc() asigna memoria para un array de num objetos, cada uno de
los cuales tiene tamaño tam. La memoria asignada es inicializada con el valor cero. La
función calloc() devuelve un puntero al primer byte de la región asignada. Si no existe
memoria libre suficiente para satisfacer la petición, se devuelve un puntero nulo
(NULL).
free
#include <stdlib.h>
void free(void *ptr);
La función free() libera la memoria apuntada por ptr, haciendo que dicha
memoria este disponible para futuras asignaciones. Solo se debe llamar a free() con un
puntero que haya sido previamente asignado utilizando alguna función de asignación
dinámica.El lenguaje de programación C
malloc
#include <stdlib.h>
void *malloc(size_t tam);
La función malloc() devuelve un puntero al primer byte de una región de
memoria de tamaño tam que se encuentra libre. Si no existe memoria suficiente para
satisfacer la petición, se devuelve un puntero nulo (NULL).
realloc
#include <stdlib.h>
void *realloc(void *ptr,size_t tam);
La función realloc() cambia el tamaño de la memoria apuntada por ptr al que
esta especificado por tam. El valor de tam puede ser mayor o menor que el original.
Devuelve un puntero al nuevo bloque de memoria, ya que puede ser necesario que
realloc() traslade el bloque de posición al incrementar su tamaño. Si esto sucede, el
contenido del antiguo bloque se copia en el nuevo bloque, por lo cual, la información
no se pierde.
Si ptr es un puntero nulo (NULL), realloc() simplemente asigna tam bytes de
memoria y devuelve un puntero a dicha memoria. Si tam es cero, la memoria asignada
se libera. Si no existe memoria suficiente para satisfacer la petición, realloc() devuelve
un puntero nulo (NULL), y el bloque de memoria original se deja sin cambiar.
A.6 - Funciones varias.
abs
#include <stdlib.h>
int abs(int num);
La función abs() devuelve el valor absoluto del entero dado por num.
atof
#include <stdlib.h>
double atof(const char *cad);
La función atof() convierte la cadena apuntada por cad en un valor de tipo
double. La cadena debe contener un número valido en coma flotante. En caso contrario
el valor devuelto es indefinido.
El número puede terminar por cualquier carácter que no pueda formar parte de
un número válido en coma flotante. Esto incluye espacios en blanco, signos de
puntuación distintos del punto, y caracteres que no sean E o e. Así si se llama a atof()
con la cadena "100.00HOLA", devolverá el valor 100.00.El lenguaje de programación C
atoi
#include <stdlib.h>
int atoi(const char *cad);
La función atoi() convierte la cadena apuntada por cad en un valor de tipo int.
La cadena debe contener un número entero valido. Si no es este el caso, el valor
devuelto es indefinido, aunque, la mayoría de implementaciones de la función
devuelven el valor cero.
El número puede acabar con cualquier carácter que no pueda formar parte de un
número entero. Esto incluye espacios en blanco, signos de puntuación, y cualquier
carácter que no sea la E o la e. Esto supone que si se llama a atoi() con la cadena
"123.23", devolverá el valor 123.
atol
#include <stdlib.h>
long int atol(const char *cad);
La función atol() convierte la cadena apuntada por cad en un valor de tipo long
int. Para más información consultar la función atoi().
exit
#include <stdlib.h>
void exit(int estado);
La función exit() da lugar inmediatamente a la terminación normal de un
programa. El valor de estado se pasa al proceso que llamo a este programa,
normalmente el sistema operativo, si el entorno lo soporta. Por convenio, si el valor de
estado es cero, se supone que se ha producido una terminación normal del programa.
Un valor distinto de cero puede utilizarse para indicar un error definido por la
implementación.
labs
#include <stdlib.h>
long labs(long num);
La función labs() devuelve el valor absoluto de num.
system
#include <stdlib.h>
int system(const char *cad);
La función system() pasa la cadena apuntada por cad como una orden al
procesador de ordenes del sistema operativo. Si se llama a system() con un puntero
nulo (NULL), devuelve un valor distinto de cero si está presente un procesador deEl lenguaje de programación C
ordenes, en otro caso, se devuelve un valor distinto de cero. Si cad no es un puntero
nulo (NULL), system() devuelve el valor cero si la orden ha sido correctamente
ejecutada, y un valor distinto de cero en caso contrario.
calloc
#include <stdlib.h>
void *calloc(size_t num,size_t tam);
La función calloc() asigna memoria para un array de num objetos, cada uno de
los cuales tiene tamaño tam. La memoria asignada es inicializada con el valor cero. La
función calloc() devuelve un puntero al primer byte de la región asignada. Si no existe
memoria libre suficiente para satisfacer la petición, se devuelve un puntero nulo
(NULL).
free
#include <stdlib.h>
void free(void *ptr);
La función free() libera la memoria apuntada por ptr, haciendo que dicha
memoria este disponible para futuras asignaciones. Solo se debe llamar a free() con un
puntero que haya sido previamente asignado utilizando alguna función de asignación
dinámica.El lenguaje de programación C
malloc
#include <stdlib.h>
void *malloc(size_t tam);
La función malloc() devuelve un puntero al primer byte de una región de
memoria de tamaño tam que se encuentra libre. Si no existe memoria suficiente para
satisfacer la petición, se devuelve un puntero nulo (NULL).
realloc
#include <stdlib.h>
void *realloc(void *ptr,size_t tam);
La función realloc() cambia el tamaño de la memoria apuntada por ptr al que
esta especificado por tam. El valor de tam puede ser mayor o menor que el original.
Devuelve un puntero al nuevo bloque de memoria, ya que puede ser necesario que
realloc() traslade el bloque de posición al incrementar su tamaño. Si esto sucede, el
contenido del antiguo bloque se copia en el nuevo bloque, por lo cual, la información
no se pierde.
Si ptr es un puntero nulo (NULL), realloc() simplemente asigna tam bytes de
memoria y devuelve un puntero a dicha memoria. Si tam es cero, la memoria asignada
se libera. Si no existe memoria suficiente para satisfacer la petición, realloc() devuelve
un puntero nulo (NULL), y el bloque de memoria original se deja sin cambiar.
A.6 - Funciones varias.
abs
#include <stdlib.h>
int abs(int num);
La función abs() devuelve el valor absoluto del entero dado por num.
atof
#include <stdlib.h>
double atof(const char *cad);
La función atof() convierte la cadena apuntada por cad en un valor de tipo
double. La cadena debe contener un número valido en coma flotante. En caso contrario
el valor devuelto es indefinido.
El número puede terminar por cualquier carácter que no pueda formar parte de
un número válido en coma flotante. Esto incluye espacios en blanco, signos de
puntuación distintos del punto, y caracteres que no sean E o e. Así si se llama a atof()
con la cadena "100.00HOLA", devolverá el valor 100.00.El lenguaje de programación C
atoi
#include <stdlib.h>
int atoi(const char *cad);
La función atoi() convierte la cadena apuntada por cad en un valor de tipo int.
La cadena debe contener un número entero valido. Si no es este el caso, el valor
devuelto es indefinido, aunque, la mayoría de implementaciones de la función
devuelven el valor cero.
El número puede acabar con cualquier carácter que no pueda formar parte de un
número entero. Esto incluye espacios en blanco, signos de puntuación, y cualquier
carácter que no sea la E o la e. Esto supone que si se llama a atoi() con la cadena
"123.23", devolverá el valor 123.
atol
#include <stdlib.h>
long int atol(const char *cad);
La función atol() convierte la cadena apuntada por cad en un valor de tipo long
int. Para más información consultar la función atoi().
exit
#include <stdlib.h>
void exit(int estado);
La función exit() da lugar inmediatamente a la terminación normal de un
programa. El valor de estado se pasa al proceso que llamo a este programa,
normalmente el sistema operativo, si el entorno lo soporta. Por convenio, si el valor de
estado es cero, se supone que se ha producido una terminación normal del programa.
Un valor distinto de cero puede utilizarse para indicar un error definido por la
implementación.
labs
#include <stdlib.h>
long labs(long num);
La función labs() devuelve el valor absoluto de num.
system
#include <stdlib.h>
int system(const char *cad);
La función system() pasa la cadena apuntada por cad como una orden al
procesador de ordenes del sistema operativo. Si se llama a system() con un puntero
nulo (NULL), devuelve un valor distinto de cero si está presente un procesador deEl lenguaje de programación C
ordenes, en otro caso, se devuelve un valor distinto de cero. Si cad no es un puntero
nulo (NULL), system() devuelve el valor cero si la orden ha sido correctamente
ejecutada, y un valor distinto de cero en caso contrario.
C++ apendice d
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
A.4 - Funciones matemáticas.
acos
#include <math.h>
double acos(double arg);
La función acos() devuelve el arcocoseno de arg. El argumento de acos() debe
estar en el rango de -1 a 1, en cualquier otro caso se produce un error de dominio.
asin
#include <math.h>
double asin(double arg);
La función asin() devuelve el arcoseno de arg. El argumento de asin() debe
estar en el rango de -1 a 1, en cualquier otro caso se produce un error de dominio.
atan
#include <math.h>
double atan(double arg);
La función atan() devuelve el arcotangente de arg.
atan2
#include <math.h>
double atan2(double y,double x);
La función atan2() devuelve el arcotangente de y/x. Utiliza el signo de sus
argumentos para obtener el cuadrante del valor devuelto.El lenguaje de programación C
ceil
#include <math.h>
double ceil(double num);
La función ceil() devuelve el menor entero mayor o igual que num y lo
representa como double. Por ejemplo, dado 1.02, ceil() devuelve 2.0, dado -1.02, ceil()
devuelve -1.0.
cos
#include <math.h>
double cos(double arg);
La función cos() devuelve el coseno de arg. El valor de arg debe venir dado en
radianes.
cosh
#include <math.h>
double cosh(double arg);
La función cosh() devuelve el coseno hiperbólico de arg. El valor de arg debe
venir dado en radianes.
exp
#include <math.h>
double exp(double arg);
La función exp() devuelve el número e elevado a la potencia de arg.
fabs
#include <math.h>
double fabs(double num);
La función fabs() devuelve el valor absoluto de num.
floor
#include <math.h>
double floor(double num);
La función floor() devuelve el mayor entero, representado como double, que no
es mayor que num. Por ejemplo, dado 1.02, floor() devuelve 1.0, dado -1.02, floor()
devuelve -2.0.El lenguaje de programación C
fmod
#include <math.h>
double fmod(double x,double y);
La función fmod() devuelve el resto de la división entera x/y.
log
#include <math.h>
double log(double num);
La función log() devuelve el logaritmo neperiano de num. Se produce un error
de dominio si num es negativo, y un error de rango si el argumento es cero.
log10
#include <math.h>
double log10(double num);
La función log10() devuelve el logaritmo en base 10 de num. Se produce un
error de dominio si num es negativo, y un error de rango si el argumento es cero.
pow
#include <math.h>
double pow(double base,double exp);
La función pow() devuelve base elevada a exp. Se produce un error de dominio
si base es cero y exp es menor o igual a cero. También puede ocurrir si base es
negativo y exp no es entero. Un desbordamiento produce un error de rango.
sin
#include <math.h>
double sin(double arg);
La función sin() devuelve el seno de arg. El valor de arg debe venir dado en
radianes.
sinh
#include <math.h>
double sinh(double arg);
La función sinh() devuelve el seno hiperbólico de arg. El valor de arg debe
venir dado en radianes.El lenguaje de programación C
sqrt
#include <math.h>
double sqrt(double num);
La función sqrt() devuelve la raíz cuadrada de num. Si se llama con un número
negativo, se produce un error de dominio.
tan
#include <math.h>
double tan(double arg);
La función tan() devuelve la tangente de arg. El valor de arg debe venir dado en
radianes.
tanh
#include <math.h>
double tanh(double arg);
La función tanh() devuelve la tangente hiperbólica de arg. El valor de arg debe
venir dado en radianes.
acos
#include <math.h>
double acos(double arg);
La función acos() devuelve el arcocoseno de arg. El argumento de acos() debe
estar en el rango de -1 a 1, en cualquier otro caso se produce un error de dominio.
asin
#include <math.h>
double asin(double arg);
La función asin() devuelve el arcoseno de arg. El argumento de asin() debe
estar en el rango de -1 a 1, en cualquier otro caso se produce un error de dominio.
atan
#include <math.h>
double atan(double arg);
La función atan() devuelve el arcotangente de arg.
atan2
#include <math.h>
double atan2(double y,double x);
La función atan2() devuelve el arcotangente de y/x. Utiliza el signo de sus
argumentos para obtener el cuadrante del valor devuelto.El lenguaje de programación C
ceil
#include <math.h>
double ceil(double num);
La función ceil() devuelve el menor entero mayor o igual que num y lo
representa como double. Por ejemplo, dado 1.02, ceil() devuelve 2.0, dado -1.02, ceil()
devuelve -1.0.
cos
#include <math.h>
double cos(double arg);
La función cos() devuelve el coseno de arg. El valor de arg debe venir dado en
radianes.
cosh
#include <math.h>
double cosh(double arg);
La función cosh() devuelve el coseno hiperbólico de arg. El valor de arg debe
venir dado en radianes.
exp
#include <math.h>
double exp(double arg);
La función exp() devuelve el número e elevado a la potencia de arg.
fabs
#include <math.h>
double fabs(double num);
La función fabs() devuelve el valor absoluto de num.
floor
#include <math.h>
double floor(double num);
La función floor() devuelve el mayor entero, representado como double, que no
es mayor que num. Por ejemplo, dado 1.02, floor() devuelve 1.0, dado -1.02, floor()
devuelve -2.0.El lenguaje de programación C
fmod
#include <math.h>
double fmod(double x,double y);
La función fmod() devuelve el resto de la división entera x/y.
log
#include <math.h>
double log(double num);
La función log() devuelve el logaritmo neperiano de num. Se produce un error
de dominio si num es negativo, y un error de rango si el argumento es cero.
log10
#include <math.h>
double log10(double num);
La función log10() devuelve el logaritmo en base 10 de num. Se produce un
error de dominio si num es negativo, y un error de rango si el argumento es cero.
pow
#include <math.h>
double pow(double base,double exp);
La función pow() devuelve base elevada a exp. Se produce un error de dominio
si base es cero y exp es menor o igual a cero. También puede ocurrir si base es
negativo y exp no es entero. Un desbordamiento produce un error de rango.
sin
#include <math.h>
double sin(double arg);
La función sin() devuelve el seno de arg. El valor de arg debe venir dado en
radianes.
sinh
#include <math.h>
double sinh(double arg);
La función sinh() devuelve el seno hiperbólico de arg. El valor de arg debe
venir dado en radianes.El lenguaje de programación C
sqrt
#include <math.h>
double sqrt(double num);
La función sqrt() devuelve la raíz cuadrada de num. Si se llama con un número
negativo, se produce un error de dominio.
tan
#include <math.h>
double tan(double arg);
La función tan() devuelve la tangente de arg. El valor de arg debe venir dado en
radianes.
tanh
#include <math.h>
double tanh(double arg);
La función tanh() devuelve la tangente hiperbólica de arg. El valor de arg debe
venir dado en radianes.
c++ apendice c
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
A.3 - Funciones de cadenas.
memchr
#include <string.h>
void *memchr(const void *buffer,int ch,size_t cuenta);
La función memchr() busca en buffer la primera ocurrencia de ch en los
primeros cuenta caracteres. La función devuelve un puntero a la primera ocurrencia del
carácter ch en buffer. Si no encuentra ch, devuelve un puntero nulo (NULL).
memcmp
#include <string.h>
int memcmp(const void *buf1,const void *buf2,size_t cuenta);
La función memcmp() compara los primeros cuenta caracteres de los arrays
apuntados por buf1 y buf2. La comparación se hace lexicográficamente. La función
devuelve un entero que es interpretado según se indica a continuación:
Valor devuelto Descripción
Menor que cero buf1 es menor que buf2
Igual a cero buf1 es igual a buf2
Mayor que cero buf1 es mayor que buf2
Tabla A.3.1: Interpretación de los valores devueltos por la función memcmp().
memcpy
#include <string.h>
void *memcpy(void *hacia,const void *desde,size_t cuenta);
La función memcpy() copia cuenta caracteres del array apuntado por desde en el
array apuntado por hacia. Si los arrays se superponen, el comportamiento de memcpy()
queda indefinido. La función devuelve un puntero a hacia.
memset
#include <string.h>
void *memset(void *buf,int ch,size_t cuenta);
La función memset() copia el byte menos significativo de ch en los primero
cuenta caracteres del array apuntado por buf. Devuelve buf. Su uso más común es
inicializar una región de memoria con algún valor conocido.
strcat
#include <string.h>
char *strcat(char *cad1,const char *cad2);El lenguaje de programación C
La función strcat() concatena una copia de cad2 en cad1, y añade al final de
cad1 un carácter nulo ('\0'). El carácter nulo de terminación, que originalmente tenía
cad1, es sustituido por el primer carácter de cad2. La cadena cad2 no se modifica en
esta operación. La función strcat() devuelve cad1.
strchr
#include <string.h>
char *strchr(char *cad,int ch);
La función strchr() devuelve un puntero a la primera ocurrencia del byte menos
significativo de ch en la cadena apuntada por cad. Si no sucede, devuelve un puntero
nulo (NULL).
strcmp
#include <string.h>
int strcmp(const char *cad1,const char *cad2);
La función strcmp() compara lexicográficamente dos cadenas que finalizan con
el carácter nulo, y devuelve un entero que se interpreta de la siguiente forma:
Valor devuelto Descripción
Menor que cero cad1 es menor que cad2
Igual a cero cad1 es igual a cad2
Mayor que cero cad1 es mayor que
cad2
Tabla A.3.2: Interpretación de los valores devueltos por la función strcmp().
strcpy
#include <string.h>
char *strcpy(char *cad1,const char *cad2);
La función strcpy() se utiliza para copiar el contenido de cad2 en cad1. El
elemento cad2 debe ser un puntero a una cadena que finalice con un carácter nulo. La
función devuelve un puntero a cad1.
strlen
#include <string.h>
unsigned int strlen(char *cad);
La función strlen() devuelve el número de caracteres de la cadena apuntada por
cad que finaliza con un carácter nulo. El carácter nulo no se contabiliza.
strtok
#include <string.h>
char *strtok(char *cad1,const char *cad2);El lenguaje de programación C
La función strtok() devuelve un puntero a la siguiente palabra de la cadena
apuntada por cad1. Los caracteres que constituyen la cadena apuntada por cad2 son los
delimitadores que identifican la palabra. Devuelve un puntero nulo (NULL) cuando no
existe ninguna palabra que devolver.
La primera vez que se llama a strtok() se utiliza realmente cad1 en la llamada.
Las llamadas posteriores utilizan un puntero nulo (NULL) como primer argumento.
La función strtok() modifica la cadena apuntada por cad1, pues, cada vez que se
encuentra una palabra, se pone un carácter nulo donde esta el delimitador. De esta
forma strtok() puede continuar avanzando por la cadena.
memchr
#include <string.h>
void *memchr(const void *buffer,int ch,size_t cuenta);
La función memchr() busca en buffer la primera ocurrencia de ch en los
primeros cuenta caracteres. La función devuelve un puntero a la primera ocurrencia del
carácter ch en buffer. Si no encuentra ch, devuelve un puntero nulo (NULL).
memcmp
#include <string.h>
int memcmp(const void *buf1,const void *buf2,size_t cuenta);
La función memcmp() compara los primeros cuenta caracteres de los arrays
apuntados por buf1 y buf2. La comparación se hace lexicográficamente. La función
devuelve un entero que es interpretado según se indica a continuación:
Valor devuelto Descripción
Menor que cero buf1 es menor que buf2
Igual a cero buf1 es igual a buf2
Mayor que cero buf1 es mayor que buf2
Tabla A.3.1: Interpretación de los valores devueltos por la función memcmp().
memcpy
#include <string.h>
void *memcpy(void *hacia,const void *desde,size_t cuenta);
La función memcpy() copia cuenta caracteres del array apuntado por desde en el
array apuntado por hacia. Si los arrays se superponen, el comportamiento de memcpy()
queda indefinido. La función devuelve un puntero a hacia.
memset
#include <string.h>
void *memset(void *buf,int ch,size_t cuenta);
La función memset() copia el byte menos significativo de ch en los primero
cuenta caracteres del array apuntado por buf. Devuelve buf. Su uso más común es
inicializar una región de memoria con algún valor conocido.
strcat
#include <string.h>
char *strcat(char *cad1,const char *cad2);El lenguaje de programación C
La función strcat() concatena una copia de cad2 en cad1, y añade al final de
cad1 un carácter nulo ('\0'). El carácter nulo de terminación, que originalmente tenía
cad1, es sustituido por el primer carácter de cad2. La cadena cad2 no se modifica en
esta operación. La función strcat() devuelve cad1.
strchr
#include <string.h>
char *strchr(char *cad,int ch);
La función strchr() devuelve un puntero a la primera ocurrencia del byte menos
significativo de ch en la cadena apuntada por cad. Si no sucede, devuelve un puntero
nulo (NULL).
strcmp
#include <string.h>
int strcmp(const char *cad1,const char *cad2);
La función strcmp() compara lexicográficamente dos cadenas que finalizan con
el carácter nulo, y devuelve un entero que se interpreta de la siguiente forma:
Valor devuelto Descripción
Menor que cero cad1 es menor que cad2
Igual a cero cad1 es igual a cad2
Mayor que cero cad1 es mayor que
cad2
Tabla A.3.2: Interpretación de los valores devueltos por la función strcmp().
strcpy
#include <string.h>
char *strcpy(char *cad1,const char *cad2);
La función strcpy() se utiliza para copiar el contenido de cad2 en cad1. El
elemento cad2 debe ser un puntero a una cadena que finalice con un carácter nulo. La
función devuelve un puntero a cad1.
strlen
#include <string.h>
unsigned int strlen(char *cad);
La función strlen() devuelve el número de caracteres de la cadena apuntada por
cad que finaliza con un carácter nulo. El carácter nulo no se contabiliza.
strtok
#include <string.h>
char *strtok(char *cad1,const char *cad2);El lenguaje de programación C
La función strtok() devuelve un puntero a la siguiente palabra de la cadena
apuntada por cad1. Los caracteres que constituyen la cadena apuntada por cad2 son los
delimitadores que identifican la palabra. Devuelve un puntero nulo (NULL) cuando no
existe ninguna palabra que devolver.
La primera vez que se llama a strtok() se utiliza realmente cad1 en la llamada.
Las llamadas posteriores utilizan un puntero nulo (NULL) como primer argumento.
La función strtok() modifica la cadena apuntada por cad1, pues, cada vez que se
encuentra una palabra, se pone un carácter nulo donde esta el delimitador. De esta
forma strtok() puede continuar avanzando por la cadena.
c++ apendice c
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
A.3 - Funciones de cadenas.
memchr
#include <string.h>
void *memchr(const void *buffer,int ch,size_t cuenta);
La función memchr() busca en buffer la primera ocurrencia de ch en los
primeros cuenta caracteres. La función devuelve un puntero a la primera ocurrencia del
carácter ch en buffer. Si no encuentra ch, devuelve un puntero nulo (NULL).
memcmp
#include <string.h>
int memcmp(const void *buf1,const void *buf2,size_t cuenta);
La función memcmp() compara los primeros cuenta caracteres de los arrays
apuntados por buf1 y buf2. La comparación se hace lexicográficamente. La función
devuelve un entero que es interpretado según se indica a continuación:
Valor devuelto Descripción
Menor que cero buf1 es menor que buf2
Igual a cero buf1 es igual a buf2
Mayor que cero buf1 es mayor que buf2
Tabla A.3.1: Interpretación de los valores devueltos por la función memcmp().
memcpy
#include <string.h>
void *memcpy(void *hacia,const void *desde,size_t cuenta);
La función memcpy() copia cuenta caracteres del array apuntado por desde en el
array apuntado por hacia. Si los arrays se superponen, el comportamiento de memcpy()
queda indefinido. La función devuelve un puntero a hacia.
memset
#include <string.h>
void *memset(void *buf,int ch,size_t cuenta);
La función memset() copia el byte menos significativo de ch en los primero
cuenta caracteres del array apuntado por buf. Devuelve buf. Su uso más común es
inicializar una región de memoria con algún valor conocido.
strcat
#include <string.h>
char *strcat(char *cad1,const char *cad2);El lenguaje de programación C
La función strcat() concatena una copia de cad2 en cad1, y añade al final de
cad1 un carácter nulo ('\0'). El carácter nulo de terminación, que originalmente tenía
cad1, es sustituido por el primer carácter de cad2. La cadena cad2 no se modifica en
esta operación. La función strcat() devuelve cad1.
strchr
#include <string.h>
char *strchr(char *cad,int ch);
La función strchr() devuelve un puntero a la primera ocurrencia del byte menos
significativo de ch en la cadena apuntada por cad. Si no sucede, devuelve un puntero
nulo (NULL).
strcmp
#include <string.h>
int strcmp(const char *cad1,const char *cad2);
La función strcmp() compara lexicográficamente dos cadenas que finalizan con
el carácter nulo, y devuelve un entero que se interpreta de la siguiente forma:
Valor devuelto Descripción
Menor que cero cad1 es menor que cad2
Igual a cero cad1 es igual a cad2
Mayor que cero cad1 es mayor que
cad2
Tabla A.3.2: Interpretación de los valores devueltos por la función strcmp().
strcpy
#include <string.h>
char *strcpy(char *cad1,const char *cad2);
La función strcpy() se utiliza para copiar el contenido de cad2 en cad1. El
elemento cad2 debe ser un puntero a una cadena que finalice con un carácter nulo. La
función devuelve un puntero a cad1.
strlen
#include <string.h>
unsigned int strlen(char *cad);
La función strlen() devuelve el número de caracteres de la cadena apuntada por
cad que finaliza con un carácter nulo. El carácter nulo no se contabiliza.
strtok
#include <string.h>
char *strtok(char *cad1,const char *cad2);El lenguaje de programación C
La función strtok() devuelve un puntero a la siguiente palabra de la cadena
apuntada por cad1. Los caracteres que constituyen la cadena apuntada por cad2 son los
delimitadores que identifican la palabra. Devuelve un puntero nulo (NULL) cuando no
existe ninguna palabra que devolver.
La primera vez que se llama a strtok() se utiliza realmente cad1 en la llamada.
Las llamadas posteriores utilizan un puntero nulo (NULL) como primer argumento.
La función strtok() modifica la cadena apuntada por cad1, pues, cada vez que se
encuentra una palabra, se pone un carácter nulo donde esta el delimitador. De esta
forma strtok() puede continuar avanzando por la cadena.
memchr
#include <string.h>
void *memchr(const void *buffer,int ch,size_t cuenta);
La función memchr() busca en buffer la primera ocurrencia de ch en los
primeros cuenta caracteres. La función devuelve un puntero a la primera ocurrencia del
carácter ch en buffer. Si no encuentra ch, devuelve un puntero nulo (NULL).
memcmp
#include <string.h>
int memcmp(const void *buf1,const void *buf2,size_t cuenta);
La función memcmp() compara los primeros cuenta caracteres de los arrays
apuntados por buf1 y buf2. La comparación se hace lexicográficamente. La función
devuelve un entero que es interpretado según se indica a continuación:
Valor devuelto Descripción
Menor que cero buf1 es menor que buf2
Igual a cero buf1 es igual a buf2
Mayor que cero buf1 es mayor que buf2
Tabla A.3.1: Interpretación de los valores devueltos por la función memcmp().
memcpy
#include <string.h>
void *memcpy(void *hacia,const void *desde,size_t cuenta);
La función memcpy() copia cuenta caracteres del array apuntado por desde en el
array apuntado por hacia. Si los arrays se superponen, el comportamiento de memcpy()
queda indefinido. La función devuelve un puntero a hacia.
memset
#include <string.h>
void *memset(void *buf,int ch,size_t cuenta);
La función memset() copia el byte menos significativo de ch en los primero
cuenta caracteres del array apuntado por buf. Devuelve buf. Su uso más común es
inicializar una región de memoria con algún valor conocido.
strcat
#include <string.h>
char *strcat(char *cad1,const char *cad2);El lenguaje de programación C
La función strcat() concatena una copia de cad2 en cad1, y añade al final de
cad1 un carácter nulo ('\0'). El carácter nulo de terminación, que originalmente tenía
cad1, es sustituido por el primer carácter de cad2. La cadena cad2 no se modifica en
esta operación. La función strcat() devuelve cad1.
strchr
#include <string.h>
char *strchr(char *cad,int ch);
La función strchr() devuelve un puntero a la primera ocurrencia del byte menos
significativo de ch en la cadena apuntada por cad. Si no sucede, devuelve un puntero
nulo (NULL).
strcmp
#include <string.h>
int strcmp(const char *cad1,const char *cad2);
La función strcmp() compara lexicográficamente dos cadenas que finalizan con
el carácter nulo, y devuelve un entero que se interpreta de la siguiente forma:
Valor devuelto Descripción
Menor que cero cad1 es menor que cad2
Igual a cero cad1 es igual a cad2
Mayor que cero cad1 es mayor que
cad2
Tabla A.3.2: Interpretación de los valores devueltos por la función strcmp().
strcpy
#include <string.h>
char *strcpy(char *cad1,const char *cad2);
La función strcpy() se utiliza para copiar el contenido de cad2 en cad1. El
elemento cad2 debe ser un puntero a una cadena que finalice con un carácter nulo. La
función devuelve un puntero a cad1.
strlen
#include <string.h>
unsigned int strlen(char *cad);
La función strlen() devuelve el número de caracteres de la cadena apuntada por
cad que finaliza con un carácter nulo. El carácter nulo no se contabiliza.
strtok
#include <string.h>
char *strtok(char *cad1,const char *cad2);El lenguaje de programación C
La función strtok() devuelve un puntero a la siguiente palabra de la cadena
apuntada por cad1. Los caracteres que constituyen la cadena apuntada por cad2 son los
delimitadores que identifican la palabra. Devuelve un puntero nulo (NULL) cuando no
existe ninguna palabra que devolver.
La primera vez que se llama a strtok() se utiliza realmente cad1 en la llamada.
Las llamadas posteriores utilizan un puntero nulo (NULL) como primer argumento.
La función strtok() modifica la cadena apuntada por cad1, pues, cada vez que se
encuentra una palabra, se pone un carácter nulo donde esta el delimitador. De esta
forma strtok() puede continuar avanzando por la cadena.
C++ apendice b
amor
·
bloog
·
lenguaje C++
·
masturbacion
·
programacion
A.2 -Funciones de caracteres.
isalnum
#include <ctype.h>
int isalnum(int ch);
La función isalnum() devuelve un valor distinto de cero si ch es una letra del
alfabeto o un dígito. En caso contrario, se devuelve un valor distinto de cero.
isalphaEl lenguaje de programación C
#include <ctype.h>
int isalpha(int ch);
La función isalpha() devuelve un valor distinto de cero si ch es una letra del
alfabeto, en cualquier otro caso devuelve cero.
iscntrl
#include <ctype.h>
int iscntrl(int ch);
La función iscntrl() devuelve un valor distinto de cero si ch se encuentra entre 0
y 0x1F o si ch es igual a 0x7F (tecla DEL), en cualquier otro caso devuelve cero.
isdigit
#include <ctype.h>
int isdigit(int ch);
La función isdigit() devuelve un valor distinto de cero si ch es un dígito (0..9),
en cualquier otro caso devuelve el valor cero.
isgraph
#include <ctype.h>
int isgraph(int ch);
La función isgraph() devuelve un valor distinto de cero si ch es cualquier
carácter imprimible distinto del espacio, en cualquier otro caso devuelve cero.
islower
#include <ctype.h>
int islower(int ch);
La función islower() devuelve un valor distinto de cero si ch es una carácter
minúscula, en cualquier otro caso devuelve cero.
isprint
#include <ctype.h>
int isprint(int ch);
La función isprintf() devuelve un valor distinto de cero si ch es cualquier
carácter imprimible, incluyendo el espacio, en cualquier otro caso devuelve cero.
ispunct
#include <ctype.h>El lenguaje de programación C
int ispunct(int ch);
La función ispunct() devuelve un valor distinto de cero si ch es un carácter de
puntuación, excluyendo el espacio, en cualquier otro caso devuelve el valor cero.
isspace
#include <ctype.h>
int isspace(int ch);
La función isspace() devuelve un valor distinto de cero si ch es un espacio,
tabulador, o carácter de salto de línea, en cualquier otro caso devuelve el valor cero.
isupper
#include <ctype.h>
int isupper(int ch);
La función isupper() devuelve un valor distinto de cero si ch es una letra
mayúscula, en cualquier otro caso devuelve cero.
isxdigit
#include <ctype.h>
int isxdigit(int ch);
La función isxdigit() devuelve un valor distinto de cero si ch es un dígito
hexadecimal, en cualquier otro caso devuelve cero. Un dígito hexadecimal está en uno
de estos rangos: 0 hasta 9, A hasta F y a hasta f.
tolower
#include <ctype.h>
int tolower(int ch);
La función tolower() devuelve el equivalente en minúscula de ch, si ch es una
letra mayúscula, en cualquier otro caso se devuelve ch sin modificar.
toupper
#include <ctype.h>
int toupper(int ch);
La función toupper() devuelve el equivalente en mayúsculas de ch, si ch es una
letra minúscula, en cualquier otro caso se devuelve ch sin modificar.
isalnum
#include <ctype.h>
int isalnum(int ch);
La función isalnum() devuelve un valor distinto de cero si ch es una letra del
alfabeto o un dígito. En caso contrario, se devuelve un valor distinto de cero.
isalphaEl lenguaje de programación C
#include <ctype.h>
int isalpha(int ch);
La función isalpha() devuelve un valor distinto de cero si ch es una letra del
alfabeto, en cualquier otro caso devuelve cero.
iscntrl
#include <ctype.h>
int iscntrl(int ch);
La función iscntrl() devuelve un valor distinto de cero si ch se encuentra entre 0
y 0x1F o si ch es igual a 0x7F (tecla DEL), en cualquier otro caso devuelve cero.
isdigit
#include <ctype.h>
int isdigit(int ch);
La función isdigit() devuelve un valor distinto de cero si ch es un dígito (0..9),
en cualquier otro caso devuelve el valor cero.
isgraph
#include <ctype.h>
int isgraph(int ch);
La función isgraph() devuelve un valor distinto de cero si ch es cualquier
carácter imprimible distinto del espacio, en cualquier otro caso devuelve cero.
islower
#include <ctype.h>
int islower(int ch);
La función islower() devuelve un valor distinto de cero si ch es una carácter
minúscula, en cualquier otro caso devuelve cero.
isprint
#include <ctype.h>
int isprint(int ch);
La función isprintf() devuelve un valor distinto de cero si ch es cualquier
carácter imprimible, incluyendo el espacio, en cualquier otro caso devuelve cero.
ispunct
#include <ctype.h>El lenguaje de programación C
int ispunct(int ch);
La función ispunct() devuelve un valor distinto de cero si ch es un carácter de
puntuación, excluyendo el espacio, en cualquier otro caso devuelve el valor cero.
isspace
#include <ctype.h>
int isspace(int ch);
La función isspace() devuelve un valor distinto de cero si ch es un espacio,
tabulador, o carácter de salto de línea, en cualquier otro caso devuelve el valor cero.
isupper
#include <ctype.h>
int isupper(int ch);
La función isupper() devuelve un valor distinto de cero si ch es una letra
mayúscula, en cualquier otro caso devuelve cero.
isxdigit
#include <ctype.h>
int isxdigit(int ch);
La función isxdigit() devuelve un valor distinto de cero si ch es un dígito
hexadecimal, en cualquier otro caso devuelve cero. Un dígito hexadecimal está en uno
de estos rangos: 0 hasta 9, A hasta F y a hasta f.
tolower
#include <ctype.h>
int tolower(int ch);
La función tolower() devuelve el equivalente en minúscula de ch, si ch es una
letra mayúscula, en cualquier otro caso se devuelve ch sin modificar.
toupper
#include <ctype.h>
int toupper(int ch);
La función toupper() devuelve el equivalente en mayúsculas de ch, si ch es una
letra minúscula, en cualquier otro caso se devuelve ch sin modificar.
!!Clikeaka al espacio cideral!!
THEMRFRIKI S.A. Con tecnología de Blogger.
Acerca de mí
About
POPULAR-desc:Trending now:
-
El señor Kuroki es el hombre que hizo este regalo impensable para su esposa. Esta pareja de granjeros llevaban una vida tranquila y feli...
-
Los que tenéis la paciencia de aguantarme (pero porque queréis. ¿eh? que nos conocemos xD) por el blog o por las distintas redes sociales ...
-
Se trata de una tecnología increíblemente potente, compleja y duradera. Un equipo de científicos de la Universidad de Southampton (Reino...
SEARCH
SECTIONS
- :V (1)
- !!!Acertijo divertido post numero 100!! (1)
- ¿Cómo es el ASUS Zenfone Max (1)
- ¿Como hacer una funda de celular? (1)
- ¿Como murio Karl Marx? (1)
- ¿Cómo responder en una entrevista sobre tus defectos? (1)
- ¿Como Saber si una Persona Miente? (1)
- ¿Cómo tener la conciencia tranquila? (1)
- ¿Conoces la historia de la mansión Winchester? (1)
- ¿Cuántos Bits de es un Bitcoin? (1)
- ¿Las letrasF y J del teclado tienen una raya abajo? (1)
- ¿Por qué no se pudren las hamburguesas del McDonald's con el paso del tiempo? (1)
- ¿Pueden reírse los perros? (1)
- ¿Qué controla la aparición de las canas? Los científicos tienen la respuesta (1)
- ¿Que es una cirujia? (1)
- ¿Que pasa cuando nos sonamos los dedos? (1)
- ¿Que pasa? Cuando mueres (1)
- ¿que te parece esto? (1)
- ¿Qué ves? ¿Un pato o un conejo? (1)
- ¿Quien invento la television? (1)
- ¿Te gustaria una cabaña haci? (1)
- ¿Un OVNI en la Antártida? (1)
- ¿whatsaap como se hizo y por que ? (1)
- . (1)
- 'Street Fighter V' (1)
- "El Laberinto del Fauno" en la actualidad (1)
- #Buenmartes (1)
- 1. Cuando en Facebook todo se trataba de “qué estás haciendo” conocimi (1)
- 10 chistes inteligentes (2)
- 10 cosas para prevenir el cancer (1)
- 10 cosas que creras que no son reales (1)
- 10 fotografias extrañas (1)
- 10 ideas creativas (1)
- 10 Mejores Ratones/Mouse para Gamers (1)
- 10 secretos para ser feliz (1)
- 10 trucos de whasapp que no sabias (1)
- 14 de febrero (1)
- 15 cosas extravagantes (1)
- 15 cosas que jamas pensaste conocer (1)
- 15 de febrero (1)
- 15 ideas creativas para decorar tu hogar (1)
- 15 inventos del futuro (1)
- 15 trucos para alargar la vida (1)
- 15 trucos que te ahorran tiempo (1)
- 15 y un exucasas para cuando llegas tarde (1)
- 16 inventos creativos que nunca imaginaste (1)
- 17 Ilustraciones que juegan con tu cerebro (1)
- 20 cosas que no sabias de Dragon Ball Z (1)
- 20 fotos que demuestran la humanidad (1)
- 27 Cosas Hechas Por Gente Troll (1)
- 30 FOTOS EXTRAÑAS TE EMOCIONARAS (1)
- 30 juegos Argenitos (1)
- 30 sugerencias que pueden cambiar tu vida (1)
- 35 Datos que no conocias (1)
- 4 niñas genio (1)
- 42 Fotos Que Parecen Falsas Pero Son Reales (1)
- 5 cosas que afectan tu sexualidad (1)
- 5 cosas que jamas pensarias que existen (1)
- 500 ovejas miralas (2)
- 6 Personas Fueron Usadas Para Entretener En Circos (1)
- 7 errores más comunes en la cocina (1)
- 7 formas de hacer ejercicio (1)
- 7 Maravillas del mundo (1)
- 8 cosas que se inventaron en Korea (1)
- 9 datos interesantes (1)
- 9 estereotipos de los britanicos (1)
- aburrimiento (3)
- aburrimiento. (1)
- Accidentes (1)
- ACERTIJO (2)
- acertijos (1)
- Adolescente trans es obligada a ir al baño como hombre (1)
- agua (2)
- alcoholismo (1)
- Algo asombroso en una lectora de CD (1)
- alimentos (1)
- Alimentos con radioactividad radiacion (1)
- Alimentos contra infecicones urinarias (1)
- Alimentos para cuidar tu pene (1)
- ALIMENTOS PROHIBIDOS PARA TU DIETA (1)
- Alimentos que rejuvenecen (1)
- amor (16)
- amor por su hijo (1)
- android (1)
- Animales alucinantes (1)
- Animales momias (1)
- aplicaciones. (1)
- app (1)
- argentina (1)
- arroba (1)
- Arte en todas partes (1)
- Articulos que te volveran loco (1)
- asiaticos (1)
- Asteroide pasara cerca de la Tierra el 5 de Marzo 2016. (1)
- Audi RS3 R: con 502 CV (1)
- auto (1)
- autos (1)
- Autos de coleccion (1)
- ayuda (2)
- barcelona (1)
- bateria de 48 hs (1)
- bateria larga (1)
- BENEFICIOS DE LOS CEREALES (1)
- Bicarbonato de sodio la pesadilla de la Industria Farmacéutica (1)
- bitcoin (1)
- bits (1)
- blog (2)
- blogger inglish (3)
- bloog (13)
- boca (1)
- bonbam (1)
- boring (2)
- bridges (2)
- britanicos (1)
- Bueno o malo (1)
- Bugatti Chiron (1)
- Cada familia tiene casi 11.000€ en cosas que no usa [INCREÍBLE] (1)
- cambiar la fecha a 1970 de IPhone (1)
- canciones (1)
- Cantar Cumpleaños feliz con Facebook (1)
- capitlos (1)
- Capitulos en vivo de los Simpsons (1)
- Casados con hijos (1)
- catastrofes (1)
- celular (1)
- cerebro (1)
- cerveza (1)
- chaleco (1)
- chica playboy (1)
- Chica playboy que posa con ropa (1)
- chicas hermosas (1)
- Chicas hermosas Parte 1 (1)
- Chicas hermosas Parte 2 (1)
- Chicas hermosas Parte 3 (1)
- Chicas hermosas Parte 4 (1)
- Chicas hermosas Parte 5 (1)
- CHICAS QUE TE VOLARAN LA CABEZA *O* (1)
- chicos que sin dudas nunca ganaron a las escondidas (1)
- chinos (1)
- ciencia (1)
- Cientificos descubren que es necesario contarle a todos que eres vegetariano (1)
- cine (2)
- cine. (1)
- CIUDAD FANTASMA (1)
- Combinar colores (1)
- Comer sano y rico consejos (1)
- Como aprender un idioma (1)
- como cambiar (1)
- Como cuidar y tener un pene en forma (1)
- COMO CURAR LAS CARIES (POST 400) (1)
- como derrotar el miedo (1)
- Como finalizar una relacion (1)
- Como hacer un arma de papel (DIVIERTETE) (1)
- como perder el miedo (1)
- como poner arroba (1)
- Como prevenir el cancer de mama (1)
- Como rastrear un celular (1)
- como reaccion (2)
- Como reciclar (1)
- Como saber si es infiel (1)
- Como ser Gamer (1)
- como superar el miedo (1)
- Cómo Tener la Conciencia Tranquila (1)
- comprar cueros (1)
- comprar cueros en mendoza (1)
- computadoras (4)
- conciencia (1)
- Conoce a los dobles de los superhéroes (1)
- Consejos utiles para ser feliz (1)
- cordoba (1)
- CORTES QUE JAMAS DEBES HACERTE (1)
- cosas curiosas (1)
- cosas extrañas (2)
- Cosas impresionantes (1)
- cosas locas (1)
- Cosas para arepentirse (1)
- Cosas que debes saber (1)
- Cosas que no debes hacer en Tor (1)
- COSAS QUE NO SABIAS DE POKEMON (1)
- cosas raras (5)
- Crea figuras en Ms Dos (1)
- Crees que te observan (1)
- Crencias que te hacen sentir infeliz (1)
- cronicas (1)
- cuanto cuesta (1)
- cuanto pagan los blogs (3)
- cuanto te debe medir el pene para ser normal (1)
- cubbic (1)
- cuentan (1)
- cueros (1)
- culona (1)
- culonas (1)
- curiosas (1)
- daltonico (1)
- Datos curiosos de Albert Einstein (1)
- DATOS CURIOSOS DEL MUNDO (1)
- datos interesantes (1)
- De Lamborghini Aventador a un ¡Batimóvil! (1)
- De extraterreste a humana (1)
- Deborah Ann Woll (2)
- Deborah Ann Woll Parte 1 (1)
- Deborah Ann Woll Parte 2 (1)
- delgados. (1)
- depc (1)
- desaparece (1)
- Descubierto en Israel singular sello egipcio (1)
- DESORDEN MENTAL (1)
- Dia de san valentn (1)
- diego (1)
- Digitalizan un libro que estaba prohibido abrirlo (1)
- dinero facil (1)
- Dioramas que parecen reales (1)
- disco de almacenamiento en 5D con vida casi eterna (1)
- diseño (1)
- doctor house (1)
- dolor (1)
- doncellas (1)
- drones (1)
- earl (2)
- ecenas (1)
- Edward Mordake (1)
- einsten (1)
- El lugar más fantasmal del mundo (1)
- El 26 de marzo no habrá internet (1)
- El acertijo que todos mal responden (1)
- El azúcar bajo la lupa (1)
- El azúcar provoca los mismos efectos que la cocaína (1)
- el golpe. (1)
- El hombre de hielo (1)
- El increible caso de un hombre enamorado (1)
- El juguete más vendido de la historia (1)
- El largo máximo es de 13 cm y me refiero hay abajo (1)
- el mejor blog del mundo (3)
- el mejor blog del mundo. (10)
- El mito de cambiar la fecha a 1970 (1)
- El momento justo (1)
- El monstruo (1)
- El nuevo pokemon imperdible (1)
- El Próximo Assassin's Creed (1)
- El satélite Sentinel-3A (1)
- El ser humano despues de millones de años (evolucion) (1)
- el smartphone con bateria de 48hs? (1)
- El smartphone más barato del mundo (1)
- El tamaño de los dedos de la mano dice de tu personalidad (1)
- El tren soviético que estaba impulsado por turborreactores en 1970 (1)
- emoticon (1)
- Empeza tu día con Pechonalidad (1)
- En Chicago (1)
- En Noruega (1)
- enamorarse (2)
- Encuentran un escondite secreto en su casa y descubren que había alguien viviendo allí (1)
- Encuentran un fallo importante y facebook recompensa con nada (1)
- Enorme dinosaurio en la antartida (1)
- enterrados (1)
- Eres daltónico? entra y descubrelo! (1)
- escalofriante (1)
- ESPIA (1)
- Esta es la mujer de cuerpo perfecto (1)
- Estamos hechos de nada (1)
- esterilidad (2)
- esterotipos (1)
- Estrategias de manipulacion (1)
- Estremecedor: se cansó de que su hermana modelo (1)
- europa (1)
- evolucion (1)
- Evolucion de la tierra (1)
- Evolución de los procesadores intel (1)
- explicacion (1)
- Extraña historia de terror (1)
- Extraños esqueletos (1)
- facebok zonas rurales (1)
- facebook (4)
- facebook criticas (1)
- facebook criticas. (1)
- facebook fake (1)
- facebook falso (1)
- facebook.facebook.com (1)
- Fauna abisal (1)
- Felino anfitrión en un lujoso hotel de Nueva York (1)
- fisica (1)
- Fisico de dia venir a Marte (1)
- Ford Fiesta ST200 (1)
- Forma de ver el universo (1)
- fortaleza (1)
- fotografías que prueban que una barba lo cambia TODO (1)
- Fotos antiguas de famosos (1)
- Fotos de astronautas (1)
- Fotos de Holanda (1)
- Fotos falsas 9 (1)
- francisco (1)
- Frases budista (1)
- frases de san valentin (1)
- Frases en ingles (1)
- Frases para dedicarte a ti mismo (1)
- Frases para un dia gris (1)
- frikis (1)
- FRITAR (1)
- Fue Margot Robbie la mujer mas hermosa de los Oscars? (1)
- Funcionamiento de un Servidor Web (1)
- Fusion de los pokemon (1)
- futruro (1)
- futurista (1)
- futuro (1)
- gammer (2)
- ganzo (1)
- GATO (1)
- gatos (1)
- gente loca (1)
- gente poco cuerda (1)
- get money (1)
- gibraltar (1)
- Google lanzó un buscador para niños (1)
- gps (1)
- grabado en piedra (1)
- Grandes ideas filosoficas de Karl Mark (1)
- Grandes tatuajes (1)
- gratis (2)
- guerra (1)
- Guerra nuclear (1)
- guerras (1)
- guia completa (2)
- guia para ser pro gamer (1)
- Haci viven en Iran (1)
- HECHOS CIENTIFICOS FALSOS (1)
- historia del dia de san valentin (1)
- historia increible (2)
- historias (1)
- Hobbit Hobbit Hobbit Hobbit Hobbit Hobbit Hobbit (1)
- hombre de dos cabezas (1)
- Homunculo=Hombre prequeño (1)
- hospital (1)
- html (1)
- humanos (1)
- humor (1)
- Humor de Viernes (1)
- icono mexicano. (1)
- Ideas de regalos para San Valentin (2)
- Ideas que son estúpidas y geniales (1)
- Iluciones opticas (1)
- imagenes (1)
- imagenes para tu fondo de pantalla (1)
- Imágenes que enfurecerán (1)
- Imágenes y sus breves historias (1)
- imperdible (1)
- impresora 3d (1)
- info (2)
- inglish (1)
- Insomnio (post 200) (1)
- inventar (1)
- IPone (1)
- Ira a un asteroide a traer muestras a la Tierra (1)
- islas (1)
- Islas no tan secretas ;) (1)
- Japón prueba el láser más potente del tercer planeta (1)
- Jennifer Lawrence (1)
- juegos (2)
- Katherine McNamara (1)
- KINKONG (EXISTIO) (1)
- La modelo Jennifer GonzalezLa modelo Jennifer Gonzalez (1)
- La deep web y sus secretos (1)
- La familia y el amor (1)
- La gran carrera académica de Max weber (1)
- la gran verdad de facebook. (2)
- La guerra en los Balcanes (1940-1941) (1)
- La mejor sitcom Argentina? (1)
- La mujer mas hermosa del mundo (mi opinion) (1)
- La rutina (1)
- La torre en la luna (1)
- La verdad de superman (1)
- La vida en 100 años (1)
- Las ciudades fantasma (misterio) (1)
- las cosas muy raras (1)
- Las cosas que afectan a nuestras decisiones (1)
- Las fotos de la serie "Friends" detras de camara (1)
- Las grandes siempre nos mienten y nos dan reciclados (1)
- Las locuras del mar (1)
- Las profesiones que más "enamoran" (1)
- lectura rapida (1)
- lecturas raras (1)
- lenguaje C (2)
- lenguaje C++ (12)
- lenguajes de programacion (6)
- Leyenda del fin del mundo (1)
- libretos (1)
- libros (2)
- lideres mundiales (1)
- Lo mas perfecionista que hayas visto 28 fotos (1)
- Lo que no te cuentan ni Quilmes ni Heineken. (1)
- lo que nunca nos dijieron (1)
- locura (1)
- locuras (1)
- londres (2)
- Los animes de tu infancia (ENTRATE) (1)
- Los elefantes comen solo hierva (1)
- Los enemigos más poderosos de Hulk (1)
- Los extraños animales X (1)
- Los lugares mas peligrosos del mundo (1)
- Los mas nuevo para este 2016 (video juegos) (1)
- Los mejores editores de fotos (1)
- Los mejores juegos de todos los tiempos (1)
- Los mejores superheroes de ahora (1)
- Los opuestos se atraen (1)
- los que tienen gatos entenderán (1)
- Los tatuajes que todos se hicieron (1)
- Macho Alfa (1)
- Magearna (1)
- Magníficas chimeneas que cualquiera quisiera tener (1)
- manipular (2)
- manipular. (1)
- mantener (1)
- mantenimiento. (1)
- maravillas del mundo (1)
- Mark Zuckerberg anunció que Facebook permitirá retransmitir videos en directo (1)
- masturbacion (12)
- masturbacion. (1)
- Max Weber breve biografia (1)
- mejores pelis (1)
- Melanie Pavola (Imagenes) (1)
- mendoza (1)
- mentira (1)
- mexico (1)
- Mia khalifa (1)
- Michelle Lewin (1)
- Microsoft lanza Lumia 650 (1)
- Miedo de las mujeres (2)
- Minions para colorear (1)
- Mira que hermosas mujeres (POST 300) (1)
- Mira que lindas chicas (1)
- misterios (1)
- modelo (1)
- modelosLa chica Playboy que habria conquistado a Cristano Ronaldo (1)
- Monos inteligentes (1)
- Moto reloj (1)
- mrfriki (1)
- muerte (1)
- mujeres hermosas (2)
- Mujeres no juegan Videojuegos (1)
- mundo (1)
- mundo game (1)
- musuclacion (1)
- nacimiento de Miguel Ramos Arizpe (1)
- neandertales (1)
- Need for speed saldra para computadoras (1)
- Newell's (1)
- newells (1)
- niños con cancer (1)
- No podes instalar APK (1)
- normal (1)
- noticas (1)
- noticias (3)
- nuevo (1)
- Nutricion con Calabacin (1)
- nuvos diseños (1)
- objetos cotidianos (1)
- objetos radiactivos (1)
- Ondas gravitacionales (1)
- Ondas gravitacionales en tu cel (1)
- online (1)
- operadores (1)
- organos (1)
- Orinas sentado últimamente (1)
- ovnis (1)
- pack (1)
- pacman (1)
- paises (1)
- paises del mundo (1)
- PAPAS CON QUESO (1)
- PAPAS FRITAS (1)
- para (1)
- Paradojas extrañas (1)
- pareja (1)
- partido (1)
- Payasos de las pelis mas tenebrosas (1)
- Paystation 4 traera de regreso a crash bandicoot (1)
- pc (1)
- peliculas (2)
- pelo propio (1)
- PELUQUERIA (1)
- pene (2)
- pene normal (1)
- pene promedio (1)
- Perder peso sin siquiera intentarlo (1)
- pero ¿nadie se dio cuenta? (1)
- perra (1)
- Perro espia (IMPERDIBLE) (1)
- perros (2)
- personajes historicos a la realidad (1)
- Personaliza tu android con un tono para cada aplicacion (1)
- personalizar (1)
- Personas bañadas en miel (1)
- Perturbador edificio (1)
- php (3)
- PHP frente a otros lenguajes (1)
- phyton (1)
- pie grande (1)
- PITBULL ATACA (1)
- Placer visual Parte 1 (1)
- Placer visual Parte 2 (1)
- Placer visual Parte 3 (1)
- playboy (3)
- poemas de san valentin (1)
- POKEMON (1)
- Poné a prueba tu atención: intentá encontrar la letra T (1)
- Por que sentimos vibrar el telefono (1)
- portadas (1)
- post (1)
- preguntas (2)
- Preguntas y respuestas (1)
- prehistoria (1)
- Presona productiva vs persona ocupada (1)
- Profesores que saben trollear (1)
- programacion (17)
- psicologia. (1)
- publicidad (1)
- publicidad engañosa (1)
- PUBLICIDAD ENGAÑOZA !!!RIETE!!! (1)
- Qué animal eres de acuerdo a tu fecha de nacimiento (1)
- que es un bitcoin (1)
- que no pagan (1)
- Que pasara con el mundo en 100 años (1)
- Que saber del nuevo libro de Harry Potter (1)
- que se festeja (1)
- Que te alcanza con un dolar en el mundo (1)
- Quienes son mejor los perros o los gatos (1)
- quilmes (1)
- Racismo en Disney (1)
- raras (1)
- Raza distinta de Hobbit (1)
- Razas de extraterrestres (1)
- ready (2)
- reco (1)
- redes sociales (2)
- Reflexion de un dia gris (1)
- Reflexion de la vida (1)
- Reflexion sobre la felicidad (1)
- reflexiones (3)
- relfexion de amigos y conocidos (1)
- reloj (1)
- reloj atomico (1)
- Rene Descartez (1)
- retrocedieron los precios de soja y trigo (1)
- revista (1)
- revistas (1)
- reyes (1)
- rico (1)
- Robots "mueren" al entrar en Fukushima (1)
- rock. (1)
- rubik (1)
- rumana loca (1)
- Salud de tu pene (1)
- san valentin (1)
- se ponen serios frente al latente colapso sueco (1)
- Se pueden clonar los dinosaurios (1)
- secretos (2)
- Secretos de la Nutella (1)
- Secretos de las aerolineas (1)
- Secretos de los videojuegos (1)
- seguidores (1)
- según la ciencia (1)
- Seguro te gustan estos baños (1)
- sexo (1)
- Si te gustan las rellenitas (1)
- Si tenes Tatuajes Podes tener Uveitis! (1)
- Simbolos graciosos para tu Facebook (1)
- Slenderman historia (1)
- smartphone (1)
- soldados (1)
- Sony dibujos (1)
- Sorprenderte a ti mismo y a tus ami (1)
- sorpresa (1)
- stream (1)
- Sueños eroticos (1)
- sumerios (1)
- tareas (1)
- Tecnicas de manipulaicon (1)
- tecnologia (5)
- tecnologia. (1)
- Temas para empezar el viernes (1)
- Tenes una PC vieja (RENOVALA) (1)
- Teorias conspiradoras (1)
- Terremoto de japon (1)
- terror (1)
- tetas (1)
- the mr friki (3)
- The Walking Dead' (1)
- themrfriki (1)
- Titulos de libros (1)
- todo el mes de febrero: (1)
- top five (1)
- TOP FIVE ! cosas que no sabes! (1)
- trampas (1)
- transformaciones (1)
- Trastornos de la personalidad (1)
- tributos (1)
- Trolleo para facebook (1)
- Trucos para levantar el animo (1)
- tu (1)
- turismo (1)
- twiter (2)
- Twitter actualizará las líneas de tiempo incorporadas a la web (1)
- ultimas noticias (6)
- Un asteroide el 5/3/2016 (1)
- Un efecto visual alucinante (1)
- Un meteoro impactó a la Tierra (1)
- Un nuevo planeta (1)
- Una hermosa emo (1)
- Una solucion contra el hambre (1)
- Vacaciones en Chile (1)
- Vegeta y Bulma extraño y incierto misteri (1)
- VENEZOLANA ULTRA SABROSA!!!!!!! (1)
- victorian (2)
- Videos para reparar celulares (1)
- Vikingos y sus secretos (1)
- Violencia (1)
- vista (1)
- Vitamina B12 (1)
- Wallpaper full Hd (1)
- yei (1)
- yetis (1)
- zonas herogenas (2)
LATEST
3-latest-65px
BTemplates.com
Popular Posts
-
El señor Kuroki es el hombre que hizo este regalo impensable para su esposa. Esta pareja de granjeros llevaban una vida tranquila y feli...
-
Los que tenéis la paciencia de aguantarme (pero porque queréis. ¿eh? que nos conocemos xD) por el blog o por las distintas redes sociales ...
-
Se trata de una tecnología increíblemente potente, compleja y duradera. Un equipo de científicos de la Universidad de Southampton (Reino...
-
El hallazgo, en la gruta de Gorham, situada en un acantilado frente al Mediterráneo, pone a los neandertales más cerca del hombre moderno. ...
-
asera Muy hot y mojada su concha ! DISFRUTE DE UNA BUENA JALADA DE GANZO CON ESTA RICA CASERA.
-
Carolina londoño es una chica muy famosa en instagram , también muy bella nació el 7 de Septiembre de 1990 y actualmente tiene 25 a...
-
Google ofrecerá este formato a anunciantes, que solo funcionará cuando se vean videos de YouTube en dispositivos móviles Según ComScor...