Punt: Suma elementos vector con aritmetica de punteros

sumavector aritm punteros.html
#include <stdio.h>

int llenarvector(int n, int array[]);
void sumarelementos(int n, int array[]);

int main(){
	
	int vector[100], *p_vector;
	int i, num;
	
	printf("Ingrese cantidad de elementos del vector: ");
	scanf("%d",&num);
	fflush(stdin);
	
	p_vector = &vector[0];
	
	llenarvector(num, p_vector);
	sumarelementos(num, p_vector);
	
	system("pause");
	return 0;
}

int llenarvector(int n, int array[]){
	int i;
	for(i=0; i<n; i++){
		printf("Ingrese numero %d: ",i+1);
		scanf("%d",&array[i]);
	}
	printf("El vector ingresado es: \n");
	for(i=0; i<n; i++){
		printf("%d ",array[i]);
	}
	printf("\n");
}

void sumarelementos(int n, int array[]){
	int i, suma=0;
	for(i=0; i<n; i++){
		suma = suma + array[i];
	}
	printf("La suma de los elementos del array es %d \n",suma);
	
}

Vec y Mat: Vectores con pares y otro con impares

41 vector pares impares.html
#include <stdio.h>

int main(){
	int vector[50], par[50], impar[50], i, num;
	
	printf("De cuantos elementos quiere el vector: ");
	scanf("%d",&num);
	fflush(stdin);
	
	for(i=0; i<num; i++){
		printf("Numero %d: ",i);
		scanf("%d",&vector[i]);
		fflush(stdin);
	}
	printf("\nPares: ");
	for(i=0; i<num; i++){
		if(vector[i]%2==0){
			par[i] = vector[i];
			printf("%d ",par[i]);					
		}				
	}

	printf("\nImpares: ");
	for(i=0; i<num; i++){
		if(vector[i]%2!=0){
			impar[i] = vector[i];
			printf("%d ",impar[i]);
		}
	}	
	
	system("pause");
	return 0;
	
}

WHILE: Contar caracteres en un array

42 contar caracteres.html
#include <stdio.h>

int main(){
	
	char palabra[30];
	int i=0;
	
	printf("Escriba una palabra: ");
	gets(palabra);
	
	while(palabra[i] !='\0'){
		i++;
	}
	
	printf("La palabra tiene %d caracteres \n", i);
	printf("La palabra al reves es: ");
	while(i>=0){
		printf("%c",palabra[i--]);
	}
	printf("\n");
	system("pause");
	return 0;
}

String: Palíndromo

43 palindromo.html
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(){
	
	char palabra[30];
	int i, b, palindromo=1;
	
	printf("Escriba una palabra: ");
	gets(palabra);
	b = strlen(palabra)-1; // recorrer desde el final
	
	for(i=0; i<(strlen(palabra)/2); i++, b--){
		if(palabra[i] != palabra[b]){
			palindromo = 0;
		}
	}
	
	if(palindromo == 0){
		printf("La frase %s no es palindromo\n",palabra);
	}
	else{
		printf("La frase %s es palindromo\n",palabra);
	}
	
	system("pause");
	return 0;
}

Funciones: Desglose billetes

47 desglose billetes.html
#include <stdio.h>

void contar(int cantidad, int valor[]);

int main(){
	int valor[9] = {500, 200, 100, 50, 20, 10, 5, 2, 1};
	int cantidad;
	
	printf("Ingresa la cantidad de euros: ");
	scanf("%d", &cantidad);
	fflush(stdin);
	
	contar(cantidad,valor);	
	
	
	system("pause");
	return 0;
}

void contar(int cantidad, int valor[]){
	int i=0, n;
	
	while(cantidad>0){
		n = cantidad/valor[i];
		cantidad = cantidad%valor[i];
		if(n>0){
			printf("%d billetes/monedas de %d euros.\n",n,valor[i]);
		}
	i++;
	}
	
}

String: Sustituir asterisco

46 sustituir asterisco.html
#include <stdio.h>
#include <string.h>

