Una ayudita en C++.

El típico lugar donde abrir hilos que no tienen cabida en otro lugar

Moderadores: SGM, Moderador, GM

Datzu

#16

Vale, vale. Ya veo donde esta el error. Sí, tienes razón debe ir un OR sí o sí.

Avatar de Usuario
robertoccu
VIP
VIP
Mensajes: 11363
Registrado: 30 May 2011, 01:05
Ubicación: Aragón
Nick Minecraft: robertoccu

#17

Pero esto es programación, electronica o Redstone? Quiero interesarme en esto de la programación y al leer OR, AND me ha sonado familiar xD

Avatar de Usuario
BMYGRLFRND
Mensajes: 1161
Registrado: 25 Jun 2011, 23:46

#18

La nomenclatura es igual porque es lo mismo
En la redstone son señales analógicas que generan outputs como tú dices, AND u OR; pues en programación se producen esos mismos procesos pero en lugar de controlarlos de forma física, los controlas según funciones, entre las cuales están AND y OR
AND es la puerta lógica de multiplicación, sólo si hay dos inputs hay output según la tabla: 00=0, 01=10=0 y 11=1
OR es la puerta lógica de suma, sólo hay un output cuando hay un input: 0+0=0, 0+1=1+0=1, 1+1=2 (no existe en binario, por lo que es una función inválida, da 0)
Juntando esas dos a placer y según sus posiciones relativas generas puertas lógicas más complejas como la NAND, NOR o XOR

Es decir, la redstone es programación física (hardware) y el código es programación lógica (software)

PD: Si en algo me he equivocado, perdón y que se me corrija.

Enviado desde mi Sony Ericsson XPERIA Ray con el "Patatal" ;D

Imagen

Datzu

#19

La or sigifinica que cualquier valor a 1, ya sea el 0 y 1, 1 y 0 o 1 y 1 da 1, no 0. No te guíes por sumas y restas, pues en binario no existe el dos, pero si dos dígitos son 1 la salida es 1. Los dos tienen que ser 0 para que te de 0. De cualquier manera, en la programación esto no lo puedes traducir simplemente en 0 y 1, significa que con un or con que cualquiera se cumpla se seguirá cumpliendo la condición general, con el and es más restrictiva, si cualquiera falla la condición general falla y se rompe. Los 0 y  1 son para que se entiendan más fácilmente.

AND= Todos iguales
0 y 0 - 0
0 y 1 - 0
1 y 0 - 0
1 y 1 - 1

OR= Con solo uno activo vale
0 y 0 - 0
0 y 1 - 1
1 y 0 - 1
1 y 1 - 1

XOR= Dos valores distintos da 1
0 y 0 - 0
0 y 1 - 1
1 y 0 - 1
1 y 1 - 0

NAND= Negada del AND
0 y 0 - 1
0 y 1 - 1
1 y 0 - 1
1 y 1 - 0

NOR= Negada del OR
0 y 0 - 1
0 y 1 - 0
1 y 0 - 0
1 y 1 - 0

Última edición por Datzu el 25 Ene 2013, 22:38, editado 1 vez en total.
obv
Superviviente
Superviviente
Mensajes: 1774
Registrado: 12 Abr 2011, 19:55

#20

Ubathfenome escribió:

Pos si, menudo ojo que tienes dbu! :D

Pol favo buxo es el experten del server en esto jeje

obv
Superviviente
Superviviente
Mensajes: 1774
Registrado: 12 Abr 2011, 19:55

#21

Datzu escribió:

Por si alguien tenía curiosidad de lo que era, al final ha salido esto, aunque es una basura por que tiene varios errores que me da pereza solucionar, oye, por algo se empieza, el siguiente será mejor. A ver si aprendo a hacerlo por partes el programa, que aún me lío con los void y el return y todo eso.

https://docs.google.com/file/d/0BwYPyEI ... BqeDA/edit

Aquí os dejo el código fuente por si alguien siente más curiosidad:

Código: Seleccionar todo

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <time.h>

using namespace std;

