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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 160
81  Programación / Programación C/C++ / Re: Evacuar dudas sobre punteros en lenguaje C. en: 15 Marzo 2015, 19:39 pm
Lo primero: si tienes una duda con respecto a código fuente ya sea un fragmento o un programa completo por favor publicalo como texto, así es mas fácil copiar y verificar este mediante el editor de texto favorito.

----

Los punteros (para ser exactos variables de tipo "puntero a T") son variables que almacenan direcciones de memoria, en base a ellas pueden acceder al objeto apuntado mediante indireccion con el operador "*" o "[]". Un caso similar sucede con el cartero: este no confunde las direcciones (punteros) con las casas (objetos apuntados).

En el caso de las funciones estas reciben todos sus  argumentos por valor, la única forma de modificar una variable declarada en otra función es si uno de estos valores es una dirección ya que al aplicar indireccion se accede al objeto apuntado (la bendita variable declarada en otra función).

El caso de scanf es exactamente ese: la función recibe una cadena de formato, por ejemplo "%c %d %f", en base a ella obtiene los tres valores (de tipo char, int y float, respectivamente) y los debe almacenar en tres variables, como espero puedas imaginar esas variables se indican mediante sus direcciones de memoria a continuación de la cadena de formato.

Un saludo
82  Programación / Programación C/C++ / Re: quien me puede ayudar en: 15 Marzo 2015, 18:31 pm
Este es el tercer tema que abres sobre tu problema y en los dos anteriores ya te respondieron: en C para comparar cadenas debes utilizar la función strcmp (prototipo en <string.h>), esta retorna el valor cero si las dos cadenas son iguales.

Un saludo
83  Programación / Programación C/C++ / Re: Sobre media de asignaturas en: 15 Marzo 2015, 17:13 pm
por mucho que he cambiado los parametros siempre me refleja la ultima nota incluida en este caso en el ultimo alumno, estoy aburridooo y no avanzo.
Tal vez sea por solo copiar y pegar.

Al parecer el programa original utilizaba funciones y lo cambiaste a uno sin ellas tanto por los comentarios como porque hay llaves innecesarias.

En cuanto al programa:

1) Solo en el primer caso debes pedir las calificaciones de todos los alumnos, ahí utilizas mal los indices de los arrays:
Código
  1. float Notas[4][10], media[10], suma;
  2. float Notas1[4][10], media1[10], suma1;
  3.  
  4. /* ... */
  5.  
  6. for (a = 0; a < 10; a++){
  7.   suma = 0;
  8.   printf ("\n Datos del Alumno %d\n", a + 1);
  9.   for (b = 0; b < 4; b++){
  10.      printf ("\n Introduce la calificacion de la prueba %d:", b + 1);
  11.      scanf ("%f", &Notas[a][b]);
  12.      suma = suma + Notas[a][b];
  13.   }
  14. media[a] = suma / b;
  15.  
En esos bucles la variable "a" tomara los valores 0 .. 9 y la variable "b" los valores 0 .. 3. Bien los limites de los bucles están al revés o bien declaraste mal los arrays (en este caso debería ser "Notas[10][4]").

2) No necesitas de dos juegos de variables, con uno solo basta y hay que evitar nombres como "media" y "media1" ya que no son descriptivos: ¿Cual es la diferencia entre ellos?

3) Para calcular la media de la prueba no tienes por que pedir datos, la media de cada alumno ya la tienes en el array "media", solo tienes que imprimir ese valor dividido entre el numero de alumnos.

Ya por ultimo una aproximación mejor para el programa es primero pedir los datos de todos los alumnos y solo entonces dar la opción de imprimir la media de alumnos o prueba.

Un saludo
84  Programación / Programación C/C++ / Re: Ayuda con menu en C en: 15 Marzo 2015, 01:17 am
Lo primero que debes hacer, si no tienes uno, es conseguir un curso o libro de calidad. Recomendaciones sobre ellos las puedes consultar mediante el motor de búsqueda de los foros.

Segundo, evita el uso de fflush(stdin), las razones de ello en el tema |Lo que no hay que hacer en C/C++. Nivel basico|.

Por ultimo para imprimir la cadena correspondiente al mes con este como un entero en el rango [1, 12] debes utilizar un array que almacene esas cadenas utilizando al mes como indice. Para explicarlo mejor un programa de ejemplo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   char *mes[] = {
  7.      NULL,
  8.      "Enero",
  9.      "Febrero",
  10.      "Marzo",
  11.      "Abril",
  12.      "Mayo",
  13.      "Junio",
  14.      "Julio",
  15.      "Agosto",
  16.      "Septiembre",
  17.      "Octubre",
  18.      "Noviembre",
  19.      "Diciembre"
  20.   };
  21.   int num;
  22.  
  23.   puts("Introduce el mes (1 .. 12):");
  24.   if (scanf("%d", &num) == 1 && num >= 1 && num <= 12)
  25.      printf("El mes no %d es %s\n", num, mes[num]);
  26.  
  27.   return EXIT_SUCCESS;
  28. }

Sin embargo si apenas empiezas con C ese tipo de programas deberías dejarlos para mas adelante cuando veas el tema de arrays y punteros.

Un saludo
85  Programación / Programación C/C++ / Re: Filtro para no introducir un char en vector int. en: 14 Marzo 2015, 17:43 pm
como resuelvo que el usuario al introducir un char desde el teclado y no se lo trague el vector?
Una opción ya la indico ivancea96, otra consiste en verificar el resultado del operador >> directamente, un ejemplo:
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::cin;
  4. using std::endl;
  5.  
  6. #include <limits>
  7. using std::numeric_limits;
  8.  
  9. int main()
  10. {
  11.   int numero;
  12.  
  13.   while (true) {
  14.      cout << "Introduce un numero: ";
  15.      if (cin >> numero)
  16.         break;
  17.      else {
  18.         cin.clear();
  19.         cin.ignore(numeric_limits<int>::max(), '\n');
  20.      }
  21.   }
  22.  
  23.   cout << "El numero es " << numero << endl;
  24.  
  25.   return 0;
  26. }

Un saludo
86  Programación / Programación C/C++ / Re: Grabar estructura en archivo [lenguaje C] [Windows 7] en: 14 Marzo 2015, 04:25 am
Sólo una cosita más, me podrías decir el significado de == 1, debo interpretar que si es cero termina el bucle
Correcto. La función fread retorna el numero de elementos leídos con éxito y este valor sera igual o menor al tercer argumento de la función (en tu caso y en resumen 1 ==> lectura exitosa, 0 ==> error o fin de archivo).

Un saludo
87  Programación / Programación C/C++ / Re: Codigo para invertir pilas en: 14 Marzo 2015, 03:55 am
Tengo este codigo [...] pero a la hora de pedirle que muestre la pila invertida, unicamente me muestra el mensaje de "mostrando pila invertida" pero no me muestra nada
No es mi intención ser grosero (o pasar por un [CENSORED]) pero no entiendo cual es el problema. Si tu hiciste el programa debes saber al menos de forma general lo que hace. No muestra la pila invertida porque ... no la inviertes.

El tercer caso consiste de las operaciones:
Código
  1. case 3:
  2.   cout << "\n\n MOSTRANDO PILA INVERTIDA\n\n";
  3.   if (p != NULL)
  4.      pop(p);
  5.   else
  6.      cout << "\n\n\tPila vacia..!" << endl;
  7. break;
  8. case 4:
En pseudocodigo:
Código:
Imprimir "\n\n MOSTRANDO PILA INVERTIDA\n\n"
Si la pila no esta vacía
   Sacar un elemento, la operación que se realiza con ese valor es ... ninguna
Caso contrario
   Imprimir "\n\n\tPila vacia..!"

Formas para procesar una lista vinculada (al final es lo que utilizas) hay varias ya sea mediante iteración o recursion, a lo mejor tu pregunta va en ese sentido o tal vez se deba llamar a la función que invierte un cadena.

Un saludo
88  Programación / Programación C/C++ / Re: Grabar estructura en archivo [lenguaje C] [Windows 7] en: 14 Marzo 2015, 03:34 am
Lo último es un inconveniente con el bucle while, siempre me duplica el último dato.
El problema se debe a que estas utilizando feof para controlar el bucle de lectura y con ello se realiza una iteración de mas:
Código
  1. printf( "\n\n Listado completo\n" );
  2. while( !feof(ptrEst) ){
  3.   fread(&est, sizeof(est), 1, ptrEst);
  4.   printf( " %d - %s \n", est.matricula, est.nombre );
  5. }
La solución manteniendo el uso de la función feof ya te la dio BloodSharp, solo ten cuidado con el bucle ya que son dos expresiones separadas por el operador condicional ",".

Otra opción consiste en olvidarse de feof, temas relacionados con ello los puedes consultar mediante el motor de búsqueda de los foros, lo usual salvo casos excepcionales es, en lugar del uso de la bendita función, utilizar el valor de retorno de la función en turno. En tu caso basta con:
Código
  1. puts("Listado completo:");
  2. while (fread(&est, sizeof est, 1, ptrEst) == 1)
  3.   printf(" %d - %s \n", est.matricula, est.nombre);

Un saludo
89  Programación / Programación C/C++ / Re: Problema con Ejecutable en: 13 Marzo 2015, 03:52 am
El programa termina retornando el valor uno y ese valor lo retorna tu programa si la apertura del archivo falla, ya que utilizas el modo "r+b" el archivo debe existir. Para estar seguros cambia la verificación de fopen a:
Código
  1. if ((f = fopen("listin.bin","r+b")) == NULL){
  2.   perror("listin.bin");
  3.   return 1;
  4. }

Aparte de eso hay que evitar el uso de gets ya que esta puede causar el error en tiempo de ejecución si el destino de datos se desborda y por ultimo hay que cambiar esta llamada a scanf:
Código
  1. printf("Número de teléfono ");
  2. scanf("%dl",&d.telefono);
Ya que el especificador para el tipo long es "%ld".

Un saludo
90  Programación / Programación C/C++ / Re: problemas con el else en: 13 Marzo 2015, 03:00 am
ese es el codigo
Cuando publiques código fuente por favor utiliza las etiquetas de código. Estas se agregan mediante el cuadro desplegable con el texto "GeSHi" en la pagina de composición de mensajes, solo tienes que seleccionar ahí el lenguaje (C, C++, etc.).

El código fuente es:
Código
  1. if (f(pn)==0) ; /* <== */ {
  2.   p=pn;
  3.   cout<<"el valor de la raiz es"<<p;
  4.   cout<<"La grafica cruza por"<<p<<endl;
  5.  
  6.   system("pause");
  7. }else ; /* <== */ { /* <== */
  8.   if(f(pn)*f(an)>0) ; /* <== */ {
  9.      an==pn;
  10.      bn==bn;
  11.   }else } /* <== */
  12.      an==an;
  13.      bn==pn;
  14.   }
Los errores se generan porque tienes puntos y comas demás asi como llaves de mas/menos  y utilizas el operador de comparación "==" cuando debería ser el de asignación "=".

Un saludo
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ... 160
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines