Ir al contenido

publicidad

Foto

mis dudas en c++


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
100 respuestas en este tema

#61

Escrito 14 diciembre 2008 - 18:01

muy wenas, estube mirando y hay dos tipos, uno es mejor que otro???? o da igual??


Hola.

No creo que debas fijarte ahora si uno es mejor o peor, si el tiempo de procesamiento es mayor o menor…, lo que debes es fijarte si lo entiendes o no. Ya tendrás tiempo de depurar código.

Lee el funcionamiento del Algoritmo de ordenamiento por el método de la Burbuja e intenta hacer tu algoritmo. Escríbelo con tus palabras: SI ocurre esto ENTONCES haré esto, todo-esto lo haré MIENTRAS ocurra-esto-otro, PARA cada valor del vector HARÉ tal cosa... Luego conviértelo a lenguaje C y haz una traza.

No busque en Internet y copies y pegues el código porque te vas a liar. Por ejemplo, ¿entiendes lo que hace el primer programa que has puesto?. ¿Dónde ordena?. ¿Qué es "eso" de intercambia(i, i + 1)?. Has visto ya el pase de parámetros.

Si me lo permites, creo que estás corriendo demasiado y no has profundizado en cosas tan simples (y básicas) como dominar los bucles, tipos de datos, etc. No corras, que no tener una base sólida es un fracaso seguro.

  • davidlie

  • GRANDIS SUPERNUS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 27.060
#62

Escrito 14 diciembre 2008 - 18:19

muy wenas, estube mirando y hay dos tipos, uno es mejor que otro???? o da igual??


Hola.

No creo que debas fijarte ahora si uno es mejor o peor, si el tiempo de procesamiento es mayor o menor…, lo que debes es fijarte si lo entiendes o no. Ya tendrás tiempo de depurar código.

Lee el funcionamiento del Algoritmo de ordenamiento por el método de la Burbuja e intenta hacer tu algoritmo. Escríbelo con tus palabras: SI ocurre esto ENTONCES haré esto, todo-esto lo haré MIENTRAS ocurra-esto-otro, PARA cada valor del vector HARÉ tal cosa... Luego conviértelo a lenguaje C y haz una traza.

No busque en Internet y copies y pegues el código porque te vas a liar. Por ejemplo, ¿entiendes lo que hace el primer programa que has puesto?. ¿Dónde ordena?. ¿Qué es "eso" de intercambia(i, i + 1)?. Has visto ya el pase de parámetros.

Si me lo permites, creo que estás corriendo demasiado y no has profundizado en cosas tan simples (y básicas) como dominar los bucles, tipos de datos, etc. No corras, que no tener una base sólida es un fracaso seguro.

ola, de si ira mejor o peor era simple curiosidad, por que iba a usar el segundo por que no e dado nada de vectores de eso. de momento copiar y pegar códigos solo hacia un poco al principio par aer como funcionaban y tal. estos últimos les e echo yo solo, eso si teniendo como muestra otros ya que hay cosas que se me olvidaban.
pd. de lo que dices que avanzo rápido, tienes razon pero es que no se que programas hacer para practicar con el bucle y todo eso

#63

Escrito 14 diciembre 2008 - 18:53

ola, de si ira mejor o peor era simple curiosidad, por que iba a usar el segundo por que no e dado nada de vectores de eso. de momento copiar y pegar códigos solo hacia un poco al principio par aer como funcionaban y tal. estos últimos les e echo yo solo, eso si teniendo como muestra otros ya que hay cosas que se me olvidaban.

Esto no lo entiendo. ¿Qué vectores?.

pd. de lo que dices que avanzo rápido, tienes razon pero es que no se que programas hacer para practicar con el bucle y todo eso

Respecto a los programas que puedes hacer, no tienen que ser programas muy rebuscados, ni juegos de los que consideramos "simples" (tres o cuatro en raya, hundir la flota, etc.). Puedes hacer cosas muy simples sobre vectores, cadenas o lo que hayas visto hasta la fecha.