int i, j, x, mx, my, max_su, max_iz, max_in, max_de, probabilidad, pxt, pyt, inicio_x, inicio_y, final_x, final_y;
char t[2], opt;
char terreno[50][50];
bool evento_activo=true, evento_final=true, ganar=true;
struct personaje
     {
              char nombre[40];
              int vida;
              int karma;
              int evento;
              int personaje_probabilidad;
     };
     
personaje jugador; int main() {        srand (time(NULL));     jugador.karma=0;     do {         //Inicio configuracion personaje         cout<<"====================================\n";         cout<<"Bienvenido aventurero!\n";         cout<<"====================================\n";         cout<<"-Escribe tu nombre: ";         cin.getline(jugador.nombre,40);         cout<<"\n-Elige la difucltad: \n\t1- Facil\n\t2- Normal\n\t3- Dificil";         cout<<"\n-Opcion: ";         cin>>opt;         cin.getline(t,2);         //Inicio configuracion mapa         switch (opt) {                 case '1':                     x=7;                     jugador.personaje_probabilidad=10;                     jugador.vida=10;                     break;                 case '2':                     x=15;                     jugador.personaje_probabilidad=20;                     jugador.vida=7;                     break;                 case '3':                     x=21;                     jugador.personaje_probabilidad=30;                     jugador.vida=5;                     break;         }         jugador.evento=10;         max_su=1;         max_in=x-2;         max_iz=1;         max_de=x-2;         //Fin configuracion mapa         //Fin configuracion personaje         system("cls");     } while(opt<1 && opt>3);     //Fin configuracion personaje     //Creacion de puntos     do {         inicio_x=rand()%x;         inicio_y=rand()%x;     } while ((inicio_x<2 && inicio_x>x-2) || (inicio_y<2 && inicio_x>x-2));     do {         final_x=rand()%x;         final_y=rand()%x;     } while ((final_x<2 && final_x>x-2) || (final_y<2 && final_x>x-2));     mx=inicio_x;     my=inicio_y;     //Fin de creacion de puntos     //Creacion terreno     for (i=0;i<x;i++) {         for (j=0;j<x;j++) {             if (i==0 || i==x-1 || j==0 || j==x-1) {                     terreno[i][j]='M';             } else if (inicio_x==i && inicio_y==j) {                     terreno[i][j]='I';             } else if (final_x==i && final_y==j) {                     terreno[i][j]='F';             } else {                     terreno[i][j]=' ';             }         }     }     //Fin creacion terreno     do {         //Inicio interfaz parte arriba         system("cls");         cout<<"========================================\nPersonaje: "<<jugador.nombre;         cout<<" || Vidas restantes: "<<jugador.vida<<"\n========================================\n";         //Fin interfaz parte arriba         //Inicio         cout<<"\n\n==== Mapa ====\n\n";         evento_activo=false;         for (i=0;i<x;i++) {             for (j=0;j<x;j++) {                 if (i==mx && j==my) {                       probabilidad=rand()%101;                       if (probabilidad<jugador.personaje_probabilidad) {                             cout<<"E";                             evento_activo=true;                             pxt=i;                             pyt=j;                       } else {                             cout<<"X";                             pxt=i;                             pyt=j;                       }                 } else if (mx==final_x && my==final_y) {                         ganar==false;                         break;                 } else {                   cout<<terreno[i][j];                 }             }             cout<<"\n";         }         //Inicio de posible evento         if (evento_activo==true) {             cout<<"\n\n==== Perdiste una vida ====";             jugador.vida--;         }         //Fin de posible evento         //Inicio del movimiento del jugador         opt=getch();         switch (opt) {                 case 'a':                     if (max_iz==my) {                         break;                     } else {                         my--;                         break;                     }                 case 's':                     if (max_in==mx) {                         break;                     } else {                         mx++;                         break;                     }                 case 'd':                     if (max_de==my) {                         break;                     } else {                         my++;                         break;                     }                 case 'w':                     if (max_su==mx) {                         break;                     } else {                         mx--;                         break;                     }         }         //Fin del movimiento del jugador         //Fin         if (mx==final_x && my==final_y) {               ganar==false;               system("cls");               cout<<"\n\n\n\n\n\n\t\t==== Has ganado ====";               getch();               break;         }     } while(jugador.vida>0 && ganar==true);     if (jugador.vida==0) {             system("cls");             cout<<"\n\n\n\n\n\n\t\t==== Has perdido ====";             getch();     } }

esto que curso estas haciendo...?

planeas un minecraft 3.0 jejej

por cierto ya era hora un post "INTERESANTE" en temas programativos.

Por cierto; una seccion en questiones tecnicas de estas no estaria de mas, o quien sabe crear algo entre varios aunque sea modo texto y chusquero... lo interesante esta en codigo jejej

Última edición por obv el 27 Ene 2013, 12:41, editado 1 vez en total.
obv
Superviviente
Superviviente
Mensajes: 1774
Registrado: 12 Abr 2011, 19:55

#22

Aqui un algoritmo que me gusta

while (consciente) {
  toma_un_sorbo("te verde");
  if (bajo_de_pilas || triste) {
      haz_deporte(); // sin excusas
  } else {
      if (esta_claro(el_siguiente_paso)) {
        el_siguiente_paso = ejecuta(el_siguiente_paso);
      } else {
        el_siguiente_paso = planifica();
      }
  }
}

obv
Superviviente
Superviviente
Mensajes: 1774
Registrado: 12 Abr 2011, 19:55

#23

ahora os pongo uno que puse yo en un foro para posible ayuda y que nadie me respondio  ma o menos a ver si me dais alguna idea.

PD: ante todo no llego a tu nivel datzu jaja al nivel de buxo ya ni lo menciono seria un insulto y las comparaciones odiosas jajaj

La pregunta es: <¿Que imprime? hay errores? si hay errores son de ejecucioon o de compilacion? (no se vale usar algun tipo de ayuda en el editor de texto)

public class test5 {
  public static void main (String[] args) {
  int numero = 100;
  if (numero >= 100){
      int arreglo[] = new int[]{10, 20, 30, 40, 50, 70, 80, 90, 100, 90,
                                            numero = ((numero != 100) ? 0 : 999999),
                                            numero = 10, 200, 300, 400
                                          }

  /** IMPRIMIENDO EL VALOR DE NUMERO /
  /* System.out.println ("imprimiendo el valor de numero: " + numero);/;
  /
/

  for(int i = 0; i <= 10; i++)
    numero = i;
    imprimeValor( String.valueOf(arreglo[numero]) );
  }
}

public static void imprimeValor(String valor){
  if(valor != null)
  System.out.println (valor);
  }
}

Mi experiencia con este codigo:

0) no tenia constancia que se pudiesen definir arrays de la siguiente manera y no acabo
de entender:
int arreglo[] = new int[] (exp, exp,....)

y sin poner al final el punto y coma ";"

yo tenia constancia de lo siguiente:
int arreglo[] = new int[cant];
int arreglo[] = {dato, dato,...};
int[] arreglo = new int[cant];
int[] arreglo = {dato, dato,...};

1) no sabia que dentro de los arrays se pueden poner expresiones
ejemplo la expresion del operdor ternario.
numero = ((numero != 100) ? 0 : 999999)

2) no acabo de pillar cuando pone
numero = 10, 200, 300, 400
una variable definida tipo int cabe dentro de ella un array?

3) el trozo de comentario no lo acabo de pillar (me imagino que sea para despistar)

4) empleando netbeans, este no se queja (no da error) y encima como resultado da 99999

5) si el haces lo siguiente:
  for(int i = 0; i <= 10; i++) {
      numero = i;
      imprimeValor( String.valueOf(arreglo[numero]) );
  }
}

he puesto dos parentesis mas entonces lista de 10 hasta 99999
pero si cambio el i<=10 por i i<=15 lista hasta los valores 10, 200, 300, 400

6) si os fijais dentro del if hay el for y observamos que no se queja el netbeans al encontrar el array (tendria que dar error por faltar el ; pero no se queja porque hay el for y llama al metodo imprimeValor.

si hacemos otro if seguido y creamos una variable de tipo int llamada valor, realizamos un if y dentro de este creamos un int[] llamado listado y hacemos lo mismo (añadimos el for llamando al metodo) entonces si me da una queja el netbeans diciendo que falta el ;

tiene que haber alguna explicacion de porque pasa todo esto pero ya no lo voy a dar mas vueltas al asunto.

Que opinan ustedes? me lo pueden explicar porque yo me he quedado perplejo

si la mision es listar todos los valores entonces el codigo si esta mal y puede ser un error de ejecucio creo. ahora si lo que se pretende es dar el 99999 solo no acabo de entender

PD: YA el codigo esta realizado a posta para ver como no codificar pero es una jodienda bien jodida

Avatar de Usuario
dB
Superviviente
Superviviente
Mensajes: 4446
Registrado: 13 Nov 2010, 16:11

#24

En Java despues del '}' no es necesario ';' ni en la definición de ese array, ni al final de los bloques.

Imprime 99999 pq el for solo incluye a numero = i
for(int i = 0; i <= 10; i++)
    numero = i;

Luego imprimeValor(....) se ejecuta una vez con el valor actual de numero, que es 10.
arreglo[10] = 999999

No se de donde has sacado el código, pero parece el tipico ejercicio que te ponen en los examenes para pillar a la gente, rebuscado y errores por todas partes, que no valen realmente para nada. Para compilar el java ya están los compiladores.

Avatar de Usuario
ElComediante
Superviviente
Superviviente
Mensajes: 3637
Registrado: 10 Sep 2012, 14:38
Nick Minecraft: ElComediante

#25

Pongo un pequeño programa en C a petición de Datzu. Llevo una semana aprendiendo, así que no es gran cosa...

#include <stdio.h>

int main(int argc, const char * argv[]){
    float peso;
    float altura;
    printf ("Introduce tu peso en kg:");
    scanf ("%f", &peso);
    printf ("Introduce tu altura en metros:");
    scanf ("%f", &altura);
    float IMC=peso/(altura*altura);
    printf ("Tu índice de masa corporal es de %.2f \n", IMC);
    if (IMC<16){
        printf ("Estás en Infrapeso");
    }
    if (IMC>=16 && IMC<17){
        printf ("Estás en delgadez moderada");
    }
    if (IMC>=17 && IMC<18.5){
        printf ("Estás en delgadez no muy pronunciada");
    }
    if (IMC>=18.5 && IMC<25){
        printf ("Estás en peso normal");
    }
    if (IMC>=25 && IMC<30){
        printf ("Estás en sobrepeso");
    }
    if (IMC>=30 && IMC<35){
        printf ("Estás en Obesidad tipo I");
    }
    if (IMC>=35 && IMC<40){
        printf ("Estas en Obesidad tipo II");
    }
    if (IMC>=40){
        printf ("Estás en Obesidad tipo III");
    }
    return 0;
}

Están siendo las mejores navidades de mi vida.

Avatar de Usuario
pfgluigi
Superviviente
Superviviente
Mensajes: 2355
Registrado: 11 Sep 2012, 16:32
Contactar:

#26

No te han explicado el switch - case?

Creo que es mejor que tanto if aunque el resultado sea el mismo. Aunque también tengo que decir, que hace mucho tiempo que no toco C.

Última edición por pfgluigi el 29 Ene 2013, 13:03, editado 1 vez en total.
Datzu

#27

Con un swicht si que te quedaría todo mas centrado.

Datzu

#28

Un juegecito por si os aburrís en clase - Dificultad media aún esta por terminar.

https://docs.google.com/file/d/0BwYPyEI ... B1bFE/edit

Avatar de Usuario
Ubathfenome
Superviviente
Superviviente
Mensajes: 185
Registrado: 14 Oct 2011, 00:25

#29

Cagon diez, TU si que estabas aburrido xD

Imagen
ImagenImagen

Datzu

#30

Ale, nueva versión con dificultad media (aunque es más fácil ganar en medio si sabes donde colocarlas pues obligas a la máquina a ponerla ahí) que ya piensa si vas a ganar donde te puede cortar, ahora iré a por la versión difícil donde piense dónde tiene que colocar para ganar.

3 en raya: https://docs.google.com/file/d/0BwYPyEI ... sp=sharing
Codigo fuente: https://docs.google.com/file/d/0BwYPyEI ... sp=sharing

Responder