› Foros › PlayStation 3 › Scene
#include <stdio.h>
int main()
{
float km, euros;
float kmr; // kilometros recorridos
float kmtR; // kilometros totales recorridos
float kmT = 0, eurosT = 0; // contadores para los km y los euros
while (km != -1)
{
printf("Introduce los kilometros [-1 para terminar] =>");
scanf("%f", &km);
getchar();
kmT += km;
if (km != -1)
{
printf("Introduce Precio en Euros del Gasoleo =>");
scanf("%f", &euros);
getchar();
eurosT += euros;
kmr = km / euros;
printf("Los kilometros recorridos por cada euro fue de = %.2fkm\n", kmr);
kmtR = kmT / eurosT;
}// fin del if
} //fin del while
printf("Los Kilometros Totales recorridos por el total de depositos fue = %.2fkm\n", kmtR);
return 0;
}
cltomas escribió:Analiza el código
#include <stdio.h>
int main()
{
float km, euros;
float kmr; // kilometros recorridos
float kmtR; // kilometros totales recorridos
float kmT = 0, eurosT = 0; // contadores para los km y los euros
while (km != -1)
{
printf("Introduce los kilometros [-1 para terminar] =>");
scanf("%f", &km);
getchar();
kmT += km;
if (km != -1)
{
printf("Introduce Precio en Euros del Gasoleo =>");
scanf("%f", &euros);
getchar();
eurosT += euros;
kmr = km / euros;
printf("Los kilometros recorridos por cada euro fue de = %.2fkm\n", kmr);
kmtR = kmT / eurosT;
}// fin del if
} //fin del while
printf("Los Kilometros Totales recorridos por el total de depositos fue = %.2fkm\n", kmtR);
return 0;
}
system("pause")
Adelaiglesia escribió:[360º] Si os animáis hago uno de C++ orientado a objetos
JohnCrichton escribió:para programar para ps3 no ahce falta un nivelazo de c++ y cosas chungas?
es que para pc es muy "facil", pero para la xbox360 por ejemplo para cargar un ejecutable o un Hello World son 50 o 60 lineas de codigo... xD aqui es lo mismo?
blipi escribió:Se que hace tiempo que no actualizo el tuto, pero en unas semanitas tengo la selctividad, y bueno, digamos que no le puedo dedicar mucho tiempo a estas cosas.
De todas formas, siempre que puedo me paso, y si veo alguna duda la intento resolver.
Salu2!
blipi escribió:No te voy a negar que no tengas parte de razón. Pero, comprenderás que en ningún momento se ha dicho que aquí se vayan a formar expertos en programación. Si a alguien le gusta la programación, aprenderá esto y mucho más.
Hoy en día, en ordenador modernos, la posibilidad de que usando memoria dinámicas toques algo fuera de normal Y ocurra un error grave, son bastante pequeñas. Supongo que conocerás de las existencia de los VEH y SEH, que funcionan a más de nivel y previenen de lecturas/escrituras en out of range. Si realmente alguien, usando este tutorial, consigue cargarse su ordenador por mal uso de la memoria, le doy un premio.
El uso de free, sí, es verdad, es un fallo mio no haberlo comentado. Pero bien sabrás que a menos que vayas a hacer un programa muy grande y lo hagas muy mal, no te vas a quedar sin memoria. Como bien he comentado en el tutorial, las declaraciones dinámicas de memoria no deben usarse en exceso, y en todo caso se debe usar memset para resetear memoria que ya no están en uso.
También sabrás que el tutorial no está acabado, y las struct siquiera he llegado a ellas, normal que no estén definidas =)
Alineación de memoria... Un buen tema, que, sin embargo, no considero que esté al alcance de nadie que fuera a leer este tutorial. Del mismo modo, a no ser que hagas un gran proyecto, no te preocuparás por ello.
Yo no me preocuparía mucho por los estánderes, un compilador decente no tendrá ningún problema hoy en día. Lo mismo va con las tabulaciones y espacios.
En el tutorial ya se comenta, y a cada persona que postea código para revisar se lo recuerdo, el uso de las tabulaciones para una buena lectura. A menos que se dediquen a ignorar el tutorial por completo, muchas malas costumbres no se pueden coger.
El punto en que quizás más de acuerdo estoy contigo es en el hecho de enseñar "uso de memoria". Pero, como comento en el tutorial, solo hace falta saber que es un puntero para poder progresar (en TODOS y cada uno de los tutoriales para aprender C, eso es un paso obligatorio). La información adicional que doy sobre memoria no es, evidentemente, obligatoria para progresar en un aprendizaje normal. Pero, yo, por ejemplo, si estuviera siguiendo un tutorial, querría que me dieran cuanta más información posible.
Finalmente, tal y como empieza el tutorial "C, como cualquier otro lenguaje de programación no requiere más que tiempo, una cabeza y mucha paciencia", y "Empezar a programar en C puede ser algo muy bueno o muy malo. C es un lenguaje que, si no te lo tomas con calma y te lo relees todo hasta entenderlo, no puedes continuar avanzado, este tutorial está pensado para ir progresando poco a poco", y para acabar "Es decir, empezar con este tutorial sin ánimos, a desganas, o con la creencia de que no aprenderéis nada, será contraproducente".
Dicho esto, yo aprendí a programar en VB, luego PHP y luego C. Sin embargo, VB ya no lo utilizo para nada, es más, en VB (que es mucho pero que mucho más fácil que C) es donde se cogen muchas más malas costumbres. En proporción con C, en VB se cogen muchísimas más malas costumbres.
En fin, muchas gracias por la opinión, pero espero comprendas que el estilo y "programa" del tutorial no va a variar.
Salu2!
Filiprino escribió:blipi escribió:No te voy a negar que no tengas parte de razón. Pero, comprenderás que en ningún momento se ha dicho que aquí se vayan a formar expertos en programación. Si a alguien le gusta la programación, aprenderá esto y mucho más.
Pero mejor empezar aprendiendo bien que mal, y precisamente como se va a aprender más lo aquí explicado se puede obviar completamente y buscas algo donde se expliquen las cosas correctamente.Hoy en día, en ordenador modernos, la posibilidad de que usando memoria dinámicas toques algo fuera de normal Y ocurra un error grave, son bastante pequeñas. Supongo que conocerás de las existencia de los VEH y SEH, que funcionan a más de nivel y previenen de lecturas/escrituras en out of range. Si realmente alguien, usando este tutorial, consigue cargarse su ordenador por mal uso de la memoria, le doy un premio.
No es por tocar algo que haga peligrar el sistema, es por poner cosas que no tocan. Por otro lado VEH y SEH es algo exclusivo de Microsoft y su Windows. Ese es otro punto, alientas al C de Windows como por ejemplo con las macros BYTE, WORD y DWORD (te faltaría la QWORD).El uso de free, sí, es verdad, es un fallo mio no haberlo comentado. Pero bien sabrás que a menos que vayas a hacer un programa muy grande y lo hagas muy mal, no te vas a quedar sin memoria. Como bien he comentado en el tutorial, las declaraciones dinámicas de memoria no deben usarse en exceso, y en todo caso se debe usar memset para resetear memoria que ya no están en uso.
Explicación corta y básica: Memset inicializa una región de memoria al valor que uno quiera, pero eso no significa que libere del heap esa memoria reservada previamente con un malloc. Para liberar realmente el heap y deje de contar esa memoria como ocupada hay que utilizar free dado que C/C++ no tienen recolección de basura. Si no utilizas free lo único que haces es ir llenando el área de heap y perdiendo las referencias a la memoria ocupada y por tanto terminas con pérdida de memoria. Todo esto evidentemente es si no estás implementando tu propia función free, para lo cual tienes que encargarte tú mismo del punto, su referencia, etcétera y para ello entre otras cosas utilizas memset.
Teniendo en cuenta el supuesto nivel introductorio de este tutorial, pues creo que es un fallo bastante gordo, si es que de verdad se pretende enseñar algo útil y no lo primero que se le viene a uno a la cabeza.También sabrás que el tutorial no está acabado, y las struct siquiera he llegado a ellas, normal que no estén definidas =)
Las structs son tipos básicos y deberían estar explicados al principio junto con los enum y demás.Alineación de memoria... Un buen tema, que, sin embargo, no considero que esté al alcance de nadie que fuera a leer este tutorial. Del mismo modo, a no ser que hagas un gran proyecto, no te preocuparás por ello.
¿La alineación de memoria no está al alcance del público al que va dirigido el tutorial pero sí lo está la memoria dinámica (mal explicada)?
Aquí no hablamos de pequeños o grandes proyectos. Aquí hablamos de dar buenas directrices de aprendizaje. Hacer una mezcla de aquí y allá no es útil y termina siendo una pérdida de tiempo.Yo no me preocuparía mucho por los estánderes, un compilador decente no tendrá ningún problema hoy en día. Lo mismo va con las tabulaciones y espacios.
En el tutorial ya se comenta, y a cada persona que postea código para revisar se lo recuerdo, el uso de las tabulaciones para una buena lectura. A menos que se dediquen a ignorar el tutorial por completo, muchas malas costumbres no se pueden coger.
Hombre, está claro, puedes escribir como te dé la gana. Siempre que pongas un punto y coma después de cada instrucción el compilador no tendrá problemas. Pero hay un estándar ISO que se debe respetar y unos estilos de escritura que también deben ser respetados.El punto en que quizás más de acuerdo estoy contigo es en el hecho de enseñar "uso de memoria". Pero, como comento en el tutorial, solo hace falta saber que es un puntero para poder progresar (en TODOS y cada uno de los tutoriales para aprender C, eso es un paso obligatorio). La información adicional que doy sobre memoria no es, evidentemente, obligatoria para progresar en un aprendizaje normal. Pero, yo, por ejemplo, si estuviera siguiendo un tutorial, querría que me dieran cuanta más información posible.
Sí, en todos y cada uno de los tutoriales siempre aparecen los punteros, pero en los buenos no aparecen de este modo. Si tratas de dar toda la información posible entonces ya no es un tutorial introductorio, y como tal, deberías reescribirlo entero de arriba a abajo.Finalmente, tal y como empieza el tutorial "C, como cualquier otro lenguaje de programación no requiere más que tiempo, una cabeza y mucha paciencia", y "Empezar a programar en C puede ser algo muy bueno o muy malo. C es un lenguaje que, si no te lo tomas con calma y te lo relees todo hasta entenderlo, no puedes continuar avanzado, este tutorial está pensado para ir progresando poco a poco", y para acabar "Es decir, empezar con este tutorial sin ánimos, a desganas, o con la creencia de que no aprenderéis nada, será contraproducente".
Efectivamente, se puede aprender C como primer lenguaje pero lo que no se puede hacer es lo descrito aquí.Dicho esto, yo aprendí a programar en VB, luego PHP y luego C. Sin embargo, VB ya no lo utilizo para nada, es más, en VB (que es mucho pero que mucho más fácil que C) es donde se cogen muchas más malas costumbres. En proporción con C, en VB se cogen muchísimas más malas costumbres.
Aquí estás en lo cierto, con VB se cogen muy malas costumbres y lo recomendable suele ser olvidarlo bien, exactamente igual que éste tutorial.En fin, muchas gracias por la opinión, pero espero comprendas que el estilo y "programa" del tutorial no va a variar.
Salu2!
No es mi opinión. Simple y llanamente el tutorial que has escrito no es buena idea seguirlo.
Un saludo.
Pero mejor empezar aprendiendo bien que mal, y precisamente como se va a aprender más lo aquí explicado se puede obviar completamente y buscas algo donde se expliquen las cosas correctamente.
No es por tocar algo que haga peligrar el sistema, es por poner cosas que no tocan. Por otro lado VEH y SEH es algo exclusivo de Microsoft y su Windows. Ese es otro punto, alientas al C de Windows como por ejemplo con las macros BYTE, WORD y DWORD (te faltaría la QWORD).
Explicación corta y básica: Memset inicializa una región de memoria al valor que uno quiera, pero eso no significa que libere del heap esa memoria reservada previamente con un malloc. Para liberar realmente el heap y deje de contar esa memoria como ocupada hay que utilizar free dado que C/C++ no tienen recolección de basura. Si no utilizas free lo único que haces es ir llenando el área de heap y perdiendo las referencias a la memoria ocupada y por tanto terminas con pérdida de memoria. Todo esto evidentemente es si no estás implementando tu propia función free, para lo cual tienes que encargarte tú mismo del punto, su referencia, etcétera y para ello entre otras cosas utilizas memset.
No es mi opinión. Simple y llanamente el tutorial que has escrito no es buena idea seguirlo.
blipi escribió:Sí, si ya te digo, es mucho mejor aprender bien de buenas a primeras. Pero, este tutorial ha sido escrito a partir de mi experiencia, y como tal, es imperfecto. Ahora bien, las explicaciones no son del tipo teóricas tostón, lo hago de forma entretenida (o lo intento al menos), clara y concisa.
También ten en cuanta que esto lo escribo sobre la marcha, es decir, no me preparo el texto y luego voy a escribirlo.
Pero poner cosas que no tocan, como mucho obtendrás un error, así que tampoco lo veo tan mal.
En lo del SEH y VEH me has pillado =P Pero bueno, siempre tienes los try, catch (en C++), y en unix/linux, sinceramente, no lo se.
Bueno, el tema BYTE y tal, si que es verdad que es propio de windows. Pero habrás visto que defino bien de donde sale, así que en principio, no debería causar muchos problemas.
QWORD no viene definido por defecto en la mayoría de cabeceras de win, por lo que sería necesario un typedef. (typedef unsigned long long QWORD, o si lo prefieres "orientado" a unix, typedef unsigned __int64 QWORD)
Error mio, me explique mal. Me refería a usar memset para evitar reservar más memoria y reutilizar la que ya no tenga uso. Evidentemente, es necesario un free para liberar la heap cuando terminas de usarla.
Temas struct, aun y declrarse como una variable más, no le encuentro sentido a explicarlo junto a los tipos de datos. Lo veo más lógico y simple explicarlo aparte, igual que enums y unions.
Perdón por escribir este tutorial. (Entiende por favor que frases radicales como estas (la tuya y mi respuesta) no tienen mucho sentido).
int main() {
int i;
for (i=0; i<10; i++) {
printf("%i", i);
}
return 0;
}
int main() {
int i;
for (i=0; i<10; i++) {
printf("%i", i);
fflush(stdout);
sleep(1); // En segundos
}
return 0;
}
xXDraklordXx escribió:Bien, tengo una duda, ¿como puedo hacer que en un bucle (for o while) cada ejecución se retrase, por ejemplo, un segundo?
Por ejemplo:int main() {
int i;
for (i=0; i<10; i++) {
printf("%i", i);
}
return 0;
}
¿Como hacer para que ese bucle for muestre cada incremento de i en intervalos de un segundo?
Esa es mi duda y no consigo solucionarla por mas que leo.
Edit: Ya lo aclaré aunque no lo entiendo. ¿Alguien me lo explica?. La solución es:int main() {
int i;
for (i=0; i<10; i++) {
printf("%i", i);
fflush(stdout);
sleep(1); // En segundos
}
return 0;
}
xXDraklordXx escribió:Si, se como funciona, por eso mi duda. Con un simple sleep(1) no reacciona, es necesario limpiar el buffer de salida - fflush(stdout) - para que funciona y eso es lo que no entiendo.
#include <stdio.h>
#include <windows.h>
int main() {
int i;
for (i=0; i<=10; i++) {
printf("%i", i);
//fflush(stdout);
Sleep(1000); // En mili segundos
}
return 0;
}