Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - leosansan

#821
Cita de: Wofo en 10 Mayo 2013, 17:35 PM
Si te interesa lo de los vectores dinámicos seguro que querrás revisar la clase "vector" que trae C++ (si buscas en Google encontrarás muchísimos recursos y ejemplos). Es impresionante lo mucho que simplifica las cosas y lo fácil de usar.

Siempre está la alternativa de hacerlo "a mano" usando el operador new, pero no vale la pena estar reinventando la rueda cada vez.
..................................................

Creo que no has leido bien el método que proponía ThePinkPanther, era precisamente con "new". Tal vez lo único que le falto fue el borrado de los vectores, algo como esto:

Código (cpp) [Seleccionar]
Escalar::~Escalar()
{
  if (S != 0){
     delete[] vectorV;
     delete[] vectorW;
  }
}


Saluditos!. .....  
#822
Cita de: ThePinkPanther en 10 Mayo 2013, 08:57 AM
Tal cual, o dimensionas los vectores de entrada como explica leo , o usas asignación de memoria, en este caso recomiendo asignación dinámica de memoria porque a priori no se sabe cuando datos va a ingresar el usuario al arreglo, y tampoco da para sobre-dimensionar el vector y no usar toda la memoria.

Me parece que si , se confundió tu profe.xD

Sí y no. Como indica andrex.125 el código de la profe va bien, sin dimensionar ni asignar memoria dinámica. ¿Por qué en el de ella sí y en el tuyo no?.. Pues por un simple cambio en los datos. Si pones:

Código (cpp) [Seleccionar]
class Escalar
{
private:
int S;
double vectorV[];
               double vectorW[];


fíjate que "int S" va antes de los double, podrás entrar todas las componentes de los vectores, tal como pudo hacer tu profe con la entrada de notas.

...Pero....sí, hay un pero . Ella sólo manejaba un array y tú dos. Y ocurre lo que ocurre, como no se ha "reservado" direcciones de memoria para cada uno, resulta que entras los datos de V, bien, entras los datos de W y "fatal", estos últimos sobrescriben los datos de V -al no haber hecho reserva de memoria el programa usa las mismas para ambos y los segundos datos de W sobrescriben los de V- y el resultado que obtienes es el producto escalar de W por W ¡ ¡ ¡ ¡, eso en el mejor de los casos, haz la prueba con el cambio de orden que te indique más arriba, te dejo una salida:

Código (cpp) [Seleccionar]
Digite el tama±o de los vectores: 3
digite el valor del vector V en la posicion 1 : 0
digite el valor del vector V en la posicion 2 : 0
digite el valor del vector V en la posicion 3 : 0
digite el valor del vector W en la posicion 1 : 1
digite el valor del vector W en la posicion 2 : 2
digite el valor del vector W en la posicion 3 : 3

1 : 1
2 : 4
3 : 9
14


Conclusión: o predimensionas como te indiqué yo o mejor aún asiganción dinámica de memoria como te indicó ThePinkPanther

De todas formas hay "detallitos" que "cantan" en cuanto al manejo del lenguaje, al menos para mí esto de tu profe:


Código (cpp) [Seleccionar]
prom=prom+notas[i];
     }
    prom=prom/cantidadEst;


hace que me  duelan los ojos, mejor visto estaría:

Código (cpp) [Seleccionar]
prom+=notas[i];
     }
    prom/=cantidadEst;


aunque reconozco que puede resultar que a otros les guste más la forma de tu profe..........

Saluditos!. .....  
#823
Tienes que inicializar la dimensión de los vectores a algún valor igual o superior al que vayas a utilizar, por ejemplo:

Código (cpp) [Seleccionar]
class Escalar
{
private:
double vectorV[10];
double vectorW[10];
int S;


Ya luego le das la dimensión correcta, por ejemplo tres y a mí me sale esto:

Código (cpp) [Seleccionar]
Digite el tama±o de los vectores: 3
S= 3
digite el valor del vector V en la posicion 0 : 1
digite el valor del vector W en la posicion 0 : 0
digite el valor del vector V en la posicion 1 : 1
digite el valor del vector W en la posicion 1 : 2
digite el valor del vector V en la posicion 2 : 2
digite el valor del vector W en la posicion 2 : 3
8


Saluditos!. ...  
#824
Cita de: cypascal en  9 Mayo 2013, 20:46 PM
Si, estaría bien crear una R.A.X (Por sus siglas en Choni: Real Academiaaa del Xoniii) encargada de normalizarlo, jajaja


Muy "güeno", muy "güeno"....



Me parece estar viendo la imagen del clásico choni por Las Canteras o la Playa del Inglés con bañador de nadador pequeño para su talla marcando paquete y con el paquetillo de tabaco a un lado del susodicho bañador.........

Saluditos!. ..... .

......P.D: ¿Se habrá notado mussscho que soy canarión? ...

...y alguien más porque eso de "choni" suena muy canario.....
#825
Cita de: amchacon en  9 Mayo 2013, 14:59 PM
Tal como suena, busco alguna manera de detectar el idioma que usa el usuario... Tanto en Windows como en Linux.

Creo que te podría servir, aunque admite otras opciones en cuanto a país e idioma:

Código (cpp) [Seleccionar]
#include <windows.h>
#include <stdio.h>
#include<locale.h>
int main()
{
   setlocale(LC_ALL, "Spanish");
   char idioma[30]={0},idioma2[10],pais[30];
   GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SENGCOUNTRY , pais,
   sizeof(pais));
   printf( "Usted vive en %s\n",pais );
   GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SNATIVELANGNAME  , idioma,
   sizeof(idioma));
   GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVCTRYNAME  , idioma2,
   sizeof(idioma2));
   printf( "Y su idioma es %s  %s",idioma,idioma2 );
   return 0;
}


