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

#11
Te di la razón antes :P

Ahora lo que no tengo claro es que tú pides el tamaño del array al usuario... y, ¿reservamos la memoria estática en tiempo de ejecución? Supongo que será posible...
#12
Porque C permite declarar cualquier elemento en cualquier lugar :P

Si no también se podría haber usado memoria dinámica (aunque ocupe más memoria por cada componente).
#13
Gracias por tus aclaraciones y en este caso el ciclo do while era más apropiado.

De todas formas fíjate que al cambiar de ciclo su lógica también cambia:

#include <stdio.h>
#define SIZE 1000

int main (int argc, char **argv)
{
    int lista[SIZE];
    char N[5]="";
    int i,I;

    do
    {
        while (getchar() != '\n' && getchar() != EOF);
        printf("Cantidad de elementos: ");
        fgets(N,5*sizeof(char),stdin);

    } while (((I = atoi(N)) < 1 ) || (I > 1000));

    for(i=0; i<I; i++)
    {
        printf("Elemento %d: ", i);
        scanf("%d", &lista[i]);
    }
    return 0;
}


Pedir número mientras que I sea menor que 1 o que I sea mayor que 1000.

Por otra parte, con el getchar() para salto de línea y final de archivo no lee bien la entrada ._. Será que no lo sé usar :P
#14
A ver, en C y parecidos. Usar un for, while o do while es prácticamente lo mismo. Aunque, teóricamente, usaremos un for cuando haya unos límites fijos (punto de partida y punto de salida). Usaremos un ciclo do while, cuando desconozcamos alguno de los límites del recorrido y además sepamos que el ciclo se va a ejecutar como mínimo una vez. Usaremos el ciclo while en cualquier otro caso.

En este caso, teóricamente lo correcto sería usar un for porque conocemos los límites: 1..I, donde I es introducido por el usuario.

#include <stdio.h>
#define SIZE 1000

int main (int argc, char **argv) {
   int lista[SIZE];
   char N[5]="";
   int i,I;
   while (1) {
       fflush(stdin);
       printf("Cantidad de elementos: ");
       fgets(N,5*sizeof(char),stdin);
       if (((I = atoi(N)) >= 1 ) && (I <= 1000)) break;
   }
   for(i=0; i<I; i++) {
       printf("Elemento %d: ", i);
       scanf("%d", &lista[i]); // para simplificar
   }
   return 0;
}


Espero que este código te sirva de ejemplo. Los usuarios de este foro (incluyéndome a mí) rara vez facilitan tanto las cosas. Trata de comprender el código y si tienes alguna duda, tan sólo pregunta.

Ten claro que si no programas tú mismo, jamás aprenderás.

"La práctica hace al maestro."
#15
Para recoger la hora actual del sistema en microsegundos en C...

double microsegundos() {
struct timeval t;
if (gettimeofday(&t, NULL) < 0 )
return 0.0;
return (t.tv_usec + t.tv_sec * 1000000.0);
}


Ya sabrás tú medir los tiempos :P
#16
Java / Re: Varias dudas java , nivel intermedio
15 Febrero 2013, 17:26 PM
Cita de: r7pyrred en 15 Febrero 2013, 16:35 PM
java es un lenguaje POO así que tiene types y miembros
quería saber cuales son los types , gracias por tu respuesta sapito
podríais dar mas detalles sobre instanceof ,creo que lo entiendo aunque no muy
claro ,gracias estoy aprendiendo java a fondo si molesto en algun futuro post
me lo dicen

Hay tipos básicos (int, char...) y sus análogos como objetos (Integer, Char...)
Con miembros creo que te refieres a los atributos de los objetos que pueden ser tipos básicos, objetos... etc etc.

instanceof sirve para saber si un objeto X es una instancia (un ejemplo) de un objeto Y.

Cuando hacemos un new, lo que hacemos es instanciar (ejemplificar) un objeto de una clase, el cual es referido internamente a través de una dirección de memoria.

(El tamaño en memoria del objeto depende de la complejidad del mismo.)

Un ejemplo rápido (tengo clase ahora, luego lo mejoro xD) sería el siguiente.

Código (java) [Seleccionar]
public class Persona (
// Implementación
)

public class Profesor extends Persona (
// Hereda Persona
// Implementación Profesor
)

public class Alumno extends Persona(
// Hereda Persona
// Implementación Alumno
)

public class Main (String argv[]) {
Persona p = new Persona();
Alumno a = new Alumno();
if (p instanceof Persona) {
System.out.println("p ejemplo de Persona");
}
//...
}


Generalmente tiene que ver con el polimorfismo y con las estructuras heterogéneas.
#17
Cita de: rir3760 en 14 Febrero 2013, 02:02 AM

No entiendo el sentido de la cita. ¿Puedes aclararlo por favor?

Un saludo

A mi entender, es que si tienes estructuras o clases básicas (PODS), éstos carecen de inicializadores y, por tanto, el programa está mal formado.
#18
Hay que tener claro que la programación no es sólo escribir código.

Y también hay que tener en cuenta que para programar con cierta rapidez debemos utilizar el ratón lo menos posible.

Un programa que nos puede ayudar en este último punto es Sublime Text 2. Hay una versión trial y una de pago pero para el que realmente se dedica a programar (dependiendo del lenguaje), es una buena opción.

Y centrándonos en C y C++ pues quizá escojo también CodeBlocks :) porque tiene diversas herramientas interesantes.

Por cierto, el VIM puede ser muy útil si tienes un set de herramientas para programar junto a VIM. Recordad que lo mejor es utilizar el ratón el menor tiempo posible :D
#19
Programación C/C++ / Re: Fracciones en C [Ayuda]
13 Febrero 2013, 23:46 PM
Generalmente para trabajar con un cierto tidpo de dato que no existe predefinidamente en el lenguaje, lo que se hace es crear un TAD (tipo abstracto de datos) que dependiendo del lenguaje se puede implementar de una forma u otra.

Es decir, tener un tipo de dato complejo (formado a partir de tipos de datos simples) que pueda manejarse a través de rutinas para así abstraer el código y restringir el uso de cierto TAD; entre otras características.
#20
Programación C/C++ / Re: Problema básico en C++
13 Febrero 2013, 23:20 PM
Si pensáis un poquitito el código es fácilmente optimizable utilizando un ciclo mientras que en vez de un para.

Imaginemos que queremos comprobar si 100000000000000000000000000000000000000000000000, es primo. No tiene sentido mirar todos los números naturales hasta ese y verificar si son divisores o no.


Código (cpp) [Seleccionar]
// N = número a comprobar si es primo o no
    int k = 1;
    while ((k<N) && (N%(++k) != 0));
    puts(k < N ? "no primo" : "primo");



Que lo queréis aplicar a un array de números... pues añadir un for como ciclo externo para recorrer los elementos como ya habéis hecho. Qué tenéis una estructura árbol, pues recorréis la estructura recursivamente... etc etc xD