Empezando con C++...

Iniciado por Sauw, 30 Noviembre 2010, 23:23 PM

0 Miembros y 2 Visitantes están viendo este tema.

Sauw

Saludos! Este es mi primer mensaje

Pues bien, tengo 15 años y empecé a programar en un curso el verano pasado (nada serio, unicamente para aprender porque siempre me ha gustado el tema) y claro, ahora he estado haciendo algunos programas por mi cuenta... ya he encontrado buenas paginas para seguir adelante (la verdad es que es algo dificil aprender de internet para mí hahaha) entonces para mí estaría genial que me ayudarais con mis dudas ^^

He estado trabajando en una calculadora bastante completa...

Aquí la función de sumar, mi nivel es más o menos éste (no se hacer mucho más aparte de lo utilizado aquí xD) No pongo la calculadora completa obviamente porque es muy larga

Citarvoid suma(void)
{
system("cls");
for(i=2;i<=opcion;i++) // utilizo la variable "opcion" para que el usuario elige cuantos numeros quiere operar
{  // for
                    if(i==2)
                    {
                    printf("\n Introduce el primer sumando       ");
                    scanf("%f", &a[1]);
                    printf("\n Introduce el segundo sumando      ");
                    scanf("%f", &a[2]);
                    }
                    if(i==3)
                    {
                    printf("\n Introduce el tercer sumando       ");
                    scanf("%f", &a[3]);
                    }
                    if(i==4)
                    {
                    printf("\n Introduce el cuarto sumando       ");
                    scanf("%f", &a[4]);
                    }
                     if(i==5)
                    {
                    printf("\n Introduce el quinto sumando       ");
                    scanf("%f", &a[5]);
                    }            // end if i=5
} // end for
system("cls");
printf("\n %f", a[1]); // pongo éste aqui y no dentro del for para que no aparezca el signo de "+" detrás del primer número
for(i=1;i<opcion;i++)
{ // for para mostrar suma, para que aparezca así: num1 + num2 (+ los demás elegidos hasta 5)
printf(" + %f", a[i+1]);
a[1]=a[1]+a[i+1];    /* esto no estoy seguro de que esté bien, funciona pero no me acaba de gustar el "a[1]=a[1]" , en vez de poder decir que le sume a a[1] lo demás sin más... me gustaria algo que hiciera "a[1] + 2" y sumara al valor de a[1] 2 unidades no sé... */
}
printf(" = %f\n\n", a[1]);  // el resultado          
system("pause");
} // fin suma


He explicado con comentarios más o menos que hace cada cosa para haceros una idea... esa es una de mis dudas

Luego como os dije he estado intentando aprender por internet y he tenido problemas

#include <iostream>

using namespace std;

int main()
{
   cout << "Hello world!" << endl;
   return 0;
}


Así es... ¡el programa más sencillo! Curiosmaente es perfecto porque están ahí acumuladas muchas de las cosas que no entiendo... vayamos por partes

using namespace std; (que es esto?)

   cout << "Hello world!" << endl; (no es lo mismo usar un printf, que diferencia hay??)

return 0; (esto que hace, que vuelve a la linia 0? Lo he compilado y quitarlo/ponerlo no cambiaba nada!

y... ¿porque no hay un system("pause"); en muchos codigos que leo? En mi ordenador almenos un programa como el anterior si no hay un system("pause") no da tiempo para leerlo ni de lejos xD



xassiz~

Bien, esto:
a[1]=a[1]+a[i+1];

Puedes cambiarlo por:
a[1]+=a[i+1];

Evita usar system(). Para poder ver una aplicación sin pause (respondo a tu pregunta de abajo) ejecutala desde la consola.


Busca info. sobre qué es C y qué es C++, y decide cual quieres aprender.

flony

#2
muy ducho no soy pero el primer code parece en c igual lo podes usar en c++ a printf y scanf y el segundo es c++ ese estoy seguro
y los system son para hacer ejecutar cosas que estan en
CitarC:\%windir%\system32
..busca y vas a ver que esta pause cls...que lo pusiste al comienzo de tu code  ;) etc...dicen q no es recomendable...yo la verdad uso el pause para ver sino se cierra  :laugh:
de todas formas ahi en este foro unos libros geniales para empezar a leer http://foro.elhacker.net/programacion_cc/librospapers_cc-t296234.0.html
si un problema no tiene solucion entonces no es un problema...es algo inevitable

