Post de la categoria: Code


Recursividad: Sumatoria Recursiva de un array en C

Posted on Miércoles, mayo 5th, 2010 at 13:07

Para hacer una función recursiva en c. solo tenemos que llamarla dentro de si misma. Hay que tener en cuenta que aparte de la llamada a si misma tiene que en algún momento cortar la recursividad para no generar un loop.

En este caso la condición de salida es que cuando el numero de elementos llega a 0. Se deja de llamar a la función y se devuelve 0. En este momento, se hacen todas las sumas de los elementos y se le entrega a la variable “sumatoria” del main, el resultado de la suma.

En el siguiente código de ejemplo, se carga un vector con n elementos enteros y calcular la suma de sus elementos en forma recursiva

#include <stdio.h>
#include <conio.h>
#include <string.h>
 
// CONSTANTES
#define TAM_ARR_MAX 20
 
int main(int argc, char **argv)
{
	//DECLARACION DE  VARIABLES
	int VEC1[TAM_ARR_MAX], VEC2[TAM_ARR_MAX];
	int tam_1;
	int sumatoria;
 
	printf("#### 1 #####\n");
	tam_1 = ask_tam(); //Le pregunta al usuario que tamaño tendra el vector.
	arr_cargar(VEC1,tam_1); //El usuario Carga el vector.
	arr_mostrar(VEC1,tam_1); //Se muestra el vector Cargado
    sumatoria = rec_arr_sumatoria(VEC1,tam_1); // SUMATORIA DEL VECTOR EN FORMA RECURSIVA
	printf("\nLa sumatoria de los %d elementos del array es: %d",tam_1,sumatoria);
	printf("\n\n****************************\n");
 
    //Cierro main.
	//getch();
	return 0;
}	
 
 
 
/************************************/
/*            FUNCIONES             */
/************************************/
 
 
int ask_tam(){
	int n;
	printf("\nIngrese el tamanio que tendra el array (menor que %d):",TAM_ARR_MAX);
	do{
		scanf("%d",&n);
	}while(n<1);
	return n;
}
 
void arr_mostrar(int X[TAM_ARR_MAX], int n){
	int i;
	printf("\n");
	for(i=0;i<n;i++){
		printf("[%d]:%d",i,X[i]);
		if(i<n)
			printf("; ");
	}
	printf("\n");
}
void arr_cargar(int X[TAM_ARR_MAX], int n){
	int i;
	for(i=0;i<n;i++){
		printf("\nIngrese [%d]:",i);
		scanf("%d",&X[i]);
	}
}
int rec_arr_sumatoria(int X[], int i){
	if(i==0)
		return 0;
	else	
		return rec_arr_sumatoria(X,i-1)+X[i-1];
}

Manejo de Caracteres en C

Posted on Sábado, abril 3rd, 2010 at 11:29

TP2 para UP. Estructuras de datos y Algoritmos
Dejo ejemplificado el manejo de caracteres en C. Con un Trabajo Practico que tube que entregar en la facultad. Con los siguientes puntos:

1. Leer un texto carácter por carácter terminando en EOF. Contar cuántas veces aparecen dos letras iguales. Mostrarlas intercalándoles el signo “=”.
Ejemplo: “sooolo see que no see naaddaaa.”
En 8 oportunidades hay dos letras iguales juntas. “so=o=olo se=e que no se=e na=ad=da=a=a”

2. Ingrese un texto carácter a carácter terminado en EOF contar cuantas palabras tienen más de una vez repetida la primer letra de la primer palabra.
Ejemplo:
AYER ESTABA FEO PERO ANA FUE IGUALMENTE AL ALMACEN.
La cantidad de palabras que tienen más de una A es 3.

3. Leer un texto carácter por carácter terminando en EOF. Contar palabras de 5 letras que terminan en “ia”. Al final de cada una de esas palabras, insertar el número “5”.
Ejemplo: “María sabia que no le salía” => ”Maria5 sabia5 que no le salia5”
La cantidad de palabras terminadas en ia son: 3

Uso de putchar(); y getchar();

Todavía hay más por leer »

Manejo de Matrices en C

Posted on Viernes, abril 2nd, 2010 at 19:45

TP1 para UP.
Les dejo ejemplificado con estos ejercicios el manejo de matrices en C..

Cargar una matriz de 5 filas y 5 columnas y calcular y mostrar:
1. la matriz transpuesta
2. El promedio de los elementos de las dos diagonales (principal y secundaria)
3. Multiplicar la matriz por su transpuesta.
4. Determinar cuantos números primos hay en la matriz.

Funciones en el código:
- Cargar matriz cuadrada
- Mostrar matriz cuadrada
- Calcular matriz transpuesta
- Multiplicar matrices
- Sacar el promedio de las diagonales
- Contar la cantidad de primos en la matriz

Todavía hay más por leer »

Validar si es RUT valido (Chile) con isRut() en PHP y Javascript

Posted on Jueves, marzo 4th, 2010 at 12:48

Validar RUT:
Trabajando en un proyecto para chile, me surgio la necesidad de validar el formato del RUT chileno, (Que seria como el DNI de Argentina). Tanto en el Backend del php como en el formulario de carga del RUT para avisarle al usuario al tiempo que escribe como es el formato correspondiente.
Como un extra, aparte de las funciones les dejo un link a un generador de RUTs validos:

Aca les dejo las funciones para validar el RUT en php y javascript, del siguiente formato XXYYYZZZ-K
Todavía hay más por leer »

nl2p alternativa a nl2br en PHP

Posted on Jueves, marzo 4th, 2010 at 12:33

Que pasa si en lugar de que los saltos de linea sean un simple br necesitas que salte un poco mas?
bueno para no tener que hacer algun extraño movimiento con css y agrandar el alto de un br. Les comparto esta funcion que tiene un funcionamiento identico a nl2br()

/**
 * Returns string with newline formatting converted into HTML paragraphs.
 *
 * @author Michael Tomasello <miketomasello@gmail.com>
 * @copyright Copyright (c) 2007, Michael Tomasello
 * @license http://www.opensource.org/licenses/bsd-license.html BSD License
 * 
 * @param string $string String to be formatted.
 * @param boolean $line_breaks When true, single-line line-breaks will be converted to HTML break tags. 
               //Jinglero: Cuando sea true, los saltos de lineas seran simples saltos de lineas, si es false, el salto de linea se convertira en parrafo. 
 * @param boolean $xml When true, an XML self-closing tag will be applied to break tags (<br />).
 * @return string
 */
function nl2p($string, $line_breaks = true, $xml = true)
{
    // Remove existing HTML formatting to avoid double-wrapping things
    $string = str_replace(array('<p>', '</p>', '<br>', '<br />'), '', $string);
 
    // It is conceivable that people might still want single line-breaks
    // without breaking into a new paragraph.
    if ($line_breaks == true)
        return '<p>'.preg_replace(array("/([\n]{2,})/i", "/([^>])\n([^<])/i"), array("</p>\n<p>", '<br'.($xml == true ? ' /' : '').'>'), trim($string)).'</p>';
    else 
        return '<p>'.preg_replace("/([\n]{1,})/i", "</p>\n<p>", trim($string)).'</p>';
}

Espero que les sirva, Salutes!

Nombre del dia de la semana en php

Posted on Jueves, marzo 4th, 2010 at 12:27

Si necesitas saber que dia de la semana es una fecha en particular, lo unico que necesitas es pasarle a nameDia() año, mes y dia.

function nameDia($ano,$mes,$dia)
{
	$nameDias[] = 'Domingo';
	$nameDias[] = 'Lunes';
	$nameDias[] = 'Martes';
	$nameDias[] = 'Miercoles';
	$nameDias[] = 'Jueves';
	$nameDias[] = 'Viernes';
	$nameDias[] = 'Sabado';
	// 0->domingo	 | 6->sabado
	$dia= date("w",mktime(0, 0, 0, $mes, $dia, $ano));
	return $nameDias[$dia];
}

Saludos

Calcular los días que tiene un mes con PHP

Posted on Jueves, marzo 4th, 2010 at 12:24

Si necesitas contar los dias que tiene un mes, y no cuentas con el paquete Calendar y la funcion cal_days_in_month() Entonces esto sera muy util.

 /*
 * daysInMonth($month, $year)
 * Devuelve la cantidad de dias que tiene un mes en un año determinado.
 *
 * $month: numero de mes (integers 1-12)
 * $year: numero de año (any integer) ('aaaa')
 *
 * Prec: $month y $year deben ser integer.
 * Post: none
 */
  function daysInMonth($month, $year)
  {
  // Calculo la cantidad de dias en el mes
  return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31);
  }

Espero que le sirva, Saludos.

Crear un archivo txt con php

Posted on Jueves, marzo 4th, 2010 at 12:14

Si necesitas crear un archivo txt este es el codigo que necesitaras

$archivo= "fichero.txt"; // el nombre de tu archivo
$contenido= "Este es mi texto, el cual voy a guardar en un documento."; // Recibez el formulario
$fch= fopen($archivo, "w"); // Abres el archivo para escribir en él
fwrite($fch, $contenido); // Grabas
fclose($fch); // Cierras el archivo.

Útil para armar logs de errores o reportes del php

Salutes

Sumar dias a una fecha con dateAdd en PHP

Posted on Jueves, noviembre 26th, 2009 at 18:14

Ultima funcion del dia dedicada al tratamiento de fechas nuevamente.
Esta vez son dos funciones, que difieren unicamente por un signo, + o -.
Hay veces que vamos a necesitar sumar dias a una fecha. y otras veces restar dias a una fecha. Para esto les dejo dateAdd() y dateSub().

/*
* En ambos casos $fecha tiene que tener
* el mismo formato que se muestra en la funcion date (d-m-Y).
*/
function dateAdd($fecha,$dias){
     return date("d-m-Y", strtotime($fecha." +".$dias." day"));
}
 
function dateSub($fecha,$dias){
     return date("d-m-Y", strtotime($fecha." -".$dias." day"));
}

Si en lugar de restar dias, se necesitara restar meses o años, hay que cambiar el day por month o year.

Espero que sea de utilidad.
Salutes

Fecha y MySQL, dateToMySql() y dateToNormal()

Posted on Jueves, noviembre 26th, 2009 at 16:45

Seguimos con el tratamiento de fecha y PHP, esta vez para normalizar el trabajo de las fechas entre el Frontend y la base de datos. Las fechas a MySQL se las pasamos Año-Mes-Día, y en el Frontend por lo general lo mostramos Día-Mes-Año.

//Combierte fecha de MySql(Año-Mes-Dia) a Normal (Dia-Mes-Año)
function dateToNormal($fecha){ 
    ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $f); 
    //Si se quiere con barras ('/'), cambiar lo guiones por '/'.
    $return=$f[3]."-".$f[2]."-".$f[1];
    return $return; 
}
 
//Convierte fecha de Normal (Dia-Mes-Año) a MySql (Año-Mes-Dia)  
function dateToMysql($fecha){ 
    ereg( "([0-9]{1,2})-([0-9]{1,2})-([0-9]{2,4})", $fecha, $f); 
    $return = $f[3]."-".$f[2]."-".$f[1]; 
    return $return;
}

Saludos