Saluditos!. ....  
#826
Tienes un error en

Código (cpp) [Seleccionar]
scanf("&d", &ANM);

que debería ser

Código (cpp) [Seleccionar]
scanf("%d", &ANM);

Además del uso innecesario y no conveniente de la librería conio, como ya te han indicado en el enlace de nicolas_cof.

Además la variable TT has de inicializarla a cero y mejor no usar goto, hay otras opciones menos impredecibles:


Código (cpp) [Seleccionar]
#include<stdio.h>
#include<locale.h>
int main()
{
     setlocale(LC_ALL, "Spanish");
     int TT=0,SB,ANM,canti,cost,z,salir;
     do {
         printf(" \n Ingrese la clave correcta por favor \n");
        scanf("%d", &z);
         } while (z != 123);
     while (1){
       do {
       printf("\n ¿Qué desea ordenar? \n (Vacas=1, Dinosaurios=2, Pavos=3) \n");
     scanf("%d", &ANM);
     if (ANM==1)
       cost=200;
     else if (ANM==2)
       cost=600;
     else  if (ANM==3)
       cost=100;
     else printf("\n\nIngrese 1, 2 o 3\n");
     }while (ANM<1 || ANM>3);
     printf("\n ¿Qué cantidad desea ordenar? \n");
     scanf("%d", &canti);
     SB=canti*cost;
     TT+=SB;
     printf("\n Producto: %d", ANM);
     printf("\n Costo: %d", cost);
     printf("\n Cantidad: %d", canti);
     printf("\n Subtotal: %d", SB);
     printf("\n ¿Desea ordenar algo mas? \n (si != 0, no=0) \n");
     scanf("%d", &salir);
     if (salir == 0)
      break;
   }
      printf("Su total es: %d", TT);
      return 0;
}


Y he aquí una salida del código:

Código (cpp) [Seleccionar]


Ingrese la clave correcta por favor
123

¿Qué desea ordenar?
(Vacas=1, Dinosaurios=2, Pavos=3)
6


Ingrese 1, 2 o 3

¿Qué desea ordenar?
(Vacas=1, Dinosaurios=2, Pavos=3)
1

¿Qué cantidad desea ordenar?
3

Producto: 1
Costo: 200
Cantidad: 3
Subtotal: 600
¿Desea ordenar algo mas?
(si != 0, no=0)
1

¿Qué desea ordenar?
(Vacas=1, Dinosaurios=2, Pavos=3)
2

¿Qué cantidad desea ordenar?
4

Producto: 2
Costo: 600
Cantidad: 4
Subtotal: 2400
¿Desea ordenar algo mas?
(si != 0, no=0)
0
Su total es: 3000


Saluditos!. ....  

P.D: El uso de la librería locate y lo de spanish es para usar el teclado con caracteres en español, acentos y signos como ¿, si no te salen símbolos "raros".
#827
Con las correciones del -1./2 que te han indicado la salida sería algo como esto:

Código (cpp) [Seleccionar]


Ingrese el valor de X: 3
debe ingresar un valor menor a 1 y diferente de -1/2
Ingrese el valor de X: -0.5

El valor de la funcion es de -5.51


Cuando creo debería ser :

Código (cpp) [Seleccionar]


Ingrese el valor de X: -0.5
debe ingresar un valor menor a 1 y diferente de -1/2
Ingrese el valor de X: 0.3

El valor de la funcion es de -3.82



Y eso es porque en el if y en el while debe ir "valor==(-1./2)".

Otro dato a tener en cuenta que al poner la condición de que valor ha de ser menor que 1 valdrían los números negativos, pero estos sólo te dan un resultado correcto si son valores enteros y no decimales:

Código (cpp) [Seleccionar]


Ingrese el valor de X: -2


El valor de la funcion es de -10.35


Pero:

Código (cpp) [Seleccionar]


Ingrese el valor de X: -0.3

El valor de la funcion es de -1.#J



Saluditos!. ....  
#828
Cita de: carrlos en  7 Mayo 2013, 16:54 PM
weno no c yo lo q mas e calculado que si suma multiplicacion y resta pero desde que sali de barhirller no e calculado el area de nada y no m acuerdo

Esto es para cypascal , por qué no te animas a hacer un "deschonificador". :laugh:

Saluditos!. .... 
#829
Cita de: amchacon en  8 Mayo 2013, 21:08 PM
Creo que querías decir "desacuerdo"

Puedes sustituir getch por getchar(), asi no tendrás que usar la librería conio (solo funciona en Windows, es una buena costumbre hacer las cosas multiplataforma).

Desacuerdo total, gracias por la precisión, reeditaré el post para que no queden dudas.

Saluditos!. ....
#830
Cita de: pacoperico en  8 Mayo 2013, 19:05 PM
Has de vaciar el buffer del stdin despues de usar scanf() en la definicion de tu funcion int menu(void). La forma mas sencilla es añadiendo esta linea justo despues del scanf():

Código (cpp) [Seleccionar]
while(getchar()!='\n');

...............

Como comenté en el post anterior, en este caso concreto en que sólo se pueda quedar en el buffer es el \n, dejar el espacio en blanco antes del scanf me parece la opción más eficiente y breve. Otra cosa es que quedara resto de una cadena o algo así.

Por lo demás muy de acuerdo en el no uso  de la librería conio y , como digo yo, sus acólitos getch y compañía.

Un fuerte Saludo pacoperico.


P.D: Otra cosa a mejorar es el de opción, ya que si le entran una letra en lugar de un 1 o 2 se quedará en el sitio.