Sauw

Muchas gracias ya me miraré algun libro

Pero entonces si no uso system("pause"); tine que haber una alternativa para que no se cierre... lo uso o no?

Uso Dev-C++, pero por lo que habéis dicho los printf y scanf funcionan con C y los cout son exclusivos de C++, no?

Entonces cuál de los dos uso? Hasta ahora he usado printf pero he estado viendo muchos programas que usan cout con la librería esa <iostream> que siempre lleva el using namespace std; que tampoco sé para que sirve...

Y el return 0; tampoco me hace nada, igual también es para C

Saludos


flony

*dicen q dev-c++ esta en desuso...o sea no se actualiza en cambio con los otros por ejemplo visual code bock borlan si
<iostream> es una libreria estandar de c++ y lo usa el preprocesador para utilizar cout y cin..
*lo del system("pause") un flaco lo explica bastante bien http://foro.elhacker.net/programacion_cc/ejecutar_programas_en_windows_sin_necesidad_de_pausas_system_pause_etc-t306837.0.html
*y lo del return 0....en realidad puede ser cualquier return a, en el caso que quieras que devuelva la variable a en una funcion pero cuando hay varias funciones, creo q se usa return 0, y esto lo razone yo, si estuviera en batch seria usando debug seria cero si no da errores de compilacion
*textual del libro "pensar en cpp" muy buen libro
CitarHay una palabra reservada que le permite decir «quiero usar las declaraciones
y/o definiciones de este espacio de nombres». Esa palabra reservada, bastante apropiada
por cierto, es using. Todas las librerías de C++ Estándar están incluidas en
un único espacio de nombres, que es std (por «standard»). Como este libro usa la
librería estándar casi exclusivamente, verá la siguiente directiva using en casi todos
los programas.
using namespace std;
Esto significa que quiere usar todos los elementos del espacio de nombres llamado
std. Después de esta sentencia, ya no hay que preocuparse de si su componente
o librería particular pertenece a un espacio de nombres, porque la directiva using
hace que el espacio de nombres esté disponible para todo el fichero donde se escribió
la directiva using.
Exponer todos los elementos de un espacio de nombres después de que alguien
se ha molestado en ocultarlos, parece contraproducente, y de hecho, el lector deberá
tener cuidado si considera hacerlo (como aprenderá más tarde en este libro). Sin
embargo, la directiva using expone solamente los nombres para el fichero actual,
por lo que no es tan drástico como suena al principio. (pero pienselo dos veces antes
de usarlo en un fichero cabecera, eso es temerario).
Existe una relación entre los espacios de nombres y el modo en que se incluyes los
ficheros de cabecera. Antes de que se estandarizara la nueva forma de inclusión de
los ficheros cabecera (sin el «.h» como en <iostream>), la manera típica de incluir
un fichero de cabecera era con el «.h» como en <iostream.h>. En esa época los
espacios de nombres tampoco eran parte del lenguaje, por lo que para mantener una
compatibilidad hacia atrás con el código existente, si se escribía:
#include <iostream.h>
En realidad, significaba:
#include <iostream>
using namespace std;
Sin embargo en este libro se usará la forma estándar de inclusión (sin el «.h») y
haciendo explícita la directiva using.
ojala te sirva de ayuda  ;)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

xassiz~

Con return devuelves de cuando llamas a una función.

En este caso, la funcion main() es del tipo int, y devuelve el valor 0, que significa que se ejecutó correctamente.

Y respecto al pause, ya te había respondido yo:
Cita de: pablomi en 30 Noviembre 2010, 23:29 PM
Evita usar system(). Para poder ver una aplicación sin pause (respondo a tu pregunta de abajo) ejecutala desde la consola.

Y lo de cout y printf, ¿cómo que cual de los dos usas? ¿Qué programas, en C o en C++?

Sauw

#6
Muchas gracias otra vez

