Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - kayron8

#1
Programación C/C++ / [DUDA] Punteros
24 Marzo 2014, 12:25 PM
Hola buenos días,

Llevo todo el fin de semana dándole vueltas a un ejercicio de punteros que no hay forma humana de que me funcione correctamente, el caso es que en el tema de punteros ando un poco pez, por lo que me debería de poner las pilas.

El ejercicio en cuestión, dice lo siguiente: Dada una frase, se contará el numero de as, es, is, os y us que tiene. La cantidad de cada vocal se almacenará en un vector de 5 enteros. Se
mostrará una estadística de vocales.

La manipulación de la frase y del vector se hará con punteros.
La declaración de variables será así:
(···)
char frase[256], *pf=frase;
int vocales[5];
int * pv;
pv = &vocales[0];
(···)

Ahora bien, os comento que haciendo el ejercicio sin punteros, me funciona perfectamente, dejo el código para que sirva de ejemplo:


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

//Prototipo
void cuentavocales(char v[]);

int main()
{
 char frase[256];
 cuentavocales(frase);
 
 system("PAUSE");
 return 0;
}

//Función que cuenta les vocales de la frase
void cuentavocales(char frase[])
{
    int i=0,vocales[5]={0};
   
    printf("Introduce una frase: \n");
    gets(frase);
    for(i=0;i<strlen(frase);i++)
{
          if(frase[i]=='a'|| frase[i]=='A') vocales[0]++;
          else if(frase[i]=='e' || frase[i]=='E') vocales[1]++;
          else if(frase[i]=='i' || frase[i]=='I') vocales[2]++;
          else if(frase[i]=='o' || frase[i]=='O') vocales[3]++;
          else if(frase[i]=='u' || frase[i]=='U') vocales[4]++;
   }
//Mostramos los resultados por pantalla
printf("Estadística \n");
printf("as: %d \n",vocales[0]);    
printf("es: %d \n",vocales[1]);
printf("is: %d \n",vocales[2]);
printf("os: %d \n",vocales[3]);    
printf("us: %d \n",vocales[4]);
printf("\n TOTAL: %d\n",vocales[0]+vocales[1]+vocales[2]+vocales[3]+vocales[4]);
}


Ahora bien, pasamos al apartado de los punteros... No se si lo que he hecho está bien o es una barbaridad...


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

//Prototipo
void cuentavocales(char v[5]);

int main()
{
 char frase[256],*pf=frase;
 cuentavocales(frase);
 
 system("PAUSE");
 return 0;
}

//Función que cuenta las vocales de la frase
void cuentavocales(char frase[5])
{
    int i=0,vocales[5]={0};
    int * pv;
    pv = &vocales[0];
   
    printf("Introduce una frase: \n");
    gets(frase);
    for(i=0;i<strlen(frase);i++)
{
  if(frase[i]=='a'|| frase[i]=='A') {
  pv++;
  }
         
  else if(frase[i]=='e' || frase[i]=='E') {
  pv=pv+1;
  pv++;
  }
         
  else if(frase[i]=='i' || frase[i]=='I') {
  pv=pv+2;
  pv++;
  }
 
  else if(frase[i]=='o' || frase[i]=='O') {
  pv=pv+3;
  pv++;
  }
         
  else if(frase[i]=='u' || frase[i]=='U'){
  pv=pv+4;
  pv++;
  }
   }

//Mostramos los resultados por pantalla
printf("Estadística \n");
printf("as: %d \n",*pv);    
printf("es: %d \n",*(pv+1));
printf("is: %d \n",*(pv+2));
printf("os: %d \n",*(pv+3));  
printf("us: %d \n",*(pv+4));
printf("\n TOTAL: %d\n",*pv+*(pv+1)+*(pv+2)+*(pv+3)+*(pv+4));
}


Compilar, compila pero da unos resultados que no son nada correctos xD

Espero que me podáis echar un cable.

