elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / [DUDA] Punteros en: 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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //Prototipo
  6. void cuentavocales(char v[]);
  7.  
  8. int main()
  9. {
  10.  char frase[256];
  11.  cuentavocales(frase);
  12.  
  13.  system("PAUSE");
  14.  return 0;
  15. }
  16.  
  17. //Función que cuenta les vocales de la frase
  18. void cuentavocales(char frase[])
  19. {
  20.     int i=0,vocales[5]={0};
  21.  
  22.     printf("Introduce una frase: \n");
  23.     gets(frase);
  24.     for(i=0;i<strlen(frase);i++)
  25. {
  26.           if(frase[i]=='a'|| frase[i]=='A') vocales[0]++;
  27.           else if(frase[i]=='e' || frase[i]=='E') vocales[1]++;
  28.           else if(frase[i]=='i' || frase[i]=='I') vocales[2]++;
  29.           else if(frase[i]=='o' || frase[i]=='O') vocales[3]++;
  30.           else if(frase[i]=='u' || frase[i]=='U') vocales[4]++;
  31.    }
  32. //Mostramos los resultados por pantalla
  33. printf("Estadística \n");
  34. printf("as: %d \n",vocales[0]);    
  35. printf("es: %d \n",vocales[1]);
  36. printf("is: %d \n",vocales[2]);
  37. printf("os: %d \n",vocales[3]);    
  38. printf("us: %d \n",vocales[4]);
  39. printf("\n TOTAL: %d\n",vocales[0]+vocales[1]+vocales[2]+vocales[3]+vocales[4]);
  40. }

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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //Prototipo
  6. void cuentavocales(char v[5]);
  7.  
  8. int main()
  9. {
  10.  char frase[256],*pf=frase;
  11.  cuentavocales(frase);
  12.  
  13.  system("PAUSE");
  14.  return 0;
  15. }
  16.  
  17. //Función que cuenta las vocales de la frase
  18. void cuentavocales(char frase[5])
  19. {
  20.     int i=0,vocales[5]={0};
  21.     int * pv;
  22.     pv = &vocales[0];
  23.  
  24.     printf("Introduce una frase: \n");
  25.     gets(frase);
  26.     for(i=0;i<strlen(frase);i++)
  27. {
  28.   if(frase[i]=='a'|| frase[i]=='A') {
  29.   pv++;
  30.   }
  31.  
  32.   else if(frase[i]=='e' || frase[i]=='E') {
  33.   pv=pv+1;
  34.   pv++;
  35.   }
  36.  
  37.   else if(frase[i]=='i' || frase[i]=='I') {
  38.   pv=pv+2;
  39.   pv++;
  40.   }
  41.  
  42.   else if(frase[i]=='o' || frase[i]=='O') {
  43.   pv=pv+3;
  44.   pv++;
  45.   }
  46.  
  47.   else if(frase[i]=='u' || frase[i]=='U'){
  48.   pv=pv+4;
  49.   pv++;
  50.   }
  51.    }
  52.  
  53. //Mostramos los resultados por pantalla
  54. printf("Estadística \n");
  55. printf("as: %d \n",*pv);    
  56. printf("es: %d \n",*(pv+1));
  57. printf("is: %d \n",*(pv+2));
  58. printf("os: %d \n",*(pv+3));  
  59. printf("us: %d \n",*(pv+4));
  60. printf("\n TOTAL: %d\n",*pv+*(pv+1)+*(pv+2)+*(pv+3)+*(pv+4));
  61. }

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 / Programación C/C++ / [DUDA] Matrices en: 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í:
Código
  1. char frases[4][15] = {
  2. "Primera frase",
  3. "Segunda frase",
  4. "Hola mundo",
  5. "Y para acabar"
  6. };

¿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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main() {
  5. int dia;
  6.  
  7. printf("¿Que numero de la semana quieres? \n");
  8. scanf("%d",&dia);
  9.  
  10. switch(dia) {
  11. case 1 :
  12. printf("lunes \n");
  13. break;
  14. case 2 :
  15. printf("martes \n");
  16. break;
  17. case 3 :
  18. printf("miércoles \n");
  19. break;
  20. case 4 :
  21. printf("jueves \n");
  22. break;
  23. case 5 :
  24. printf("viernes \n");
  25. break;
  26. case 6 :
  27. printf("sábado \n");
  28. break;
  29. case 7 :
  30. printf("domingo \n");
  31. break;
  32. default :
  33. printf("No existe \n");
  34. }
  35. system("PAUSE");
  36. return 0;
  37. }