int main(){
	char cadena[50], subcadena[50], sustituir = '*';
	int i = 0, j = 0, largocadena, largosubcadena;
	
	printf("Escribe una frase: \n");
	gets(cadena);
	printf("Escribe la coincidencia que buscas: \n");
	gets(subcadena);
	
	largocadena = strlen(cadena);
	largosubcadena = strlen(subcadena);
	
	for(i=0; i<largocadena; i++){
		if(cadena[i] == subcadena[0]){
			for(j=1; j<largosubcadena; j++){
				if(cadena[i+j] == subcadena[j]){
					if(j == largosubcadena-1) cadena[i] = sustituir;
				}
			}
		}
	}
	printf("\n%s \n%s \n",subcadena, cadena);
	
	system("pause");
	return 0;
}

Fich: Libros, actgrup

actGrupalficheros.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stFichaLibro //registro libro
{
	char sTitulo[200];
	char sAutor[100];
	char sEditorial[50];
	int iAnoEdicion;
	int sIsbn;
	int iNumeroPag;
};

/*Prototipos de las funciones que desarrollaremos*/
int Leer_fichero();
int Anadir_libro();
int Modificar_libro();
int Baja_libro();

void main()
{	
	int iOpcion=0;		
	do{
		fflush(stdin);
		system("cls");
		
	
		printf("\n\n\t\t-- EJERCICIO FICHEROS: --\n\n"); //menu
		printf("\t\t1. Leer fichero biblioteca\n");
		printf("\t\t2. A\244adir libro a la biblioteca\n");
		printf("\t\t3. Modificar libro de la biblioteca\n");
		printf("\t\t4. Dar de baja libro de la biblioteca\n");
		printf("\t\t5. Salir\n");
		scanf("%d", &iOpcion);
	
		switch(iOpcion){
			case 1: Leer_fichero();break;
			case 2: Anadir_libro();break;
			case 3: Modificar_libro();break;
			case 4: Baja_libro();break;
			case 5: printf("Saliendo del programa...");break;
			default: printf("Opci\242n no v\240lida"); getch();break;
		} 		
	}while (iOpcion!=5);	
}
int Leer_fichero(){
	int contador = 1;	
	FILE *fichero;
	struct stFichaLibro libro1;
	fflush(stdin);
	system("cls");
	printf("\n\n\t Opci\242n 1: LEER FICHERO \n\n");
	
	/* Abrir el fichero "biblioteca.dat" en modo lectura*/
	fichero = fopen("biblioteca.dat", "r");
	
	if (fichero == NULL) {
		printf("Error: No se ha podido crear el fichero biblioteca.dat");
	} else {
		// Leer la primera estructura libro del fichero
		fread(&libro1, sizeof(libro1), 1, fichero);
		/* Utilizar un bucle repetitivo WHILE mediante el cual mientras no
		se llega al final del fichero se va imprimiendo por pantalla cada uno de los registros */
		while (!feof(fichero)) {
			
			printf("\t Libro %d", contador);
			printf("\n\t=========");
			printf("\n\tT\241tulo: %s", libro1.sTitulo);
			printf("\n\tAutor: %s", libro1.sAutor);
			printf("\n\tEditorial: %s", libro1.sEditorial);
			printf("\n\tA\244o edici\242n: %d", libro1.iAnoEdicion);
			printf("\n\tISBN: %d", libro1.sIsbn);
			printf("\n\tN\243mero de p\240ginas: %d", libro1.iNumeroPag);
		
			fread(&libro1, sizeof(libro1), 1, fichero);
			printf("\n\n");
			//Incrementamos el contador de libros almacenados en el fichero
			contador++;
		}
		/* Cerrar el fichero "bibliteca.dat". */
		fclose(fichero);
	}
	getch();
	return 0;
}
int Anadir_libro( ) {
	
	/* Declarar la variable fichero y la estructura libro*/
	FILE *fichero;
	struct stFichaLibro libro1;

	//Abrimos el fichero "biblioteca.dat" en modo añadir. 
	fichero = fopen("biblioteca.dat", "a");

	fflush(stdin);
	system("cls");
	printf("\n\n\tOpci\242n 2: A\245ADIR REGISTRO");

	if (fichero == NULL) {
		printf("Error: No se ha podido crear el fichero biblioteca.dat");
	} 
	else {			
			/* Pedimos al usuario los datos del libro*/		
			fflush (stdin);
			printf("\n\n\tT\241tulo: ");
			scanf("%s", libro1.sTitulo);
			
			printf("\n\tAutor: ");
			scanf("%s", libro1.sAutor);
			
			printf("\n\tEditorial: ");
			scanf("%s", libro1.sEditorial);
			
			printf("\n\tA\244o edici\242n: ");
			scanf("%d", &libro1.iAnoEdicion);
			
			printf("\n\tISBN: ");
			scanf("%d", &libro1.sIsbn);
			
			printf("\n\tN\243mero de p\240ginas: ");
			scanf("%d", &libro1.iNumeroPag);
			
			//Añadimos el registro al fichero
			fwrite(&libro1, sizeof(libro1), 1, fichero);
			
		/* Cerramos "empleados.dat". */
		fclose(fichero);
		printf("\n\n\tRegistro a\244adido correctamente");
	}
	getch();
	return 0;		
}