Un saludo :D
#2
Programación C/C++ / [DUDA] Matrices
13 Marzo 2014, 11:11 AM
Hola buenos días, tengo un ejercicio que hacer en dos partes, una usando if/switch y otra sin ellos, es decir, usando una matriz de chars.

El ejercicio dice tal que así (segunda parte):
Haz un programa que muestre el nombre del día de la semana a partir de su código numérico ( 1=lunes, 2=martes....7=domingo), pero sin usar ningún if/switch!

De buenas a primeras, se que habría que hacer algo tal que así:

char frases[4][15] = {
"Primera frase",
"Segunda frase",
"Hola mundo",
"Y para acabar"
};


¿Pero luego cómo hago para que el usuario escoja un numero y se muestre el día de la semana que corresponde?

Usando un switch sería la mar de fácil:

#include <stdio.h>
#include <stdlib.h>

int main() {
int dia;

printf("¿Que numero de la semana quieres? \n");
scanf("%d",&dia);

switch(dia) {
case 1 :
printf("lunes \n");
break;
case 2 :
printf("martes \n");
break;
case 3 :
printf("miércoles \n");
break;
case 4 :
printf("jueves \n");
break;
case 5 :
printf("viernes \n");
break;
case 6 :
printf("sábado \n");
break;
case 7 :
printf("domingo \n");
break;
default :
printf("No existe \n");
}
system("PAUSE");
return 0;
}


Espero que me podáis echar un cable.

Un saludo :D
#3
Programación C/C++ / Necesito ayuda urgente
11 Junio 2013, 10:14 AM
Tengo este ejercicio y no se por donde cojerlo, tengo muy poco hecho, espero que me puedan ayudar:

Ejercicio:

STRUCTS:
1. Dados los siguientes registros:
struct departament{
char nom[30];
char capd[20];
int codi;
};

struct empleat{
char nom[30];
struct departament dept;
float sou;
int codi;
};

Escribe les funciones y el programa principal que servirán para introducir valores a cada campo de los registros y mostrar todos los campos.
Hacer un programa que permita hacer un mantenimiento de los datos de una empresa del estilo struct empleat empresa[MAXT]; Las operaciones serán las típicas de: dar de alta un empleado, dar de baja, listar, modificar los datos, consultar per código.

Lo que llevo hecho:


#include <stdio.h>
#include <stdlib.h>

struct departament{
char nom[30];
char capd[20];
int codi;
};

struct empleat{
char nom[30];
struct departament;
float sou;
int codi;
};dept;

Departament omplir();
void mostrar(Departament dep);
int menu();

departament d;
empleat e;

int res=0,num=0,codi=0,codi_mostra,num_baixa=0;

do{
res=menu();

switch(res){
        case 1:
             codi=alta_client(&c);
             break;
        case 2:
             num=valida_codi(codi);
             break;
        case 3:
             codi_mostra=mostra_client(c);
             break;
        case 4:
             num_baixa=baixa_client(&c);
             
             break;
        case 5:
             
             break;
        case 6:
             
             return 0;
             break;      
        }


 }while(res != 6);
 system("PAUSE");
 return 0;
}


Departament omplir(){
       Departament d;
       printf("Introdueix el nom del departament");
       scanf("%d",&d.nom);
       fflush(stdin);
       printf("Introdueix el cap del departament");
       gets(d.capd);
       fflush(stdin);
       printf("Introdueix el codi");
       scanf("%lf",&d.codi);
       fflush(stdin);
       return d;
       }

int menu(){
   int num;
   do{
   printf("1-Donar d'alta\n2-Donar de baixa\n3-Llistar\n4-Modificar dades\n5-Consultar per codi");
   scanf("%d",&num);
   }while(num<0 || num>5);
   return num;
   
   }


Muchas gracias por la ayuda :)
#4
Programación C/C++ / Me tiene loco
7 Abril 2013, 12:31 PM
Muy buenos días a todos y a todas, por si no tuviera suficiente con las funciones, ya entramos de lleno al paso por referencia y la recursividad :(

Tengo el siguiente ejercicio que creo que lo tengo casi hecho pero de tal caos que tengo en mi mente no sé cómo continuar...

El ejercicio dice lo siguiente:
4.- Realizar un programa que pida dos números enteros por teclado y muestre por
pantalla el siguiente menú:
+ --> SUMAR      
- --> RESTAR
* --> MULTIPLICAR
/ --> DIVIDIR
^ --> POTENCIA
! --> FACTORIAL
s --> SALIR

El usuario deberá elegir introducir dos valores y a continuación elegir una opción
(pulsando el carácter correspondiente), el programa deberá mostrar el resultado por pantalla.
En este caso para calcular el resultado habrá que llamar a una función con el siguiente prototipo:
void operacion (int n1, int n2, char oper, float* resul, int *error);
siendo:
 • n1, n2: dos parámetros pasados por valor que representan los dos números sobre
los que se quiere operar.
 • oper: un parámetro pasado por valor que indica el tipo de operación que se debe
realizar sobre n1 y n2. Así si queremos realizar una suma este parámetro deberá tener el valor '+', siendo para el resto de los casos: resta '-', multiplicación: '*',
división '/', potencia '^', factorial '!'.
 • result: es un parámetro pasado por referencia donde se almacenará el resultado
de la operación.
 • error: es un parámetro pasado por referencia donde se almacenará si la
operación se ha resuelto o no con éxito. Los posibles valores que puede tomar
son:
o -1: si ha habido problemas al realizar la operación, como por ejemplo una
división entre cero o el factorial de un número negativo.
o 1: si la operación concluyó con éxito.

El código que llevo hasta ahora, es el siguiente:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//PROTOTIPS
void operacion(int n1, int n2, char oper, float *resul, int *error);
float fact(float n1);

//BLOC PRINCIPAL
int main(){
   char opcio;
   int num1=0,num2=0,error;
   float result=0;
   
   //Demanem 2 numeros a l'usuari
   printf("Introdueix el primer numero:\n");
   scanf("%d",&num1);
   
   printf("Introdueix el segon numero:\n");
   scanf("%d",&num2);
   
   //Mostrem el menú
do{
       printf("+ --> SUMAR\n");
       printf("- --> RESTAR\n");
       printf("* --> MULTIPLICAR\n");
       printf("/ --> DIVIDIR\n");
       printf("^ --> POTENCIA\n");
       printf("! --> FACTORIAL\n");
       printf("s --> SALIR\n");
       
       //Usuari tria una opció
printf("Selecciona una opcio:\n");
       scanf("%c",&opcio);
       
       //Cridem el procediment
       operacion(n1, n2, oper, *resul, *error);
   
//Condició de sortida de while    
   }while(opcio!='s');
 
   system("pause");
   return 0;
}

//PROCEDIMENT
void operacion(int n1, int n2, char oper, float *resul, int *error){
    *error=1;
    switch(oper){
             case '+':
                  *resul=n1+n2;
                      break;
             case '-':
                  *resul=n1-n2;
                      break;
             case '*':
                  *resul=n1*n2;
                      break;
             case '/':
                      if(n2==0)*error=-1;
                      else *resul=n1/n2;
                      break;
             case '^':
                  *resul=pow(n1,n2);
                      break;
             case '!':
                  if(n1==0 || n2==0)*error=-1;
                  else
                  printf("El factorial de n1 es: %lf\n",fact(n1));
                  printf("\n");
                      break;
             case 's':
                  system("exit");
                      break;
             default:
                      printf("No has escollit una opcio correcta\n");                  
    }
}

//FUNCIÓ
float fact(float n1){
   if(n1==0 || n1==1)
      return 1;
   else
       return n1*factorial(n1-1);
}


Espero que me puedan ayudar :D
#5
Programación C/C++ / Nuevo problema
31 Marzo 2013, 14:07 PM
Hola buenos días, pues aquí tengo otro ejercicio problemático, espero que me puedan ayudar (me aparece todo 0 de nuevo):

La práctica consiste en implementar una aplicación usando funciones.
El programa en C gestionará la realización de determinadas operaciones en un vector de enteros de MAX (6, per ejemplo) posiciones:
 • Introducción de todos los elementos del vector (Altas).
 • Visualización de todos los elementos (Listado).
 • Visualización del elemento que se encuentra en una determinada posición (Consulta por    
   Posición).
 • Visualizar la suma total de los elementos del vector (Suma)
 • Visualizar la media aritmética de los elementos del vector (Media)
 • Visualizar el valor máximo, mínima y la media (MaxMedMin)

Se requiere diseñar el programa de forma modular, de manera que cada función se encargue de manipular los datos de la forma apropiada.

Se nos exige que haya como mínimo les siguientes acciones y funciones:
 • Función InicializarVector  (todos los valores a 0)
 • Función VisualizarMenu
 • Función Listado
 • Función ConsultarPosicion
 • Función Suma
 • Función Media
 • Función MaxMedMin

El código que llevo por ahora es el siguiente (sé que está en catalán, es para no andar traduciéndolo y que la vaya liando por ahí en medio, aun y así creo que es entendible):
#include<stdio.h>
#include<stdlib.h>

//Prototips
void InicialitzarVector(int vector[],int gran);
void VisualitzarMenu(int vector[],int gran);
void ConsultarPosicio(int vector[],int gran);
void Suma(int vector[],int suma);
void Mitjana(int vector[],int gran);
void MaxMitMin(int vector[],int gran);

//Bloc principal    
int main(){
int vector[6]={8,4,2,0,1,5},num=6;

InicialitzarVector(vector,num);
VisualitzarMenu(vector,num);
ConsultarPosicio(vector,num);
Suma(vector,num);
Mitjana(vector,num);
MaxMitMin(vector,num);

system("pause");
}

//Funcions
//Inicialitzem el vector a 0
void InicialitzarVector(int vector[],int gran){
int i=0;
 for(i=0;i<gran;i++)
     vector[i]=0;  
}

//Printem el menú
//Llistem els elements del vector
void VisualitzarMenu(int vector[],int gran){
int i=0;
printf("El vector conte els seguents elements: ");
for(i=0;i<gran;i++)
    printf("%d",vector[i]);  
}

//Mostrem la posició del vector demanada
void ConsultarPosicio(int vector[],int gran){
int i=0;
printf("\nIntrodueix la posicio que desitges comprovar: \n");
scanf("%d",&i);
printf("La posicio %d conte el valor %d \n",i,vector[i]);    
}

//Suma de tots els elements del vector
void Suma (int vector[],int gran){
int i=0,suma=0;
 for(i=0;i<gran;i++)
     suma=suma+vector[i];
   printf("La suma es: %d \n",suma);
}

//Mitjana de tots els elements del vector
void Mitjana (int vector[],int gran){
int i=0,mitjana=0,suma=0;    
  for(i=0;i<gran;i++){
      suma=suma+vector[i];
  }
   mitjana= suma/i ;
   printf("La mitjana es: %d \n",mitjana);      
}

//Calculem el màxim, la mitjana i el màxim valor del vector
void MaxMitMin (int vector[],int gran){    
int i=0,mitjana=0,max=0,min=50;
   for(i=0;i<gran;i++){
     if (vector[i]>max)
       max=vector[i];
     else if (vector[i]<min)
       min=vector[i];    
   }
printf("El maxim es: %d \n",max);
printf("El minim es: %d \n",min);
printf("La mitjana es: %d \n",mitjana);
}


De nuevo, muchas gracias por su tiempo y ayuda :)
#6
Programación C/C++ / ¿Me echáis un cable?
26 Marzo 2013, 00:11 AM
Hola buenas tardes, necesito que me echen una mano con este ejercicio:

Programa en C que pase de pies (unidad de longitud) a metros y a la inversa, utilizando funciones, las cuales no recibirán parámetros. (1 metro=0.3048pies).

Muchas gracias :D