Por ejemplo: mostrar por pantalla un vector en el orden en que fue introducido, en orden inverso, mostrando sólo los que ocupan la posición par o impar (o haciendo el salto que quieras), realizar alguna operación aritmética sobre el vector dado un valor que se ha introducido por teclado, sumar (u otra operación) dos vectores, etc. Como verás, son programas sin aparente utilidad, pero te harán coger soltura con los bucles, vectores y la E/S.

  • davidlie

  • GRANDIS SUPERNUS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 27.060
#64

Escrito 14 diciembre 2008 - 19:23

bueno pues una vez termine este (para no dejarlo a medias)are algo de eso que dices.
de momento hice esto pero seguro que esta mal xd es lo primro que se me ocurrio.

[code:1]#include
#include

const int NumMax = 10;
using namespace std;

int main(int argc, char *argv[])
{
int array[NumMax];
float a, contenedor;
cout << "escribe tus 10 cifras, las ordenaremos de mayor a menor y de menor a mayor\n";
for (int i=0; i<10; i++){
cin >> a;
array[i]= a;
}

int j=0;
for (array[j]; j<10; j++){
if ( array[j] {
array[j] = contenedor;
array[j] = array[j+1];
array[j+1] = contenedor;
break;
}
else;
{
break;
}
cout << "esto son tus numeros verdad?\n" < << array[2] << "\n" << array[3] << "\n" << array[4] << "\n" << array[5] << "\n"
<< array[6] << "\n" << array[7] << "\n" << array[8] << "\n" << array[9] << endl;
cout << "tus numeros ordenador de mayor a menor:\n" <
}

system("PAUSE");
return EXIT_SUCCESS;
}
[/code]

-----------------------------------------------------------------------------
Imagen Enviada
un saludo de davidlie
mi nick es davidlie y lie no es porque miento ;-) asi que buscaros otra gracia
merijuego haciendose, comenta aqui!!!
la historia de como me dieron una ostia aqui!!!pag 6 & 8 actualizacion[la volvi a ver]]buen9

#65

Escrito 14 diciembre 2008 - 19:52

Unas cosas que veo a bote pronto (al margen que no muestra ningún resultado por pantalla):

- declaras un vector de enteros pero el valor que pides por teclado es un float. Eso hará que el programa de un error. Mejor decláralo todo como float o todo como int.

- en los bucles FOR, es mejor que utilices la constante global NumMax, ya que si en algún momento tienes que ampliar el vector, sólo hay que cambiar el valor de esa constante y no todos los valores de los bucles.
Es decir, for (int i=0; i<10; i++) --> for (int i=0; i
- for (array[j]; j<10; j++): deberías poner for (j=0; j< NumMax; j++)

- Para mostrar el vector usa esto:
for (int i=0; i cout << array[i] << "Espacio-en-blanco";
}
Así evitas el escribir 10 veces lo mismo. Imagina que el vector es de 100 elementos...

- El bucle de ordenación no funciona y has incluido la línea de mostrar el vector dentro del mismo, con lo cual te lo mostrará n veces.


[code:1]#include
#include

const int NumMax = 10;
using namespace std;

int main(int argc, char *argv[])
{
int array[NumMax];
int a;
cout << "escribe tus 10 cifras, las ordenaremos de mayor a menor y de menor a mayor\n";

for (int i=0; i cin >> a;
array[i]= a;
}

for (int i=0; i cout << array[i] << " ";
}
cout << endl;

system("PAUSE");
return 0;
} [/code]

  • davidlie

  • GRANDIS SUPERNUS

  • vida restante: 100%
  • Registrado: 25 feb 2007
  • Mensajes: 27.060
#66

Escrito 14 diciembre 2008 - 20:01

si respecto a eso me daba warnings xd
cambiare eso del NumMax
ya decia yo que habria alguna forma xd
era logico que estuviera mal :(

-----------------------------------------------------------------------------
Imagen Enviada
un saludo de davidlie
mi nick es davidlie y lie no es porque miento ;-) asi que buscaros otra gracia
merijuego haciendose, comenta aqui!!!
la historia de como me dieron una ostia aqui!!!pag 6 & 8 actualizacion[la volvi a ver]]

    Izargorri

  • EXPULSADO
  • vida restante: 0%
  • Registrado: 29 may 2007
  • Mensajes: 6.390
