Ayuda [Programa SUPERBÁSICO, aprendiendo]

Iniciado por S3kh, 12 Julio 2011, 01:53 AM

0 Miembros y 1 Visitante están viendo este tema.

S3kh

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

diskontrol

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
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 (cpp) [Seleccionar]

#include <iostream>
using namespace std;//


void MostrarDatos(char N[], int E);


int main() {
  char Nombre[30];
  int Edad;
  //Pedir nombre
  cout << "Ingrese nombre su nombre: " <<endl;
  cin >>Nombre;
  cout << "Ingrese su edad: " << endl;
  cin >> Edad;
  for (int count = 0; count < 10; count++)
    MostrarDatos(Nombre, Edad);
  return 0;
}

void MostrarDatos(char N[], int E) {
  cout << "Su nombre es: " << N << endl;
  cout << "Usted tiene " << E << " años" << endl;
}


Saludos!
Siempre ten tus cosas cuando las necesites con @Dropbox. ¡Una cuenta de 2 GB es gratis! http://db.tt/YxRhsCI

Khronos14

Se me adelantó diskontrol, pero bueno  ;D

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

void MostrarDatos(char * Nombre, unsigned int Edad)
{
cout << "Su nombre es: " << Nombre << endl;
cout << "Su edad es: " << Edad << endl;
}

int main(int argc, char * argv[])
{
char Nombre[30];
unsigned int Edad = 0;

cout << "Ingrese su nombre: ";
cin.get(Nombre, 29);
cout << "Ingresa tu edad: ";
cin >> Edad;

for (int i = 0; i < 10; i++)
MostrarDatos(Nombre, Edad);

return 0;
}


Saludos.

S3kh

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 :)!

Acermax

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

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)


./miprograma 10


Entonces aquí entra en funcionamiento el argc y argv.

Código (cpp) [Seleccionar]

int main (int argc, char* argv[]){
     if (argc!=2) return 0;    //argc indica el número de parámetros que le hemos
                                       //pasado a la hora de ejecutarse, en este caso
                                       //necesitamos comprobar que sean 2, pues queremos
                                       //leer también el número que le pasamos, si no le
                                       //pasamos el segundo parametro cerramos el programa
    int n=atoi(argv[1]);      //Copiamos el número recibido en la variable n.
                                      //tenemos que usar atoi, o un cast, porque si no recuerdo mal
                                     //, argv devuelve una cadena de caracteres, y tenemos
                                     //que convertirlo en un entero.


Recuerda que argv[0] contiene el nombre del programa, por eso empiezo por argv[1]

Khronos14

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.

S3kh

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:)

albertini851204

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.


Died

Me aburro mucho... ;) Va en C


#include <stdio.h>

int mostrar (char *nom, int ed*)
{
printf ("\nNombre: %s", nom);
printf ("\nEdad: %d", ed);

return 0;
}

int main ()
{
char nombre [20]; unsigned int edad;

printf ("Introduzca su nombre: ");
fgets (nombre, 20, stdin);
printf ("Introduzca su edad: ");
scanf ("%d", edad);

printf ("\n");
mostrar (nombre, edad);

printf (" --- done ----\n\n");
return 0;
}


$ gcc -o code code.c
$ ./code
Introduzca su nombre: Sagrini
Introduzca su edad: 50

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

$


Un saludo. Sagrini

S3kh

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?