Beruflich Dokumente
Kultur Dokumente
}
int string_length(char *pointer)
{
int c = 0;
while( *(pointer + c) != '\0' )
c++;
return c;
}
Solucin II (Recursividad de Cola)
#include <stdio.h>
#include <string.h>
void reverse(char*, int, int);
int main()
{
char a[100];
gets(a);
reverse(a, 0, strlen(a)-1);
printf("%s\n",a);
return 0;
}
void reverse(char *x, int begin, int end)
{
char c;
if (begin >= end)
return;
c
= x[begin];
x[begin] = x[end];
x[end]
= c;
reverse(x, ++begin, --end);
}
Solucin III (Recursividad de Cola)
#include <stdio.h>
#include <string.h>
void reverse(char*, int, int);
int main()
{
char a[100];
gets(a);
reverse(a, 0, strlen(a)-1);
printf("%s\n",a);
return 0;
}
void aux_reverse(char *x, int begin, int end)
{
char c;
if (end-begin <=0)
return;
else
c
= x[begin];
x[begin] = x[end];
x[end]
= c;
aux_reverse(x, ++begin, --end);
}
void reverse(char *x, int begin, int end)
{
if (begin >= end)
return;
else
aux_reverse(x, begin, end);
}
#include <stdio.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
int checkear(char [], int);
int main()
{
char p[15];
int SINO;
printf("Introduzca una p para checkear si es palindrome\n");
scanf("%s", p);
SINO=checkear(p, 0);
if (SINO==TRUE)
printf("La palabra es palindrome\n");
else
printf("La palabra no es palindrome\n");
return 0;
}
int checkear(char p[], int indice)
{
int len = strlen(p) - (indice + 1);
if (p[indice] == p[len])
{
if (indice + 1 == len || indice == len)
{
return TRUE;
}
checkear(p, indice + 1);
}
else
{
return FALSE;
}
}
4) Escriba una funcin iterativa y otra recursiva que convierta un nmero decimal a
binario.
#include<stdio.h>
long toBinario1(int);
long toBinario2(int);
int main(){
long BinarioNo;
int decimalNo;
printf("Introduzca un numero decimal: ");
scanf("%d",&decimalNo);
BinarioNo = toBinario1(decimalNo);
printf("\nIterativo =>>>El valor binario es: %ld",BinarioNo);
BinarioNo = toBinario2(decimalNo);
printf("\nRecursividad Directa ==>> El valor Binario: %ld",BinarioNo);
return 0;
}
//************* Metodo Iterativo *************************
long toBinario1(int decimalNo){
int d[20];
int i,j;
5) Escriba una funcin iterativa y otra recursiva en C que multiplique dos matrices
(a*b), donde a es de tamao (n*m) y b es de tamao (o*p).
#include<stdio.h>
#define MAX 10
void multiplicarMatrices1(int [MAX][MAX],int [MAX][MAX]);
void multiplicarMatrices2(int [MAX][MAX],int [MAX][MAX]);
int m,n,o,p;
int c[MAX][MAX];
int main(){
int a[MAX][MAX],b[MAX][MAX],i,j,k;
printf("Introduzca No. de Filas y Columnas de la Primera Matriz: ");
scanf("%d %d",&m,&n);
printf("Introduzca No. de Filas y Columnas de la Segunda Matriz: ");
scanf("%d %d",&o,&p);
if(n!=o){
printf("La multiplicacion de matrices es imposible");
printf("\nEl no. de columnas de la primera matriz debe ser el mismo no. de filas de la
segunda matriz");
}
else{
printf("Introduzca la primera matriz: ");
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
printf("Introduzca la segunda matriz: ");
for(i=0;i<o;i++)
for(j=0;j<p;j++)
scanf("%d",&b[i][j]);
printf("\nLa primera matriz es : \n");
for(i=0;i<m;i++){
printf("\n");
for(j=0;j<n;j++){
printf("%d\t",a[i][j]);
}
}
printf("\nLa segunda matriz es : \n");
for(i=0;i<o;i++){
printf("\n");
for(j=0;j<p;j++){
printf("%d\t",b[i][j]);
}
}
multiplicarMatrices1(a,b);
printf("\nMetodo Iterativo====>La multiplicacion de las dos matrices son: \n");
for(i=0;i<m;i++){
printf("\n");
for(j=0;j<p;j++){
printf("%d\t",c[i][j]);
}
}
multiplicarMatrices2(a,b);
printf("\nRecursividad Directa ====>La multiplicacion de las dos matrices son: \n");
for(i=0;i<m;i++){
printf("\n");
for(j=0;j<p;j++){
printf("%d\t",c[i][j]);
}
}
}
return 0;
}
// ******************** Metodo Iterativo *********************************
void multiplicarMatrices1(int a[MAX][MAX],int b[MAX][MAX]){
int sum,i=0,j=0,k=0;
while(i<m){ //row of first matrix
j=0;
while(j<p){ //column of second matrix
k=0;
sum=0;
while(k<n){
sum=sum+a[i][k]*b[k][j];
k++;
}
c[i][j]=sum;
j++;
}
i++;
}
}
//********************** Recursividad en Cola *****************************
void multiplicarMatrices2(int a[MAX][MAX],int b[MAX][MAX]){
static int sum,i=0,j=0,k=0;
if(i<m){ //row of first matrix
if(j<p){ //column of second matrix
if(k<n){
sum=sum+a[i][k]*b[k][j];
k++;
multiplicarMatrices2(a,b);
}
c[i][j]=sum;
sum=0;
k=0;
j++;
multiplicarMatrices2(a,b);
}
j=0;
i++;
multiplicarMatrices2(a,b);
}
}
6) Escriba una funcin recursiva para calcular el Mximo Comn Divisor (MCD) de
dos nmeros n1 y n2, utilizando la siguiente definicin :
MCD(n1, n2)=n2
si (n2<=n1 && n1 % n2==0)
MCD(n1, n2)= MCD(n2, n1) si (n1<n2)
MCD(n1, n2)= MCD(n2, n1%n2) en otros casos.
#include<stdio.h>
int MCD1(int x,int y);
int MCD2(int x,int y);
int main(){
int n1,n2,mcd;
printf("\nIntroduzca dos numeros: ");
scanf("%d %d",&n1,&n2);
mcd=MCD1(n1,n2);
printf("\nIterativo ==>>El MCD de %d y %d es: %d",n1,n2,mcd);
mcd=MCD2(n1,n2);
printf("\nRecursividad Directa==>>El MCD de %d y %d es: %d",n1,n2,mcd);
return 0;
}
//********** Metodo iterativo *********************
int MCD1(int x,int y){
int aux;
while (y>x || (x%y)!=0) {
if (x<y)
{
aux=y; y=x; x=aux;
}
else
{
aux=x; x=y; y=aux%y;
}
}
return y;
}
//************* Recursividad en Cola ****************
int MCD2(int x,int y){
if (y<x && x%y==0)
return y;
else if (x<y)
return (y, x);
else
return (y, x%y);
}
if ( l % 2 != 0)
Multriplicador = -1;
else
Multriplicador = 1;
Numero += (Matriz[l][0]*CalcularDeterminante(Buffer,MAX-1)*Multriplicador);
}
return Numero;
}
}
void MostrarMatriz(int Matriz[][DIM],unsigned int MAX)
{
int j,i;
for (j = 0; j < MAX; j++)
{
printf("\n( ");
for (i = 0; i < MAX; i++)
printf("%d",Matriz[i][j]);
printf(") ");
}
}
void Leer_matriz(int a[][DIM],unsigned int MAX)
{
int i,j;
for (j = 0; j < MAX; j++)
for (i = 0; i < MAX; i++)
{
printf("Introduce el numero para la posicion (%d,%d) :",i,j);
scanf("%d",&a[j][i]);
}
}
8) Se define el punto de ensilladura de una matriz de tamao mxn como la posicin i,j
que contiene al mnimo valor de la fila i que corresponde al mximo valor de la
columna j. Por ejemplo, si la matriz es la siguiente (mxn=3x2):
1 5
14 9
8 6
La misma posee un punto de ensilladura en la posicin 2,2 (mnimo valor de la fila 2
que corresponde al mximo valor de la columna 2). Escriba una funcin en C que
escriba los valores de i y de j del punto de ensilladura de una matriz dada en el caso de
existir. En caso contrario debe devolver los valores -1,-1.
L,
E,
E,
E,
E,
E,
L,
E,
L,
E,
L,
E,
L,
L,
L,
L,
L,
L,
L,
L,
E,
L,
E,
E,
E,
L,
L,
E,
E,
L,
E,
E,
E,
E,
L,
L,
E,
L,
L,
L,
L,
E,
L,
L,
L,
L,
E,
L,
E,
E,
E,
L,
L,
E,
E,
E,
E,
E,
E,
E,
L,
E,
L,
E,
L,
L,
E,
L,
L,
L,
L,
L,
E,
E,
E,
L,
L,
L,
L,
E,
E,
E,
E,
E,
L,
L,
L,
L,
L,
E,
L,
L,
L,
L,
L,
L,
E,
E,
E,
E,
L,
E,
E,
L,
L,
E,
E,
E,
L,
E,
L,
L,
L,
L,
L,
E,
L,
L,
E,
L,
L,
L,
E,
E,
E,
E,
L,
E,
E,
L,
L,
E,
E,
L,
E,
E,
E,
L,
E,
L,
E,
L,
L,
L,
E,
E,
E,
E,
L,
E,
L,
L,
L,
E,
L,
L,
L,
E,
L,
L,
L,
L,
E,
E,
E,
E,
E,
L,
L,
L,
E,
E,
E,
E,
E,
E,
L,
L,
L,
E,
E,
L,
L
L
L
L
L
L
L
L
L
L
L
E
L
},
},
},
},
},
},
},
},
},
},
},
},
}
Adems debe recibir una posicin (i,j) que refleja la posicin inicial dentro de la
matriz. El programa debe indicar si el laberinto, representado por la matriz, tiene
salida. La idea es hacer un programa que simule el recorrido dentro del laberinto a
travs de los caminos libres.
#include <stdio.h>
/* Constantes que definen la dimension del laberinto */
#define FILAS 13
#define COLUMNAS 21
/* Caracteres que se almacenan en las posiciones del laberinto:
/*
ASCII 219 es un cuadro relleno que se usa para las paredes
/*
' ' es un espacio en blanco, para los caminos libres
/*
'*' es la marca que senala las posiciones visitadas (camino).
/* El caracter ASCII 219 podria no visualizarse en Linux.
#define L 219
#define E ' '
#define MARCA '*'
/* Constantes logicas para valor de retorno de funciones */
#define V 1
#define F 0
*/
*/
*/
*/
*/
=
L,
E,
E,
E,
E,
E,
L,
E,
L,
E,
L,
E,
L,
L,
L,
L,
L,
L,
L,
L,
E,
L,
E,
E,
E,
L,
L,
E,
E,
L,
E,
E,
E,
E,
L,
L,
E,
L,
L,
L,
L,
E,
L,
L,
L,
L,
E,
L,
E,
E,
E,
L,
L,
E,
E,
E,
E,
E,
E,
E,
L,
E,
L,
E,
L,
L,
E,
L,
L,
L,
L,
L,
E,
E,
E,
L,
L,
L,
L,
E,
E,
E,
E,
E,
L,
L,
L,
L,
L,
E,
L,
L,
L,
L,
L,
L,
E,
E,
E,
E,
L,
E,
E,
L,
L,
E,
E,
E,
L,
E,
L,
L,
L,
L,
L,
E,
L,
L,
E,
L,
L,
L,
E,
E,
E,
E,
L,
E,
E,
L,
L,
E,
E,
L,
E,
E,
E,
L,
E,
L,
E,
L,
L,
L,
E,
E,
E,
E,
L,
E,
L,
L,
L,
E,
L,
L,
L,
E,
L,
L,
L,
L,
E,
E,
E,
E,
E,
L,
L,
L,
E,
E,
E,
E,
E,
E,
L,
L,
L,
E,
E,
L,
L
L
L
L
L
L
L
L
L
L
L
E
L
},
},
},
},
},
},
},
},
},
},
},
},
}
int resultado = V;
/* Intento a la izquierda */
/* Intento a la derecha */
/* Intento hacia arriba */
/* Intento hacia abajo */
*/
desplegar();
/* Despliega el laberinto sin resolver */
system("pause");
do{
printf("\nDame la fila de tu posicion inicial :"); scanf("%d",&xe);
printf("\nDame la columna de tu posicion inicial :"); scanf("%d",&ye);
if (lab[xe][ye] == L)
{
printf("En esta posicion hay un ladrillo, intenta de nuevo");
ok=F;
}
else ok=V;
}
while (ok==F);
/* Resuelve el laberinto desde la entrada: (xe,ye) */
ok = recorrer(xe,ye);
if (ok==F)
/* Si no se pudo resolver se envia un mensaje */
printf("\nLaberinto sin solucion\n");
desplegar();
system("pause");
}