Espero que me podáis echar un cable.

Un saludo :D
3  Programación / Programación C/C++ / Necesito ayuda urgente en: 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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct departament{
  5. char nom[30];
  6. char capd[20];
  7. int codi;
  8. };
  9.  
  10. struct empleat{
  11. char nom[30];
  12. struct departament;
  13. float sou;
  14. int codi;
  15. };dept;
  16.  
  17. Departament omplir();
  18. void mostrar(Departament dep);
  19. int menu();
  20.  
  21. departament d;
  22. empleat e;
  23.  
  24. int res=0,num=0,codi=0,codi_mostra,num_baixa=0;
  25.  
  26. do{
  27. res=menu();
  28.  
  29. switch(res){
  30.         case 1:
  31.              codi=alta_client(&c);
  32.              break;
  33.         case 2:
  34.              num=valida_codi(codi);
  35.              break;
  36.         case 3:
  37.              codi_mostra=mostra_client(c);
  38.              break;
  39.         case 4:
  40.              num_baixa=baixa_client(&c);
  41.  
  42.              break;
  43.         case 5:
  44.  
  45.              break;
  46.         case 6:
  47.  
  48.              return 0;
  49.              break;      
  50.         }
  51.  
  52.  
  53.  }while(res != 6);
  54.  system("PAUSE");
  55.  return 0;
  56. }
  57.  
  58.  
  59. Departament omplir(){
  60.        Departament d;
  61.        printf("Introdueix el nom del departament");
  62.        scanf("%d",&d.nom);
  63.        fflush(stdin);
  64.        printf("Introdueix el cap del departament");
  65.        gets(d.capd);
  66.        fflush(stdin);
  67.        printf("Introdueix el codi");
  68.        scanf("%lf",&d.codi);
  69.        fflush(stdin);
  70.        return d;
  71.        }
  72.  
  73. int menu(){
  74.    int num;
  75.    do{
  76.    printf("1-Donar d'alta\n2-Donar de baixa\n3-Llistar\n4-Modificar dades\n5-Consultar per codi");
  77.    scanf("%d",&num);
  78.    }while(num<0 || num>5);
  79.    return num;
  80.  
  81.    }
  82.  

Muchas gracias por la ayuda :)
4  Programación / Programación C/C++ / Me tiene loco en: 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:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. //PROTOTIPS
  6. void operacion(int n1, int n2, char oper, float *resul, int *error);
  7. float fact(float n1);
  8.  
  9. //BLOC PRINCIPAL
  10. int main(){
  11.    char opcio;
  12.    int num1=0,num2=0,error;
  13.    float result=0;
  14.  
  15.    //Demanem 2 numeros a l'usuari
  16.    printf("Introdueix el primer numero:\n");
  17.    scanf("%d",&num1);
  18.  
  19.    printf("Introdueix el segon numero:\n");
  20.    scanf("%d",&num2);
  21.  
  22.    //Mostrem el menú
  23. do{
  24.        printf("+ --> SUMAR\n");
  25.        printf("- --> RESTAR\n");
  26.        printf("* --> MULTIPLICAR\n");
  27.        printf("/ --> DIVIDIR\n");
  28.        printf("^ --> POTENCIA\n");
  29.        printf("! --> FACTORIAL\n");
  30.        printf("s --> SALIR\n");
  31.  
  32.        //Usuari tria una opció
  33. printf("Selecciona una opcio:\n");
  34.        scanf("%c",&opcio);
  35.  
  36.        //Cridem el procediment
  37.        operacion(n1, n2, oper, *resul, *error);
  38.  
  39. //Condició de sortida de while    
  40.    }while(opcio!='s');
  41.  
  42.    system("pause");
  43.    return 0;
  44. }
  45.  
  46. //PROCEDIMENT
  47. void operacion(int n1, int n2, char oper, float *resul, int *error){
  48.     *error=1;
  49.     switch(oper){
  50.              case '+':
  51.                   *resul=n1+n2;
  52.                       break;
  53.              case '-':
  54.                   *resul=n1-n2;
  55.                       break;
  56.              case '*':
  57.                   *resul=n1*n2;
  58.                       break;
  59.              case '/':
  60.                       if(n2==0)*error=-1;
  61.                       else *resul=n1/n2;
  62.                       break;
  63.              case '^':
  64.                   *resul=pow(n1,n2);
  65.                       break;
  66.              case '!':
  67.                   if(n1==0 || n2==0)*error=-1;
  68.                   else
  69.                   printf("El factorial de n1 es: %lf\n",fact(n1));
  70.                   printf("\n");
  71.                       break;
  72.              case 's':
  73.                   system("exit");
  74.                       break;
  75.              default:
  76.                       printf("No has escollit una opcio correcta\n");                  
  77.     }
  78. }
  79.  
  80. //FUNCIÓ
  81. float fact(float n1){
  82.    if(n1==0 || n1==1)
  83.       return 1;
  84.    else
  85.        return n1*factorial(n1-1);
  86. }

