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 - ecfisa

#81
Programación C/C++ / Re: RETOS C++
20 Septiembre 2012, 20:20 PM
Hola Stakewinner00.

Citarteoricamente era de c++ pero bueno si peudes hazlo con c++
Si... me había percatado de la confusión (C++) ya estaba agregando el código.

Citarademas da error
En realidad es una advertencia, la inclusión de '&' fue un despiste mío :(, la línea debería ser:
fgets(frase,100,stdin);

Un Saludo. ::)
#82
Programación C/C++ / Re: RETOS C++
20 Septiembre 2012, 19:59 PM
Hola.

Yo voy por el más fácil: El 1  ::)

#include <stdio.h>
#include <ctype.h>

int main(int argc, char* argv[]) {
 char frase[100];
 int i=0;
 const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
                        "seis","siete","ocho","nueve" };
 printf("Frase: ");
 fgets(&frase,100,stdin);

 while (frase[i]) {
   if (isdigit(frase[i]))
     printf("%s ",num[frase[i]-48]);
   i++;
 }

 getchar();
 return 0;
}


Edito: Disculpas, no reparé que era C++ :-(

Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main(int argc, char* argv[]) {
 char frase[100];
 int i=0;
 const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
                        "seis","siete","ocho","nueve" };
 cout << "Frase: ";
 cin >> frase;

 while (frase[i]) {
   if (isdigit(frase[i]))
     cout << num[frase[i]-48] << " ";
   i++;
 }

 while(cin.get()!='\n');
 cin.get();
 return 0;
}




Saludos.
#83
Programación C/C++ / Re: Duda con este codigo...
20 Septiembre 2012, 18:20 PM
Citarpara que sirve la siguiente linea?
Hola RSA

getchar() espera un caracter de la entrada estandar, en este caso cumple la misma finalidad que system ("PAUSE").


Saludos.
#84
Programación C/C++ / Re: Duda con este codigo...
20 Septiembre 2012, 09:00 AM
Hola RSA.

Necesitas que la variable b tome valores de 1 hasta 10 por cada incremento de la variable a, por lo que vas a necesitar un while anidado para obtenerlos.


#include <stdio.h>

main() {
  int a=1, b;

  while (a < 10) {
    printf("Tabla del %2d \n------------\n",a);
    b = 0;
    while (b++ < 10)
      printf ("%2d x %2d = %2d \n", b, a, a*b);
    printf("\n");
    a++;
  }
  getchar();
  return 0;
}


Saludos.
#85
Hola dabaji.

La media aritmética, aunque puede tomar valores enteros, por lo regular es un número real, la funcion mediana tendría que devolver ese tipo.
La mediana resulta de sumar los elementos de una serie y dividirlos por la cantidad de elementos que la componen.
Entonces tu función debería ser algo como:

Código (cpp) [Seleccionar]

float mediana(int vec[N]) {
  float m=0;
  for(int i=0; i<N; i++) m += vec[i];
  return m/N;
}


Saludos.
#86
Hola SonaArtica.

Yo encararía el problema de otro modo:


#include <stdio.h>
#include <conio.h>

int main() {
  float p_pos=0, p_neg=0, v;
  int n_ceros=0 ,cant, i;

  // pedir cantidad de numeros
  printf("Cantidad de numeros reales (1-12): ");
  scanf("%d", &cant);
  if (cant < 1 || cant > 12) { // si rango invalido => terminar
    printf("Valor fuera de rango");
    getch();
    return 1;                 
  }

  // ingresar elementos
  for (i=0; i < cant; i++) {
    printf("Valor %d: ",i+1);
    scanf("%f", &v);
    if (v == 0)
      n_ceros++;  // sumar ceros
    else if (v > 0)
      p_pos += v; // sumatoria +
    else
      p_neg += v; // sumatoria -
  }

  // calcular promedios
  p_pos /= cant;  // prom +
  p_neg /= cant;  // prom -

  // mostrar
  printf("Promedio positivos :%8.2f\n", p_pos);
  printf("Promedio negativos :%8.2f\n", p_neg);
  printf("Cantidad de ceros  :%8d"  , n_ceros);

  getch();
  return 0;
}


