PROBLEMAS RESUELTOS DE LA PRACTICAS
TOMADAS LA SEMANA PASADA
/* programa para mostrar la suma acumulada de
los multiplos de M y N a partir del numero 100
hasta un numero dado por el programador */
#include<stdio.h>
main()
{
/* determinar el numero mayor */
int m,n,final,i;
int acum_m,acum_n;
int total;
acum_m =0;
acum_n =0;
printf("Ingrese los valores de M y N separados por un espacio\n:");
scanf("%d %d",&m,&n);
printf("Ingrese el numero final \n:");
scanf("%d",&final);
for(i=100;i<=final;i++)
{
if(i%m==0) acum_m += i;
if(i%n==0) acum_n += i;
}
total = acum_m + acum_n;
printf("La respuesta es %d \n:",total);
return 0;
}
/* ingresar 10 resultados
de partidos entre 2 equipos ** 1 y 2 **
el programa debera:
- publicar cual equipo gano mas veces
- publicar la cantidad de goles del eq que mas gano
- cuantas veces perdio el eq 2
*/
#include <stdio.h>
main()
{
int goles1,goles2,uno,dos,acugol1,acugol2,perdio2,i;
uno=0; dos=0; acugol1=0; acugol2=0; perdio2=0;
printf("Ingreso de SCORES\n");
printf("-----------------\n");
for(i=1;i<=10;i++)
{
scanf("%d %d",&goles1,&goles2);
acugol1 += goles1;
acugol2 += goles2;
if (goles1>goles2)
{
uno++;
perdio2++;
}
if (goles2>goles1) dos++;
if (goles2==goles1)
{
acugol1 += goles1;
acugol2 += goles2;
}
}
if (uno>dos) {
printf("EQ UNO gano mas veces \n");
printf("Hizo %d goles \n",acugol1);
}
if (dos>uno) {
printf("EQ DOS gano mas veces \n");
printf("Hizo %d goles \n",acugol2);
}
if (dos==uno) printf("Igualaron en partidos\n");
printf("\n El EQ DOS perdio %d veces \n",perdio2);
return 0;
}
/* Determinar cual es la persona mayor de un grupo de
5 personas, por cada persona se ingresa
dd Dia
mm mes
aa año de nacimiento
suponga que todos los meses son de 30 dias y
el año es de 360 dias
*/
#include<stdio.h>
main()
{
int dd,mm,aa;
int hdd,hmm,haa;
int i,mayor;
float maxedad;
float t1,t2,edad;
maxedad = 0;
printf("Ingrese la fecha de hoy [dd mm aaaa]\n:");
scanf("%d %d %d",&hdd,&hmm,&haa);
// tiempo transcurrido hasta hoy
t1= (haa-1)*360 +(hmm-1)*30 + hdd;
printf("Ahora ingresar EDADES:\n");
printf("----------------------\n");
for(i=1;i<=5;i++)
{
printf(" %d.- Ingrese [dd mm aaaa]\n:",i);
scanf("%d %d %d",&dd,&mm,&aa);
//tiempo transcurrido hasta la fecha de nacimiento
t2= (aa-1)*360 +(mm-1)*30 + dd;
// edad
edad=(t1-t2)/360.0;
if (edad > maxedad)
{
maxedad = edad;
mayor=i;
}
}
printf("la persona ingresada en la posicion %d es la mayor\n",mayor);
printf("Su edad es: %f \n",maxedad);
return 0;
}
/* Uso de Getche() para determinar
cuantas veces se repite una vocal
se termina el ingreso cuando se presiona x
*/
#include <stdio.h>
#include <conio.h>
main()
{
int parar,a,e,i,o,u;
char ch;
parar = 0;
a = 0;
e = 0;
i = 0;
o = 0;
u = 0;
printf("Ingresar caracteres hasta presionar x : \n");
while(parar == 0) {
ch = getche();
if (ch == 'a') a++;
if (ch == 'e') e++;
if (ch == 'i') i++;
if (ch == 'o') o++;
if (ch == 'u') u++;
if (ch == 'x') parar=1;
}
printf("\n Conteo de vocales \n");
printf("\n la vocal a se repitio %d veces \n",a);
printf("\n la vocal e se repitio %d veces \n",e);
printf("\n la vocal i se repitio %d veces \n",i);
printf("\n la vocal o se repitio %d veces \n",o);
printf("\n la vocal u se repitio %d veces \n",u);
return 0;
}
/* Uso de Getche() para tamaño de tres palabras
se termina el ingreso cuando se presiona ENTER
*/
/* PROGRAMA PARA DETERMINAR EL TAMAÑO DE TRES PALABRAS
Tenga en cuenta que cada palabra se separa por un espacion en blanco
*/
#include <stdio.h>
#include <conio.h>
main()
{
int parar,palabra,c;
char ch;
parar = 0;
palabra = 1;
c = 0;
printf("Ingresar caracteres hasta presionar ENTER : \n");
while(parar == 0 && palabra <=3) {
ch = getche();
if (ch == 13) parar=1;
else
if(ch!=' ') // ch no es espacio en blanco
c++;
else
{
palabra++;
printf("Tamaño de palabra %d \n",c);
c=0;
}
}
if(ch == 13) printf("Tamaño de palabra %d \n",c);
return 0;
}
/* Uso de Getche() para determinar
cuantas veces se repite una vocal
se termina el ingreso cuando se presiona x
*/
/* factorial para pares menores o iguales a 10 */
#include <stdio.h>
main()
{
float factorial;
int i,f;
printf("Ingresar un numero: \n");
scanf("%d",&f);
factorial = 1;
if ((f%2==0) && (f<11)) {
for(i=1;i<=f;i++) factorial = factorial * i;
printf("\n El factorial de %d es %f \n",f,factorial);
}
return 0;
}
/* Uso de Getche() generalizado
se termina el ingreso cuando se presiona "." punto
*/
#include <stdio.h>
#include <conio.h>
main()
{
int parar,palabra,v,c;
char ch;
parar = 0;
palabra = 0;
v = 0; c = 0;
printf("Ingresar caracteres hasta presionar PUNTO : \n");
while(parar == 0) {
ch = getche();
if (ch == '.') parar=1;
else
if(ch!=' ') {
palabra++;
switch(ch){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
v++;
break;
default:
c++;
break;
}
}
else
{
printf("Tamaño de palabra %d \n",palabra);
palabra = 0;
}
}
printf("Tamaño de palabra %d \n",palabra);
printf("consonantes %d \n",c);
return 0;
}
PARA LOS ALUMNOS QUE AUN NO CAPTAN
PROBLEMAS DE ESTRUCTURAS REPETITIVAS
Veamos los siguientes casos sencillos
Haga un seguimiento de las variables paso a paso
/*
Como acumular en una estructura repetitiva
NOTAR COMO LOS VALORES INGRESADOS EN "a" SE VAN ACUMULANDO EN S
- Las vueltas son 5
*/
#include<stdio.h>
main()
{
int i,a,s;
s=0; // ojo debe inicializar la variable s en 0 para poder acumular
for(i=0;i<5;i++)
{
printf("%d\n",i);
scanf("%d",&a);
s = s + a; //acumular
}
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}
// LO MISMO DEL ANTERIOR PERO USANDO WHILE
// ESTA VEZ LOS ACUMULADOS SE HACEN INGRESANDO VALORES EN i
// PERO TENGA EN CUENTA QUE EL BUCLE DARA VUELTAS HASTA QUE
// SE ingrese en i un valor de cero
- Las vueltas son indeterminadas
#include<stdio.h>
main()
{
int i,s;
s=0;
i=1;
while(i!=0) // mientras i distinto de 0
{
scanf("%d",&i);
s = s + i; //acumular
}
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}
// aqui solo se acumulan los pares
// para determinar si i es múltiplo de 2
// note que el residuo de dividir por dos osea "i%2" debe ser 0 (cero)
#include<stdio.h>
main()
{
int i,s;
s=0;
i=1;
while(i!=0) // mientras i distinto de 0
{
scanf("%d",&i);
if(i%2 == 0) s=s+i; //acumular solo los pares
}
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}
// acumula solo los impares
// note como se usa laestructura "do while" (POST-TEST)
// eso significa que EL BUCLE SE EJECUTA UNA VEZ POR LO MENOS
// MIENTRAS QUE EN "WHILE" O "FOR" es posible que el bucle
// no se ejecute ni una sola vez
#include<stdio.h>
main()
{
int i,s;
s=0;
i=1230;
do
{
scanf("%d",&i);
if(i%2 != 0) s=s+i; //acumular solo los impares
} while(i!=0);
printf("%d\n",s); //mostrar el acumulado al final
return 0;
}