Espero que me puedan ayudar :D
5  Programación / Programación C/C++ / Nuevo problema en: 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):
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. //Prototips
  5. void InicialitzarVector(int vector[],int gran);
  6. void VisualitzarMenu(int vector[],int gran);
  7. void ConsultarPosicio(int vector[],int gran);
  8. void Suma(int vector[],int suma);
  9. void Mitjana(int vector[],int gran);
  10. void MaxMitMin(int vector[],int gran);
  11.  
  12. //Bloc principal    
  13. int main(){
  14. int vector[6]={8,4,2,0,1,5},num=6;
  15.  
  16. InicialitzarVector(vector,num);
  17. VisualitzarMenu(vector,num);
  18. ConsultarPosicio(vector,num);
  19. Suma(vector,num);
  20. Mitjana(vector,num);
  21. MaxMitMin(vector,num);
  22.  
  23. system("pause");
  24. }
  25.  
  26. //Funcions
  27. //Inicialitzem el vector a 0
  28. void InicialitzarVector(int vector[],int gran){
  29. int i=0;
  30.  for(i=0;i<gran;i++)
  31.      vector[i]=0;  
  32. }
  33.  
  34. //Printem el menú
  35. //Llistem els elements del vector
  36. void VisualitzarMenu(int vector[],int gran){
  37. int i=0;
  38. printf("El vector conte els seguents elements: ");
  39. for(i=0;i<gran;i++)
  40.     printf("%d",vector[i]);  
  41. }
  42.  
  43. //Mostrem la posició del vector demanada
  44. void ConsultarPosicio(int vector[],int gran){
  45. int i=0;
  46. printf("\nIntrodueix la posicio que desitges comprovar: \n");
  47. scanf("%d",&i);
  48. printf("La posicio %d conte el valor %d \n",i,vector[i]);    
  49. }
  50.  
  51. //Suma de tots els elements del vector
  52. void Suma (int vector[],int gran){
  53. int i=0,suma=0;
  54.  for(i=0;i<gran;i++)
  55.      suma=suma+vector[i];
  56.    printf("La suma es: %d \n",suma);
  57. }
  58.  
  59. //Mitjana de tots els elements del vector
  60. void Mitjana (int vector[],int gran){
  61. int i=0,mitjana=0,suma=0;    
  62.   for(i=0;i<gran;i++){
  63.       suma=suma+vector[i];
  64.   }
  65.    mitjana= suma/i ;
  66.    printf("La mitjana es: %d \n",mitjana);      
  67. }
  68.  
  69. //Calculem el màxim, la mitjana i el màxim valor del vector
  70. void MaxMitMin (int vector[],int gran){    
  71. int i=0,mitjana=0,max=0,min=50;
  72.    for(i=0;i<gran;i++){
  73.      if (vector[i]>max)
  74.        max=vector[i];
  75.      else if (vector[i]<min)
  76.        min=vector[i];    
  77.    }
  78. printf("El maxim es: %d \n",max);
  79. printf("El minim es: %d \n",min);
  80. printf("La mitjana es: %d \n",mitjana);
  81. }

De nuevo, muchas gracias por su tiempo y ayuda :)
6  Programación / Programación C/C++ / ¿Me echáis un cable? en: 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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines