Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: S3kh en 12 Julio 2011, 01:53 am



Título: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: S3kh en 12 Julio 2011, 01:53 am
Simplemente, leyendo un manual, y practicando de todas las maneras que se me ocurren, NO me sale un programa tan básico como este (El objetivo es pedir un nombre, un edad y mostrarlas. si, no tiene sentido, pero es para practicar). La idea es que para mostrarlos, llame a una funcion, y la idea es que lo haga 10 veces xD. En fin, me tira 500mil errores, y no llego a entender dónde me equivoco. Es mi primer programa que hago, asi que es un desastre seguramente, no se suiciden al verlo ni me insulten jaja.

Citar

#include <iostream.h>

char Nombre[30],RetornoMD;
char Edad[2];

void MostrarDatos(char N, int E);


int main() {
    //Pedir nombre
    cout << "Ingrese nombre su nombre: " <<endl;
    cin >>Nombre;
    cout << "Ingrese su edad: " << endl;
    cin >> Edad;
      for (int count = 1; count = 10; count = i++);
      MostrarDatos(Nombre, Edad);
    return 0;
 }
 
void MostrarDatos(char N, char E) {
     cout << "Su nombre es: " << N << endl;
     cout << "Usted tiene " << E << " años" << endl;
      }



Desde ya ES UN DESASTRE, pero es lo que intento. Y otra cosa, si la función es void, no tengo que poner el return, no?xD

Tengo 500mil errores, pero bueno n.n espero que un alma generosa me diga algún consejito n.n

Gracias de antemano n.n un abrazo.

USO DEV-C++ :P


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: diskontrol en 12 Julio 2011, 02:41 am
Buenas,

-No te recomiendo usar variables globales si no es necesario.
-La variable RetornoMD no es usada.
-En la declaración de la función las variables deben coincidir en tipo con las que le pases luego.
-Al usar cout y cin, debes usarlos como std::cout y std::cin, o si te da pereza poner
Código:
using namespace std;
-En el bucle for usas una variable no declarada (e innecesaria) también te recomiendo inicializar los índices a 0. Además si pones ";" tras el bucle for no incluyes ninguna instrucción en el mismo

Por lo que tu código quedaría más o menos así:

Código
  1. #include <iostream>
  2. using namespace std;//
  3.  
  4.  
  5. void MostrarDatos(char N[], int E);
  6.  
  7.  
  8. int main() {
  9.  char Nombre[30];
  10.  int Edad;
  11.  //Pedir nombre
  12.  cout << "Ingrese nombre su nombre: " <<endl;
  13.  cin >>Nombre;
  14.  cout << "Ingrese su edad: " << endl;
  15.  cin >> Edad;
  16.  for (int count = 0; count < 10; count++)
  17.    MostrarDatos(Nombre, Edad);
  18.  return 0;
  19. }
  20.  
  21. void MostrarDatos(char N[], int E) {
  22.  cout << "Su nombre es: " << N << endl;
  23.  cout << "Usted tiene " << E << " años" << endl;
  24. }

Saludos!


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: Khronos14 en 12 Julio 2011, 02:44 am
Se me adelantó diskontrol, pero bueno  ;D

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void MostrarDatos(char * Nombre, unsigned int Edad)
  6. {
  7. cout << "Su nombre es: " << Nombre << endl;
  8. cout << "Su edad es: " << Edad << endl;
  9. }
  10.  
  11. int main(int argc, char * argv[])
  12. {
  13. char Nombre[30];
  14. unsigned int Edad = 0;
  15.  
  16. cout << "Ingrese su nombre: ";
  17. cin.get(Nombre, 29);
  18. cout << "Ingresa tu edad: ";
  19. cin >> Edad;
  20.  
  21. for (int i = 0; i < 10; i++)
  22. MostrarDatos(Nombre, Edad);
  23.  
  24. return 0;
  25. }
  26.  

Saludos.


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: S3kh en 12 Julio 2011, 14:01 pm
Ah, gracias a las 2. Este manual que estoy leyendo en ningún momento nombra eso de using namespace std ni nada por el estilo. Con razón no me funcionaba je...

Ahora, por lo que voy entendiendo, Diskontrol:

Si yo hago el prototipo de una función y su declaración, y en sus parámetros va a recibir una cadena, tengo que poner los  [ ] también? Ahora voy a buscar algo de info sobre eso de std::cout, std::cin.

Y Khronos14, hay algo en lo que me confundí, según el material que estoy leyendo primero se definen los prototipos de función, y luego de la función main, recién la definición de dichas funciones. Es posible también definirlas sin declarar eso de prototipo? Es decir, yo hasta ahora tenía entendido que primero se declaraba el prototipo, después la función main, y después las funciones ya definidas.

 Por otro lado, en qué se diferencia poner usigned int a int? Digamos, tengo entendido que eso quiere decir "sin signo", pero, cuál es el fin, en qué afecta? Hay cosas que estoy leyendo en varios manuales, y sigo sin entender la utilidad de signed-unsigned. Je.
 Luego, "char * Nombre" en los parámetros de MostrarDatos, qué sería exactamente? Digamos, por qué el asterisco? TEngo una idea muy vaga de lo que pueda ser, ahora voy a ver si puedo encontrar algo.
 Y última duda, argc, char * argv[]... Ahí si que no tengo idea de que es jaja

Ahora igual voy a ver si puedo encontrar mas info y demás :) Pero si me pueden aclarar esas duditas lo agradecería mucho :P Sobre todo la utilidad y necesidad de Signed-Unsigned.
çMuchas gracias a ambos por las respuestas y la ayuda :)!


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: Acermax en 12 Julio 2011, 14:26 pm
Si, en la declaración tienes que poner [] o en su defecto *. En cuanto llegues a la parte de punteros lo comprenderas... Una cadena no deja de ser un puntero al primer elemento, asi que por eso funciona de ambas maneras.

En cuanto a lo de std::cout y tal, para buscar información, pon en google "espacio de nombres c++" o algo así. No es algo complejo ni mucho menos.

Respecto al prototipo de la función. Yo prefiero declarar arriba el prototipo como dices, y abajo realizarla, porque así sale todo más ordenado (desde mi punto de vista).

La diferencia entre int y unsigned int es eso que dices, que el unsigned no puede tomar valores negativos. Si vas a utilizar una variable que no puede usar valores negartivos (como la edad) está bien utilizarla como unsigned, pero bueno, por costumbre, porque en este caso no importaría demasiado. Básicamente se diferencian en su rango de representación.
unsigned int 32 bits 0 a 4,294,967,295
int 32 bits -2,147,483,648 a 2,147,483,647
Como ves el unsigned puede representar exactamente el doble de números positivos.

Y respecto al argc y argv[]... Eso se usa para pasarle datos al programa a la hora de ejecutarlo, me intentaré explicar.
Cuando ejecutas el programa desde el CMD o desde la consola, lo haces de la siguiente manera
Código:
miprograma.exe           o            ./miprograma

Pero imagina que además, a la hora de llamarlo quieres indicarle algo más, como por ejemplo un número (podría ser lo que quieras, 2 ficheros, más números o lo que sea)

Código:
./miprograma 10

Entonces aquí entra en funcionamiento el argc y argv.

Código
  1. int main (int argc, char* argv[]){
  2.     if (argc!=2) return 0;    //argc indica el número de parámetros que le hemos
  3.                                       //pasado a la hora de ejecutarse, en este caso
  4.                                       //necesitamos comprobar que sean 2, pues queremos
  5.                                       //leer también el número que le pasamos, si no le
  6.                                       //pasamos el segundo parametro cerramos el programa
  7.    int n=atoi(argv[1]);      //Copiamos el número recibido en la variable n.
  8.                                      //tenemos que usar atoi, o un cast, porque si no recuerdo mal
  9.                                     //, argv devuelve una cadena de caracteres, y tenemos
  10.                                     //que convertirlo en un entero.
  11.  
  12.  
Recuerda que argv[0] contiene el nombre del programa, por eso empiezo por argv[1]


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: Khronos14 en 12 Julio 2011, 15:34 pm
Yo el main siempre lo pongo abajo de todo, además no declaro los prototipos de las funciones, prefiero ordenar las funciones según se van llamando, aunque para gustos colores.

Para aprender C++ solo te hace falta dedicación, porque es el lenguaje de programación más documentado de toda la red.

Saludos.


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: S3kh en 12 Julio 2011, 18:59 pm
Genial, ya entendí mucho mejor las cosas. Ya estoy haciendo programitas muy simples. je... Muchas gracias a todos los que respondieron y ayudaron :) Muchísimas gracias:)


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: albertini851204 en 14 Julio 2011, 16:15 pm
holaaaaa mi nombre es aliuska y necesito me ayuden a responder este programa
es para una prueba final .

Boleta No. 10
En una cooperativa agrícola de viandas se poseen los datos correspondientes al ciclo productivo terminado en una época del año. Cada uno de los cooperativistas  atendió todo el ciclo en la siembra de un solo tipo de viandas la cual podía ser papa, boniato o yuca. Se conoce la cantidad de caballerías sembradas por cada cooperativista y la producción obtenida.

Se conoce la norma de producción que debe rendir una caballería en cada tipo de vianda.
 
Hacer un programa en C++ para:
a)   Conocer cuál fue el cooperativista que mejor eficiencia obtuvo en cada tipo de cultivo.
b)   Conocer la producción total de la cooperativa por cada tipo de vianda y la cantidad de cooperativistas cuya producción fue menor que la norma en cada tipo de vianda.



Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: Died en 14 Julio 2011, 16:55 pm
Me aburro mucho... ;) Va en C

Código
  1. #include <stdio.h>
  2.  
  3. int mostrar (char *nom, int ed*)
  4. {
  5. printf ("\nNombre: %s", nom);
  6. printf ("\nEdad: %d", ed);
  7.  
  8. return 0;
  9. }
  10.  
  11. int main ()
  12. {
  13. char nombre [20]; unsigned int edad;
  14.  
  15. printf ("Introduzca su nombre: ");
  16. fgets (nombre, 20, stdin);
  17. printf ("Introduzca su edad: ");
  18. scanf ("%d", edad);
  19.  
  20. printf ("\n");
  21. mostrar (nombre, edad);
  22.  
  23. printf (" --- done ----\n\n");
  24. return 0;
  25. }
  26.  
Código:
$ gcc -o code code.c
$ ./code
Introduzca su nombre: Sagrini
Introduzca su edad: 50

Nombre: Sagrini
Edad: 50
--- done ----

$

Un saludo. Sagrini


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: S3kh en 15 Julio 2011, 00:10 am
Claro, esa es usando stdio y printf. Justo estaba leyendo sobre eso. Je.

Otra dudita, supongamos que yo NO no quiera sumar dos números, si no que quiera trabajar con los números que sean, digamos, si el usuario quiere pasar 25 números, o si quiere pasar 2, como se define la función?
Es decir, yo pongo

tipo funcion(param1, param2... etc);

Ahora bien, si yo NO sé cuántos parámetros va a recibir? Cómo sería? O me estoy metiendo en tema mas avanzado?


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: martin_poipon en 16 Julio 2011, 00:20 am
Simplemente, leyendo un manual, y practicando de todas las maneras que se me ocurren, NO me sale un programa tan básico como este (El objetivo es pedir un nombre, un edad y mostrarlas. si, no tiene sentido, pero es para practicar). La idea es que para mostrarlos, llame a una funcion, y la idea es que lo haga 10 veces xD. En fin, me tira 500mil errores, y no llego a entender dónde me equivoco. Es mi primer programa que hago, asi que es un desastre seguramente, no se suiciden al verlo ni me insulten jaja.


Desde ya ES UN DESASTRE, pero es lo que intento. Y otra cosa, si la función es void, no tengo que poner el return, no?xD

Tengo 500mil errores, pero bueno n.n espero que un alma generosa me diga algún consejito n.n

Gracias de antemano n.n un abrazo.

USO DEV-C++ :P

Sé que todo el mundo respondió, pero igual quiero aportar mi granito de arena ;D
Mira, te dejo el code listo y explicado ;) :
Código:
#include <iostream> //Es iostream sin .h porque es una libreria C++

char Nombre[30]; //Quito RetornoMD, no se usa
char Edad[2];

void MostrarDatos(char N, int E);

using namespace std; // Ya te lo han explicado, :)

int main() {
    //Pedir nombre
    cout << "Ingrese nombre su nombre: " <<endl;
    cin >>Nombre;
    cout << "Ingrese su edad: " << endl;
    cin >> Edad;
      for (int i=0; i<10; i++){ //se puede usar la misma variable para el for; i=0 -> hasta 9 (i<10) = 10 veces :)
      MostrarDatos(Nombre, Edad);
      }
    return 0;
 }
 
void MostrarDatos(char N, char E) {
     cout << "Su nombre es: " << N << endl;
     cout << "Usted tiene " << E << " años" << endl;
      }

PD: No importa que sea un desastre, eres nuevo y nadie te juzga por ello. Todos hemos pasado por esa etapa, asi que, el que te culpe, es un novatoide troll  :xD

Ah, y otra cosa: el error en tu for es que cuando usamos for, indicamos lo siguiente:
for(i=0; i<10; i++){/*aqui las sentencias*/} -> para(i que vale 0, repetimos la accion hasta que i valga 9 (i<10 -> i - menor que 10 -> 9), y, cada vez que se repita el bucle, aumentamos en 1 i (i++ -> i = i+1)).

Otra cosa para el for es que su sintaxis es esta:
for(algo,algo,algo){ (abrir llave) sentencias (cout, cin, etc) (cerrar llave) }

Espero que me hayas entendido ;)


Título: Re: Ayuda [Programa SUPERBÁSICO, aprendiendo]
Publicado por: S3kh en 17 Julio 2011, 16:34 pm
Sé que todo el mundo respondió, pero igual quiero aportar mi granito de arena ;D
Mira, te dejo el code listo y explicado ;) :
Código:
#include <iostream> //Es iostream sin .h porque es una libreria C++

char Nombre[30]; //Quito RetornoMD, no se usa
char Edad[2];

void MostrarDatos(char N, int E);

using namespace std; // Ya te lo han explicado, :)

int main() {
    //Pedir nombre
    cout << "Ingrese nombre su nombre: " <<endl;
    cin >>Nombre;
    cout << "Ingrese su edad: " << endl;
    cin >> Edad;
      for (int i=0; i<10; i++){ //se puede usar la misma variable para el for; i=0 -> hasta 9 (i<10) = 10 veces :)
      MostrarDatos(Nombre, Edad);
      }
    return 0;
 }
 
void MostrarDatos(char N, char E) {
     cout << "Su nombre es: " << N << endl;
     cout << "Usted tiene " << E << " años" << endl;
      }

PD: No importa que sea un desastre, eres nuevo y nadie te juzga por ello. Todos hemos pasado por esa etapa, asi que, el que te culpe, es un novatoide troll  :xD

Ah, y otra cosa: el error en tu for es que cuando usamos for, indicamos lo siguiente:
for(i=0; i<10; i++){/*aqui las sentencias*/} -> para(i que vale 0, repetimos la accion hasta que i valga 9 (i<10 -> i - menor que 10 -> 9), y, cada vez que se repita el bucle, aumentamos en 1 i (i++ -> i = i+1)).

Otra cosa para el for es que su sintaxis es esta:
for(algo,algo,algo){ (abrir llave) sentencias (cout, cin, etc) (cerrar llave) }

Espero que me hayas entendido ;)


Entendido :D Ahora estoy leyendo mas temas, y me sirvió de mucho la ayuda :)
Muchas gracias a todos n.n