int Modificar_libro(){
	
	/* Declaramos las variables fichero y fichero auxiliar*/
	FILE *fichero;
	FILE *ficheroAux;

	struct stFichaLibro libro1;
	int sISBN=0;
	int iEncontrado=0;
	
	//Abrir el fichero "biblioteca.dat" en modo añadir. 
	fichero = fopen("biblioteca.dat", "r");

	//Abrir el fichero "bibliotecaAux.dat" en modo añadir. 
	ficheroAux = fopen("bibliotecaAux.dat", "a");

	fflush(stdin);
	system("cls");
	fflush(stdin);
	printf("\n\n\tOpci\242n 3: MODIFICAR REGISTRO");

	printf("\n\n\n\tIndique el ISBN del libro a modificar: ");
	scanf("%d",&sISBN);

	fflush(stdin);
	if (fichero == NULL) {
		printf("Error: No existe el fichero biblioteca.dat");
	} 
	else {		
		fread(&libro1, sizeof(libro1), 1, fichero);
  /*bucle WHLE lo que hacemos es ir trasvasando todos los registros a un fichero auxiliar 
  hasta encontrar el que tiene el ISBN que ha indicado el usuario. 
  En dicho punto, se añade el nuevo fichero indicado por el usuario y se sigue trasvasando 
  la información hasta que se alcance el final del fichero*/
		while (!feof(fichero)) {						
			if(libro1.sIsbn == sISBN)
			{
				/* Pedimos al usuario los nuevos datos del libro.*/		
				printf("\n\n\tT\241tulo: ");
				scanf("%s", libro1.sTitulo);
				
				printf("\n\tAutor: ");
				scanf("%s", libro1.sAutor);
				
				printf("\n\tEditorial: ");
				scanf("%s", libro1.sEditorial);
				
				printf("\n\tA\244o edici\242n: ");
				scanf("%d", &libro1.iAnoEdicion);
				
				printf("\n\tISBN: ");
				scanf("%d", &libro1.sIsbn);
				
				printf("\n\tN\243mero de p\240ginas: ");
				scanf("%d", &libro1.iNumeroPag);
				
				printf("\n\tLibro modificado correctamente"); 
				fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
				iEncontrado=1;
			}
			else{
				fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
			}
			fread(&libro1, sizeof(libro1), 1, fichero);
		}
	}
	//Cerrar ficheros
	fclose(fichero);
	fclose(ficheroAux);
	if(iEncontrado==0)
	{
/*En caso de no haber encontrado ningún libro coincidente con el ISBN 
se muestra un mensaje al usuario y seelimina el fichero auxiliar ya que se tendrá
 exactamente el mismo contenido que en el fichero normal*/
		printf("No se ha encontrado ning\243n libro con el ISBN indicado.");
		remove("bibliotecaAux.dat");
	}
	else{
/*En el caso de haber encontrado coincidencia, eliminaremos el fichero actual Biblioteca 
se renombra el auxiliar de BibliotecaAux a Biblioteca ya que contendrá el total de registros 
con los datos ya modificados */
		remove("biblioteca.dat");
		rename("bibliotecaAux.dat", "biblioteca.dat");
	}
	getch();
	return 0;
}

int Baja_libro(){
	
	/* Declarar las variables fichero y fichero auxiliar*/
	FILE *fichero;
	FILE *ficheroAux;

	struct stFichaLibro libro1;
	int sISBN=0;
	int iEncontrado=0;
	
	//Abrir el fichero "biblioteca.dat" en modo añadir. 
	fichero = fopen("biblioteca.dat", "r");

	//Abrir el fichero "biblioteca.dat" en modo añadir. 
	ficheroAux = fopen("bibliotecaAux.dat", "a");

	fflush(stdin);
	system("cls");
	fflush(stdin);
	printf("\n\n\tOpci\242n 3: BAJA DE REGISTRO");

	printf("\n\n\n\tIndique el ISBN del libro a dar de baja: ");
	scanf("%d",&sISBN);

	fflush(stdin);
	if (fichero == NULL) {
		printf("Error: No existe el fichero biblioteca.dat");
	} 
	else {		
		fread(&libro1, sizeof(libro1), 1, fichero);
        /*Con este bucle WHLE se trasvasan todos los registros a un fichero auxiliar
		hasta encontrar el que tiene el ISBN que ha indicado el usuario. Se obvia el registro a dar de baha 
		y se sigue trasvasando la información hasta que se alcance el final del fichero*/
		while (!feof(fichero)) {						
			if(libro1.sIsbn == sISBN)
			{
		
				printf("\n\tLibro dado de baja correctamente"); 
				iEncontrado=1;
			}
			else{
				fwrite(&libro1, sizeof(libro1), 1, ficheroAux);
			}
			fread(&libro1, sizeof(libro1), 1, fichero);
		}
	}
	//Cerramos ambos ficheros
	fclose(fichero);
	fclose(ficheroAux);
	if(iEncontrado==0)
	{
/*En caso de no haber encontrado ningún libro coincidente con el ISBN 
se muestra un mensaje al usuario y eliminaremos el fichero auxiliar 
*/
		printf("No se ha encontrado ning\243n libro con el ISBN indicado.");
		remove("bibliotecaAux.dat");
	}
	else{
/*En el caso de haber encontrado coincidencia, eliminar el fichero actual Biblioteca y 
renombrar
el auxiliar de BibliotecaAux a Biblioteca ya que contendrá el total de registros con los datos ya modificados 
*/
		remove("biblioteca.dat");
		rename("bibliotecaAux.dat", "biblioteca.dat");
	}
	getch();
	return 0;
}



Recursión: Matriz traspuesta

TraspuestaRec.html
	#include <stdio.h>

int traspuesta(int m[3][3], int i, int j, int f, int c);

void main(){
		
int mat[3][3]={3,6,2,3,2,3,7,5,3};
int i, j, f,c,s;
i=0;
j=0;
s=0;
f=3;
c=3;

s=traspuesta(mat,0,0,3,3);
}

int traspuesta(int m[3][3], int i, int j, int f, int c){
if (i<f && j<c){  // estamos dentro de la fila i y vamos traspuestando columnas j=j+1 hasta j==c
   if (j==0) printf("%d",m[j][i]); 
    if (j==1) printf("%d",m[j][i]);
      if (j==2) printf("%d\n",m[j][i]);
   traspuesta(m, i, j+1, f, c);
}
else if (i<f && j==c){  // j==c -->hemos llegado al final de una fila --> fila+1 y reseteamos j=0
   traspuesta(m, i+1, 0, f, c);
}
else if (i==f && j==0) { // hemos traspuestado todas las filas y columnas i==f
  	  return;
}
}


Recursión: Suma recursiva de matriz

sumaRecMatriz.html
#include <stdio.h>

int suma(int m[3][3], int i, int j, int f, int c, int s);

void main(){
		
int mat[3][3]={3,3,3,3,4,3,3,3,3};
int i, j, f,c,s;
i=0;
j=0;
s=0;
f=3;
c=3;

s=suma(mat,0,0,3,3,0);
printf("suma=%d:",s);
}

int suma(int m[3][3], int i, int j, int f, int c, int s){
if (i<f && j<c){  // estamos dentro de la fila i y vamos sumando columnas j=j+1 hasta j==c
   suma(m, i, j+1, f, c, s+m[i][j]);
}
else if (i<f && j==c){  // j==c -->hemos llegado al final de una fila --> fila+1 y reseteamos j=0
   suma(m, i+1, 0, f, c, s);
}
else if (i==f && j==0) { // hemos sumado todas las filas y columnas i==f
  	  return s;
}
}