Saludos.
#87
Programación C/C++ / Re: programa confuso
4 Septiembre 2012, 11:02 AM
Hola bytemachine.

Citar¿De casualidad no se puede tomar como para que el usuario introduzca la longitud del array?

Si por supuesto, por ejemplo:

int main() {
 int i,n,*vec;

 printf("Nro de elementos: ");
 scanf("%d",&n);

 vec = (int*)malloc(sizeof(int)*n);

 for(i=0; i<n; i++) vec[i] = i;
 ...

 free(vec);
 return 0;
}


Saludos.

Edito: Me olvide... Aunque no está especificado, seguramente MAX estaría definido de este modo:


...
#define MAX 4
...


A partir de allí MAX tiene el valor 4, es decir que se puede utilizar en lugar de él.
La ventaja de utilizar MAX en lugar de '4', es que basta cambiar el valor en la definición para que afecte a todo el código. De otro modo habría que cambiar cada ocurrencia de '4'.

#88
Programación C/C++ / Re: decimal a octal
31 Agosto 2012, 14:16 PM
Hola fabianjsm.
CitarLa memoria debe ser liberada con free (incluso en C++)
Obviamente, eso está fuera de toda duda. Pero me refería a que no encontre modo de liberar la memoria  no siendo fuera de la función.

Por ejemplo:

...
char *base10basen(int num, unsigned char base) {
 char t1[255],t2[255];
 int mod, i, h=0;
 do {
   mod = num % base;
   num = num / base;
   if (mod < 10)
     t1[h] = (char)mod + '0';
   else
     t1[h] = (char)mod + '7';
   h++;
 } while (num > 0);
 t1[h] = '\0';

 for(i=0; i < h; i++) t2[i] = t1[h-i-1];
 t1[i] = '\0';
 return strdup(t1);
}

int main() {
char *a[10];
 int i;

 for(i=0; i < 10; i++) a[i] = base10basen(i*10,16);
 for(i=0; i < 10; i++) printf("%s\n",a[i]);
 for(i=0; i < 10; i++) free(a[i]);
 ...
}

La memoria se reserva en el heap ya que si se haciera en el stack el valor se perdería al retornar de la función.

Es decir que no encuentro forma de encapsular la reserva/liberación de la memoria dentro de la función, ya que si se libera antes de return es claro que devuelve cualquier cosa y despues de él no tiene efecto...


Saludos.


#89
Programación C/C++ / Re: decimal a octal
30 Agosto 2012, 11:55 AM
Hola fabianjsm.

Entiendo lo que me comentas y llevas toda la razón, ¿ De este modo te parece mas correcto ?


char *base10basen(int num, unsigned char base) {
  char t1[255],t2[255];
  int mod, i, h=0;
  do {
    mod = num % base;
    num = num / base;
    if (mod < 10)
      t1[h] = (char)mod + '0';
    else
      t1[h] = (char)mod + '7';
    h++;
  } while (num > 0);
  t1[h] = '\0';

  for(i=0; i < h; i++) t2[i] = t1[h-i-1];
  t1[i] = '\0';
  return strdup(t1);
}

Pero no veo otra forma que liberar la memoria fuera de la función...

Y si, usando string es muchísimo más simple.

Saludos.


#90
Programación C/C++ / Re: Consulta punteros (C)
29 Agosto 2012, 02:17 AM
Hola rir3760.

Tenes razón.

En realidad debí aclarar: "para este este caso la asignacion... es equivalente a...". Ya que los tipos tipos char, unsigned char y signed char tienen un tamaño de 1 byte. Esto por supuesto no sería válido si fueran tipos de un tamaño mayor.

Saludos.