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

#1151
El ingles es muy importante para aprender un lenguaje de programación como C o C++, aunque no te guste mucho deberías aprenderlo. El error esta en las lineas:
Código (cpp) [Seleccionar]
for (i=0; i<16; i++)
  { if (a[i]>may)
    {may=a; // <==
     ly='i';}

      if(a[i]<men)
      {men=a; // <==
       lm='i';}
   }

Y se debe a la falta del operador "[]" y el indice del elemento (debería ser "a[ i ]").

En ese mismo fragmento utilizas 'i' (que es un carácter) cuando deberías utilizar i.

Y cuando declaras un array indicas el numero de elementos:
Código (cpp) [Seleccionar]
int may,men,a[15],ly,lm,i;
Y accedes a ellos mediante los indices 0 .. N-1 donde N es el numero de elementos en el array. En otras palabras para un array de 15 elementos sus indices validos van de 0 hasta 14.

Por ultimo te recomiendo que leas el tema |Lo que no hay que hacer en C/C++. Nivel basico|

Un saludo
#1152
Programación C/C++ / Re: Leer un char como float
24 Octubre 2012, 03:30 AM
No puedes hacerlo directamente con una secuencia de sentencias como esta:
Código (cpp) [Seleccionar]
float m;
cin >> m;


En su lugar debes leer una linea de texto y verificar si contiene la palabra "Ms", un numero de punto flotante o algo mas, continuas dependiendo del caso.

Eso se puede hacer de varias formas, por ejemplo utilizando las clases "string" e "istringstream":
Código (cpp) [Seleccionar]

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::getline;

#include <string>
using std::string;

#include <sstream>
using std::istringstream;

int main()
{
   double val;
   bool ok;
   
   do {
      ok = true;
     
      cout << "Indica el valor: ";
      string linea;
      getline(cin, linea);
     
      if (linea == "Ms")
         val = 1.9891e30;
      else {
         istringstream ss(linea);
         if (!(ss >> val)){
            cout << "Entrada no valida!" << endl;
            ok = false;
         }
      }
   }while (!ok);
   
   cout << "El valor es " << val << endl;
   
   return 0;
}


Un saludo
#1153
Cita de: Caster en 23 Octubre 2012, 19:43 PMalgun programa para que pueda practicar yo lo que llevo aprendido hasta ahora (bucles, estructuras de control, funciones y poquito mas)
Si necesitas ejercicios puedes realizar los listados en el libro "K&R2" y a continuación (para practicar con punteros) realizar los incluidos en los cursos de la Stanford CS Education Library (por desgracia en ingles) sobre listas vinculadas y arboles binarios (soluciones incluidas).

Un saludo
#1154
Cita de: satu en 23 Octubre 2012, 18:58 PMPuedes hacer algo como esto:
char opcion;
......
opcion = getchar();
while(getchar() != '\n') ;
switch(opcion)
............


Creo que debería funcionar.
Funciona pero hay que cambiar el tipo de la variable "opcion" a "int" ya que ese es el tipo de retorno de la función "getchar".

Otra forma es mediante "scanf":
char ch;

/* ... */

scanf(" %c%*[^\n]%*c", &ch);

Ahí cadena de formato indica:
1) " " leer y descartar el espacio blanco al inicio de la linea.
2) "%c" leer un carácter y almacenarlo en la variable "ch".
3) "%*[^\n]" leer y descartar todo carácter distinto de '\n'.
4) "%*c" leer y descartar un carácter (el '\n').

Un saludo
#1155
Para acceder a un elemento de un array debes utilizar corchetes, por ejemplo:
Código (cpp) [Seleccionar]
if (a[i] < 0){
   a[i] = a[i] * a[i];
   cn = cn + 1;
}

Al utilizar los paréntesis, que son para una llamada a función, se genera el error que mencionas.

El resto del programa no lo revise.

Un saludo
#1156
Ese es el numero mínimo de bits pero nada impide (como es tu caso) que su numero sea mayor. Caso similar es el numero de bits por carácter, su mínimo es ocho pero es posible que sean mas, en caso de duda se puede utilizar la macro CHAR_BIT (su definición se encuentra en <limits.h>).

Un saludo
#1157
Solo agregar que la función "toascii" no es parte de la biblioteca estándar de C.

Un saludo
#1158
El desplazamiento dentro del byte depende de como lo interpretes lo usual es no hacerlo. Esa función se puede acortar un poco. Por ejemplo:
#include <stdio.h>
#include <stdlib.h> /* div_t, div */
#include <limits.h> /* CHAR_BIT */

_Bool bit(unsigned char *a, int pos);

int main(void)
{
   unsigned char test = 131;
   int i;
   
   for (i = CHAR_BIT - 1; i >= 0; i--)
      printf("%2d", i);
   putchar('\n');
   for (i = CHAR_BIT - 1; i >= 0; i--)
      printf("%2d", bit(&test, i));
   putchar('\n');
   
   return EXIT_SUCCESS;
}

_Bool bit(unsigned char *a, int pos)
{
   div_t d = div(pos, CHAR_BIT); /* .quot = byte, .rem = bit */
   
   return a[d.quot] >> d.rem & 1;
}


Y su salida (con lo usual, ocho bits por byte) es:
7 6 5 4 3 2 1 0
1 0 0 0 0 0 1 1


Otra opción es utilizar directamente los operadores de división y modulo.

Un saludo
#1159
Programación C/C++ / Re: Instruccion if
22 Octubre 2012, 17:48 PM
Cita de: Mari2012 en 22 Octubre 2012, 17:44 PMcopile tu codigo y en la linea 9, me indica error esto es lo que dice:
invalid conversion from `void*' to `int*'

p[i] = malloc(sizeof *p[i]);

En esta linea me indica error, lo copile con dev-c++
Si lo compilas como C no debe generar ningún error.

Si, por alguna extraña razón, lo compilas como C++ se genera el mensaje de error que mencionas.

Un saludo
#1160
Programación C/C++ / Re: Instruccion if
22 Octubre 2012, 17:00 PM
El problema principal es: antes de utilizar un puntero debes asignarle una dirección de memoria valida. Como utilizas un array de punteros debes hacerlo por cada uno de sus elementos.

Lo usual es reservar memoria mediante malloc/calloc/realloc, supongo eso ya lo viste en clase. El programa con las correcciones:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int *p[10];
   
   for (int i = 0; i < 10; i++)
      p[i] = malloc(sizeof *p[i]);
   
   for (int i = 0; i < 10; i++){
      printf("Ingrese valor de array[%d]:\n", i);
      scanf("%d", *(p + i));
   }
   
   int may = *p[0];
   int pos = 0;
   for (int i = 1; i < 10; i++)
      if (**(p + i) > may){
         may = **(p + i);
         pos = i;
      }
   
   for (int i = 0; i < 10; i++)
      printf("Valor en array[%d] = %d\n", i, **(p + i));
   printf("El mayor es: %d, en la pos %d\n", may, pos);
   
   for (int i = 0; i < 10; i++)
      free(p[i]);
   
   return 0;
}


Un saludo