#67

Escrito 28 diciembre 2008 - 13:09

Buenas, tengo algunas dudas en C++ y queria saber si me podriais ayudar.

Supuestamente he echo un programa para que metiendo dos numeros, me calcule el cociente y el resto de una division pero solo usando restas.

Algunas palabras del programa estan en euskera, Hondarra=Resta y Zatikia=Cociente

Si hay algun fallo grave, me tengo que excusar diciendo que el profesor no nos ha querido explicar nada de C++ y todo lo que se, ha sido aprendiendomelo solo y mirando en internet :D

El problema creo que viene que la repeticion me la hace solo una vez, y no se como escribirlo...

[code:1]#include
#include

int main ()
{
int N, B, Hond, Zatiki;
scanf("%d",&N);
scanf("%d",&B);
Hond=N;
Zatiki=0;
do
{
Hond=Hond-B;
Zatiki=Zatiki+1;
}
while (Hond printf("\n Hondarra da %d, Zatikia da %d",Hond, Zatiki);
getch();
}[/code]

  • Xinef

  • PRAESIDIUM VIGILO

  • vida restante: 100%
  • Registrado: 15 oct 2002
  • Mensajes: 7.003
#68

Escrito 28 diciembre 2008 - 17:46

Buenas, tengo algunas dudas en C++ y queria saber si me podriais ayudar.


Weno, antes de nada... eso no es C++.. es C... :P


Si hay algun fallo grave, me tengo que excusar diciendo que el profesor no nos ha querido explicar nada de C++ y todo lo que se, ha sido aprendiendomelo solo y mirando en internet :D



Te comento el código in-code


[code:1]#include

/*
Deberías evitar usar conio.h, que no es una biblioteca estándar. En vez de eso, usa stdlib.h
#include
*/

int main ()
{
/* Evita ponerle nombres en mayúsculas a las variables. Tampoco uses
Nombres como n, b. Es más fácil y legible que le pongas un nombre
descriptivo... aunque sea en euskera... :P
*/
int N, B, Hond, Zatiki;
scanf("%d",&N);
scanf("%d",&B);
Hond=N;
Zatiki=0;
do
{
Hond=Hond-B;
Zatiki=Zatiki+1;
}

/* El problema lo tienes aquí. El buble se tiene que ir repitiendo mientras
el resto sea mayor o igual que el número por el que estás dividiendo.
*/
while (Hond>=B);

printf("\n Hondarra da %d, Zatikia da %d",Hond, Zatiki);

/* Recuerda que main es una función que devuelve un valor al sistema
operativo, por lo tanto tienes que devolver un valor.
*/

return 0;
}[/code]

#69

Escrito 28 diciembre 2008 - 17:48

[...]
El problema creo que viene que la repeticion me la hace solo una vez, y no se como escribirlo...

Hola.

Cambiando el Do...While por un While y la condición del bucle te debería funcionar.

[code:1]
#include
#include

int main ()
{
int N, B, Hond, Zatiki;
scanf("%d",&N);
scanf("%d",&B);
Hond=N;
Zatiki=0;

while (Hond >= B) {
Hond=Hond-B;
Zatiki=Zatiki+1;
};

printf("\n Hondarra da %d, Zatikia da %d",Hond, Zatiki);
getch();
}[/code]

Y si realmente lo quieres hacer en C++...

[code:1]
#include
#include
using namespace std;

int main () {
int A, B; //Dividendo, Divisor
int resto, cociente=0;

cout << "Introduce el Dividendo: "; cin >> A;
cout << "Introduce el Divisor: "; cin >> B;

resto = A;

while (resto >= B) {
resto = resto - B;
cociente = cociente + 1;
};

cout << "Dividendo: " << A << endl;
cout << "Divisor: " << B << endl;
cout << "Cociente: " << cociente << endl;
cout << "Resto: " << resto << endl;

return 0;
}
[/code]

Siendo puristas deberías sustituir resto = resto - B por resto -=B y cociente = cociente + 1 por cociente++, pero no lo he puesto para no liarte mas de la cuenta.

    Izargorri

  • EXPULSADO
  • vida restante: 0%
  • Registrado: 29 may 2007
  • Mensajes: 6.390
#70

Escrito 28 diciembre 2008 - 18:43

Muchisimas gracias a los dos, me he dado cuenta de que era una tonteria, todo por no saber exactamente lo que era lo de while y ponerlo al reves de lo que yo queria.

Gracias por los consejos tambien, intentare ponerlos en practica. Lo de cociente++ y eso lo pondre tambien a partir de ahora, que venia de hacer ejercicios en pascal y lo solia poner asi en aquel lenguaje.

Y me ha surgido una duda, a ver si me podeis ayudar, resulta que cuando ejecuto el programa escrito en C++ que ha puesto el compañero machakito, me deja introducir los dos numeros y despues se me quita el programa, lo de dejar la pantalla quieta, lo hacia en pascal con un readln; y parece que el getch ( ); hacia lo mismo, ¿Como lo podria hacer ahora?

Saludos

#71

Escrito 28 diciembre 2008 - 19:37

Hola.

Puedes utilizar system("PAUSE"); antes del return 0; o usar el getch(); con el include correspondiente (tal y como habías usado en tu programa original).

    Izargorri

  • EXPULSADO
  • vida restante: 0%
  • Registrado: 29 may 2007
  • Mensajes: 6.390
#72

Escrito 28 diciembre 2008 - 20:25

Muchas gracias por todo :)

  • Psychic5

  • Rey Vendrick

  • vida restante: 100%
  • Registrado: 05 jul 2002
  • Mensajes: 14.504
#73

Escrito 24 febrero 2009 - 02:18

Un tema acerca de la función srand(time(NULL)), que se hace servir para generar números pseudoaleatorios... ¿Es necesario ponerla cada vez que quiera generar un número, o con hacerlo al principio del código basta?

  • gothmog_es

  • Entrenador guay

  • vida restante: 100%
  • Registrado: 01 nov 2002
  • Mensajes: 32.999
#74

Escrito 24 febrero 2009 - 12:42

Los generadores de números aleatorios en realidad no son aleatorios, son funciones algebraicas que crean series de números a partir de un valor semilla.

Si tú llamas a srand(1), te creará una secuencia de números (cada nueva llamada a rand se basa en la anterior). Si vuelves a llamar a srand(1), obtendrás exactamente la misma secuencia.

Dicho esto, hace falta llamarlo siempre? La respuesta es no. Lo importante es el primer valor; el algoritmo ya se encarga de que, a partir de la semilla, la secuencia de llamadas posteriores devuelva números con una distribución, a casi todos los efectos, aleatoria y uniforme.

Si te preocupa que en una misma sesión, la serie se pueda "predecir", lo veo realmente muy difícil.

  • Psychic5

  • Rey Vendrick

  • vida restante: 100%
  • Registrado: 05 jul 2002
  • Mensajes: 14.504
#75

Escrito 24 febrero 2009 - 16:14

No, si que no son realmente aleatorios ya lo sé. El tema está en producir sucesiones que sean casi imposibles de repetir, y eso se consigue al parecer con esa función. Haces depender la semilla del tiempo que marca en ese momento el reloj interno del ordenador...

Vamos, en el BASIC del Amstrad ya se podía hacer eso mismo con randomize time...


Este tema ha sido archivado. Esto significa que no puedes responder en este tema.
publicidad