Pues como dije uso "Dev-C++", y siempre he usado printf para mostrar cosas por pantalla y scanf para dar datos al programa, y mi pregunta es si debería usar cout en vez de printf o puedo ir tirando con printf y scanf.

Ya entendí lo de ejecutarlo por consola xD, pero tenerlo que hacer cada vez no me gusta, además que les mando los programas que hago a mis amigos y así y creo que no sabrían hacerlo (que, a ver, se lo puedo explicar pero para eso creo que lo dejo con el system("pause")

Y aquí se me plantea otra duda, me paso a "Codeblox" o sigo con Dev-C++? Me gusta la idea de no tener que usar pausas, pero quiero estar seguro antes de descarrgarlo (de que es mejor)

Por cierto he optimizado el codigo de la suma con "fors" ahora es simplemente esto:
Además, puedes decir que te sume cuantos numeros quieras! (antes solo podias sumar entre 2 y 5 numeros) Ahora estoy haciendo lo mismo con las funciones de resta, multiplicación y división

void suma(void)
{ // inicio suma
system("cls");
for(i=1;i<=opcion;i++)
{  // for suma
                    printf("\n Introduce el sumando numero  %d     " , i);
                    scanf("%f", &a[i]);
} // end for suma
system("cls");
printf("\n   %f", a[1]);
for(i=1;i<opcion;i++)
{ // for  mostrar suma
printf(" + %f", a[i+1]);
a[1]+=a[i+1];    
} // for  mostrar suma
printf(" = %f\n\n  ", a[1]);            
system("pause");
} // inicio suma

xassiz~

Si programas en C++ tienes que usar cout, y si programas en C tienes que usar printf.

Se llama Code::Blocks, pero de momento yo iría tirando con el Dev, siempre lo critican pero no argumentan, puedes ponerle el compilador que quieras (actualizado).

Sauw

Pues... viendo que cout y cin son algo más sencillos de usar creo que los usaré  partir de ahora, pero no voy a reformar mi calculadora de +300 lineas entera para eso xD Mientras funcione con print y scanf...

Bueno, tengo un gran problema ahora

Mi calculadora hace muchas cosas con no demasiadas variables, tiene un menu principal y varios submenus donde suma, resta, multiplica, divide, hace raices de cualquier indice y potencias de cualquier exponente, calcula ecuaciones de segundo grado con la formula, cosas de geometría como calcular areas o algunas operaciones de trigonometria... voy poniendo lo que vamos haciendo en el colegio.

Y bueno, con todo eso cada vez que se vuelve al menu las variables ya tienen asignados ciertos numeros a ellas y necesitaria que volvieran todas a cero cada vez que vuelve al menu (está con un while) no sé si me explico... podría hacerlo escribiendolas todas otra vez pero no hay una forma más rápida y fácil?

Gracias de nuevo

winroot

#9
Buenas!
Lee el post que está en este mismo subforo, lo que no hay que hacer en c/c++, by Littlehorse.
Despues si, creo que lo mejor está en inglés, por lo que si manejas lo básico de este idioma, te será todo más simple.
Luego de que tengas la base, te recomiendo leer Thinking In C++
Para mi gusto, los libros de addison-wesley  son muy buenos, pero bueno.
Usar cout y cin es mucho mas seguro que las funciones de stdio.h.
En otras palabras, la librería iostream es mucho mas segura y obtimizada que stdio.
using namespace std;
Si no colocas esto, tendrás que escribir:
Código (cpp) [Seleccionar]

std:: cout <<" hola mundo " <<endl;

En realidad lo que hace esa declaración  es justamente usar el espacio de nombres  estándar std.
Esto en c no existe, y es un mecanismo para evitar conflictos con identificadores.
Código (cpp) [Seleccionar]

namespace miespacio
{
int x=0;
}
int main()
{
int x=5;
cout <<" x en main =" <<x <<endl <<" x en mi espacio =" <<miespacio::x <<endl;
return 0;
}



<<endl; es un manipulador que envía "\n" a la salida estándar.
Saludos
Mi blog sobre programación y seguridad informática:
http://win-root.blogspot.com