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 - K-YreX

#321
Bueno pues vamos uno por uno...
Para empezar un tema importante: diferencia entre while() y do{}while().
Un while() primero comprueba una condición y se pueden dar dos casos:
  • true -> Entra en el bucle. Termina. Comprueba nuevamente la condición... Y así hasta que la condición sea falsa.
  • false -> No entra en el bucle. Se lo salta.
    Un do{}while() primero entra en el bucle. Termina y es entonces cuando mira la condición:
  • true -> Se repite el bucle. Termina y vuelve a comprobar hasta que sea falso.
  • false -> No vuelve a repetir el bucle (pero recuerda que ya lo ha ejecutado una vez antes)

    Resumido:
  • while() -> Comprueba - Ejecuta - Comprueba - ... - Comprueba - Sale (PUEDE NO EJECUTARSE NINGUNA VEZ)
  • do{}while() -> Ejecuta - Comprueba - Ejecuta - ... - Comprueba - Sale (SIEMPRE SE EJECUTA AL MENOS 1 VEZ)

    El bucle while() se utiliza cuando ya conocemos el valor que vamos a utilizar para la condición antes de ejecutar el bucle. Y por otra parte el do{}while() se utiliza cuando no conoceremos el valor de la condición hasta después de ejecutar el bucle una vez.
    Cita de: JonatanP en 26 Abril 2020, 21:19 PM
    9. Programa que captura un año válido y dice si es bisiesto o no. Para ser válido deberá cumplir con estar entre 1900 y 2019, de no ser así indique el error y vuélvalo a solicitar hasta que lo sea. Para saber si es bisiesto, éste deberá ser divisible por 4 pero no por 100 o divisible entre 400.
    Código (cpp) [Seleccionar]
    int main()
    {
       int año;

       printf( "\n   Introduzca un a%co: ", 164 );
       scanf( "%d", &año );
       
       if (año>=1900 && año <=2019)
       if ( año % 4 == 0 && año % 100 != 0 || año % 400 == 0 )
       
       do{
       printf("ERROR, Dame otro año",164);
       scanf ("%d",&año);
    }while(año<1900&&año>2019);


           printf( "\n   ES BISIESTO" );
       else
           printf( "\n   NO ES BISIESTO" );
    }

    En el 9 , no se como hacer que aparezca un error cuando se coloca un numero menor de 1900 y mayor a 2019.
    Aquí lo que quieres hacer se conoce como filtro. Vas a pedir un valor concreto hasta que te lo pongan correctamente. Se puede hacer con ambos bucles aunque el más típico es un do{}while() de la siguiente manera:

    DO
     pido el dato
    WHILE el dato no es valido

    Pero se puede hacer con un while() de la siguiente manera:

    pido el dato
    WHILE el dato no es valido
     pido el dato
    FIN WHILE


    Pero tú has mezclado ambas cosas ya que pides el año antes de empezar el bucle pero luego usas un do-while. Ahora viene el tema de mostrar un "algo" cuando el valor no es válido. Si estás usando un do-while, tienes que hacerlo de la siguiente manera:

    DO
     pido el dato
     SI el dato no es valido
       muestro ese "algo"
     FIN SI
    WHILE el dato no es valido

    Como ves tienes que comprobar si el dato es válido en dos sitios. Una forma de mejorar el código es usar una variable booleana. En caso de usar C se puede usar la biblioteca <stdbool.h> (creo que era) o usar un int y darle valores 1 (true) y 0 (false).

    Visto con un supuesto más concreto. Un filtro que te pide la edad y tiene que estar entre 18 y 65:

    #include <stdio.h>
    #include <stdbool.h>

    #define EDAD_MINIMA 18
    #define EDAD_MAXIMA 65

    int main(){
     int edad;
     bool edad_valida;
     do{
       printf("Introduce una edad entre %d y %d: ", EDAD_MINIMA, EDAD_MAXIMA);
       scanf("%d", &edad);
       edad_valida = (edad >= EDAD_MINIMA && edad <= EDAD_MINIMA);
       if(!edad_valida){
         printf("La edad introducida no es valida");
       }
     } while(!edad_valida);

     printf("La primera edad valida introducida es: %d", edad);
    }


    Y si prefieres hacerlo con un while, te ahorras la doble comprobación (o con nuestra mejora: el uso de un bool) pero vas a tener que pedir el dato antes del bucle y al final de este. Con el mismo ejemplo de antes para que veas que son intercambiables:

    #include <stdio.h>

    #define EDAD_MINIMA 18
    #define EDAD_MAXIMA 65

    int main(){
     int edad;
     printf("Introduce una edad entre %d y %d: ", EDAD_MINIMA, EDAD_MAXIMA);
     scanf("%d", &edad);
     
     while(edad < EDAD_MINIMA || edad > EDAD_MAXIMA){
       printf("La edad introducida no es valida");
       printf("Introduce una edad entre %d y %d: ", EDAD_MINIMA, EDAD_MAXIMA);
       scanf("%d", &edad);
     }

     printf("La primera edad valida introducida es: %d", edad);
    }

    Es mejor que uses la primera siempre porque aunque la segunda parece más simple repites código necesariamente y ahora solo pides un número pero puede ser que pidas muchos datos y tengas que repetir muchas líneas.

    Con esto ya deberías poder hacer el 9 pero si tienes alguna duda, siempre puedes preguntarla. Y que no te de miedo cargarte lo que tienes y empezar de 0. A veces es más fácil porque así no intentas reutilizar lo que ya tienes. Sobre todo en casos como estos que está hecho un lío.


    Ahora vamos primero al 11 ya que tienes parte hecha. Para no volver a repetir todo sobre los bucles, te doy una idea para hacerlo. Esta vez te lo pondré en pseudocódigo así que tendrás que entenderlo para luego escribirlo tú en el lenguaje que uses. Puedes ir filtrando cada dato con lo que haces más bucles do-while pero con condiciones más sencillas o pedir todo y luego ya validar. Me parece más correcto lo primero porque si te ponen el día 32, para qué vas a pedir el mes si ya sabes que no va a estar bien? Pero como pone que pide una fecha pues lo haré para pedirlo todo junto y luego validar. (Doy por hecho que tampoco has visto arrays todavía, si es cierto no es para asustarte, no son para tanto y hasta te pueden quitar trabajo pero lo haré sin usarlos).

    PD: Cuando no sepas dónde poner el do-while para que un programa se repita. Hazlo primero sin que se repita: pide datos y valida y cuando ya lo tengas mete todo el programa dentro de un do{} y pon la condicion del while() y listo:

    // SIN REPETIR EL PROGRAMA
    dia = pedirDia()
    mes = pedirMes()
    año = pedirAño()

    fechaValida = true // supones que la fecha es valida
    // Para empezar comprueba el año, si se sale de los limites no hace falta seguir
    SI año < AÑO_MINIMO or año > AÑO_MAXIMO ENTONCES
     fechaValida = false
    FIN SI

    // Ahora tienes que ver si la fecha sigue siendo valida porque si ya no lo es, no tienes que hacer nada mas
    SI fechaValida and (mes < MES_MINIMO or mes > MES_MINIMO) ENTONCES
     fechaValida = false
    FIN SI

    // Ahora mas de lo mismo, si la fecha sigue siendo valida tendras que comprobar el dia:
    SI fechaValida ENTONCES
     limiteDia = 31 // suponemos como limite maximo 31
     SI mes = 4 or mes = 6 or mes = 9 or mes = 11 ENTONCES
       limiteDia = 30
     SINO SI mes = 2 ENTONCES
       limiteDia = 28 // el enunciado dice que febrero se considera siempre de 28 dias
     FIN SI

     fechaValida = (dia > 0 and dia <= limiteDia)
    FIN SI

    SI fechaValida ENTONCES
     Mostrar "La fecha es valida"
    SINO
    Mostrar "La fecha no es valida"
    FIN SI


    Y ahora que ya lo tienes. Coges todo el código lo metes en un DO y le pones la condición:

    HACER
     // todo el programa...
     // EXCEPTO las declaraciones de variables porque con declararlas una vez antes del bucle ya vale
     // PERO tienes que recordar poner los valores por defecto al principio o al final de cada vuelta para que la siguiente vuelta funcione bien
    MIENTRAS !fechaValida




    El ejercicio 10 te lo explico por encima. Daré por hecho que ya sabes lo que es un número binario, cómo se pasa de binario a decimal y viceversa y esas cosas...
    Lo primero sería hacer un filtro como ya has visto para que el número esté entre 1 (00000001) y 255 (11111111). Te lo explicaré sin la función pow() para que veas una forma mejor de hacerlo pero sencilla también.
    El 1 que más vale en binario de los ocho que componen nuestro número es 128 (no entraré en detalles, espero que estemos de acuerdo). Y de ahí, los siguientes unos van valiendo la mitad: 64, 32, 16, 8, 4, 2 y 1. Entonces puedes ir mirando si tu número es mayor o igual que x (llamemos así al 128, 64,...) y si lo es, se lo restas y muestras un 1, si no lo es, muestras un 0. Siempre al finalizar divides x a la mitad:

    HACER
     numero = pedirNumero()
    MIENTRAS numero < 1 or numero > 255

    factor = 128
    MIENTRAS numero > 0 HACER
     bit = 0
     SI numero >= factor ENTONCES
       numero = numero - factor
       bit = 1
     FIN SI

     Mostrar bit
     factor = factor / 2
    FIN MIENTRAS

    Con esto tendrás el número representado con 8 bits sencillo y bastante eficiente. Se puede mejorar obviamente pero si estás empezando es mejor que tengas códigos fáciles de entender que eficientes.



    PD 2: Por lo que veo parece que te han dicho que te van a enseñar C++ pero lo que te están enseñando es una mezcla de C/C++ (muy común en muchos lugares, a mí también me lo hicieron). Pero que sepas que la mayoría de lo que usas es C.

    PD 3: No utilices la biblioteca <conio.h>. Es una biblioteca que no es estándar por lo que puede dar problemas según donde se use y seguramente lo hagas por la función getch() para que no se cierre el programa.
  • Como alternativa de C tienes getchar() de la biblioteca <stdio.h> que ya estás usando.
  • Como alternativa de C++ tienes cin.get() de <iostream>. Con esta se hacen las entradas y salidas en C++.

    PD 4: Haces bien poniendo nombres fáciles de identificar a las variables pero acostúmbrate a usar también constantes en vez de poner números sueltos. Con una constante, la puedes cambiar una vez y que el programa funcione de otra manera y si vas poniendo números sueltos tendrás que cambiarlos todos uno por uno... Un rollo vamos.
  • Constantes al estilo C:
    #define <NOMBRE CONSTANTE> <valor>
  • Constantes al estilo C++:
    Código (cpp) [Seleccionar]
    const <tipo> <NOMBRE CONSTANTE> = <valor>
#322
Especifica en qué parte de los programas tienes problemas y a ser posible coloca el código que tengas hecho para poder ayudarte. Para colocar código utiliza las etiquetas de Código GeSHi del desplegable que hay sobre el cuadro de texto y selecciona el lenguaje apropiado (C o C++, el que sea).

#323
Cita de: gomezjuan en 26 Abril 2020, 18:11 PM
1º Leer un fichero que esta formado por dos columnas (desconocemos el numero de filas), asegurarse de que los datos del fichero son numeros reales y de que en la columna 1 y en la 2 hay la misma cantidad de numeros.
Si te piden que compruebes que todas las columnas están formadas por 2 valores y que ambos sean numéricos, yo diría que tienes que leer línea por línea del fichero con getline() por ejemplo y el resultado que obtendrás en un string tendrás que separarlo en dos partes y validar cada parte para saber que son números.
Así dicho parece mucho pero son un par de funciones simples.

Cita de: gomezjuan en 26 Abril 2020, 18:11 PM
2º Sumar los elementos de las filas, por ejemplo:
2 3 --> 2+3=5
1 2 --> 1+2=3
4 1 --> 4 +1 = 5
2 3 -->2 + 3 =5
3º Mostrar por consola el numero mas grande que se obtiene al sumar las columnas y los numeros que se han sumado para alcanzar ese numero, pero si en el fichero hay una fila con los mismos numeros solo debe salir una vez por consola.
Segun el ejemplo anterior en la consola deberia aparecer:
"El número mayor que se obtiene es 5 que se obtiene al sumar: 2 y 3, 4 y 1.
Yo he pensado ir añadiendo a un vector los resultados de las sumas y luego imprimir por consola el mayor, pero no se como puedo hacer esto.
Si sólo te pidiesen la mayor suma bastaría con una variable que irías actualizando al encontrar una suma mayor. Si solo te pidiesen el resultado mayor y una de las filas que lo obtienen, bastaría con 3 variables que irías actualizando de igual forma que antes.
Sin embargo, como pueden ser muchas filas las que obtienen el mayor resultado, sería mejor crear un struct o una clase (ya que es C++) que contenga:
Código (cpp) [Seleccionar]

class Registro {
  private:
    double operando1;
    double operando2;
    double suma;
  //...
};

Y hacer un vector de registros.
Otra opción un poco más avanzada pero más eficiente es que como se pide no mostrar repetidos puedes usar un Set de la STL también. Defines que un registro es igual que otro cuando sus tres atributos son iguales o con que los dos operandos sean iguales es suficiente también. Y así al introducir un registro en el Set, si ya existe, se omitirá.
#324
Dudas Generales / Qué navegador usas??
25 Abril 2020, 20:39 PM
No sabía muy bien dónde poner este tema pero ya que es un tema bastante abierto y de opinión pues he decidido ponerlo aquí...

Bueno pues la cosa es que siempre utilizo Chrome tanto en Windows como en Linux por tener integrada la cuenta de Google pero no me agrada mucho el consumo de RAM que tiene y que se abran varios procesos en el administrador de tareas; así que me he planteado si cambiar a otro como Firefox por ejemplo.

Quería ver la opinión del resto de usuarios sobre los navegadores... Los que hayáis probado y los pros y contras que les encontréis. A ver si con este tema, me animo a probar otras opciones.
#325
No es lo mismo hablar del índice que del código. Como ves tu programa no mantiene una correspondencia entre una cosa y otra por lo que no puedes borrar un artículo por su código pensando que va a estar en el índice del array igual a su código. Tendrías que pensar cómo quieres borrar el artículo:
  • Por índice -> Compruebas que el índice sea menor a la longitud del ArrayList y en caso de no serlo muestras un mensaje de error.
  • Por código -> Recorres el ArrayList para buscar el artículo con ese código y si lo encuentras, lo eliminas; sino, puedes mostrar un mensaje de error también.

    Ahora prueba a codificar la opción que quieras y si tienes algún problema pon tu código entre etiquetas de Código GeSHi eligiendo el lenguaje apropiado (Java).
    Suerte. :-X
#326
No te daré el código pero te daré una idea...
Supón que tienes un número de 5 cifras como el de tu supuesto (49142). Puedes hacer las siguientes subsecuencias:

Longitud 1: 4 - 9 - 1 - 4 - 2
Longitud 2: 49 - 91 - 14 - 42
Longitud 3: 491 - 914 - 142
Longitud 4: 4914 - 9142
Longitud 5: 49142 (Esta última puede obviarse como subsecuencia... Dependerá de tu lógica del problema, es decir, que tú sabrás si considerarla o no)


Lo que hay que conseguir es un patrón y de aquí podemos obtener el siguiente:
Se empiezan generando n subsecuencias de longitud 1 siendo n el número de cifras del número en cuestión. A partir de ahí si se incrementa la longitud de la subsecuencia en x, se decrementará el número de subsecuencias en x también. Dicho de otra forma:

Longitud: 1 -> Subsecuencias: n
Longitud: 2 -> Subsecuencias: n-1
...


Tienes que hacer una estructura repetitiva, un bucle. Sabes cuántas veces se repetirá dicho bucle? Sí, n veces si se considerá la subsecuencia de longitud n o n-1 si se considerán las subsecuencias hasta longitud = n-1. Entonces el bucle más adecuado es un for(). Voy a suponer que el número completo también forma una subsecuencia para no tener que explicar ambas posibilidades. Tú puedes modificarlo para que no sea así.
El bucle puedes hacer que empiece con i = 1 y vaya hasta i = n y en cada iteración mostrarás las subsecuencias de longitud i. Para cada iteración de i, cuántas subsecuencias hay? Suponiendo que i empieza en 1, n - i + 1:

PARA EL SUPUESTO n = 5
Iteracion i = 1 -> Longitud: 1 -> Subsecuencias: 5-1+1 = 5
Iteracion i = 2 -> Longitud: 2 -> Subsecuencias: 5-2+1 = 4
...

Entonces tendrás que hacer un bucle for() dentro del primer bucle for(). Este haremos que empiece en j = 0 hasta s (subsecuencias) = n-i+1. Y en cada iteración de este bucle interno tienes que mostrar el número empezando en la cifra j y con una longitud de i. (Suponiendo que 0 es la primera cifra del número y n-1 la última).

Lo que te queda es ver cómo muestras la parte del número que te interesa. La mejor opción es guardar el número en un array (vector) dejando cada cifra del número en una posición del array.
Otra opción es usar las matemáticas:

SI n ES UN NUMERO ENTERO:
n % 10 -> Devuelve la última cifra
n % 100 -> Devuelve las dos últimas cifras
...
n / 10 -> Devuelve el número sin la última cifra
n / 100 -> Devuelve el número sin las dos últimas cifras
...


El resto tiene que salir de ti. Si tienes alguna duda concreta siempre puedes preguntar pero tienes que esforzarte para entender todo lo expuesto anteriormente así que antes de preguntar puedes coger un papel y boli y ver cómo se repiten los patrones que te he dicho. No esperes que te demos la solución sin esfuerzo porque eso no va a pasar. Suerte.
#327
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 22:32 PM
Cita de: rubcr en 17 Abril 2020, 20:01 PM
Dadas las siguientes tablas.
BOMBERO(#Cod_Bom, Nombre, Apellidos, Fecha_Nac, DNI, Dirección, Teléfono, Cod_Parque, Cod_Eq, Puesto)
PARQUE BOMBEROS(#Cod_Parque, Nombre, Dirección, Teléfono, Categoría)
EQUIPO(#Cod_Eq, Nombre)
PETICION_SERVICIO(#Cod_Pet_Serv, Tipo_Serv, Grado_Urgencia, Cod_Eq)
RECIBE(#Cod_Parque, #Cod_Pet_Serv, Fecha, Hora)
Se pide:

a) Código de todas las peticiones de servicio de gravedad 7.
b) Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos "Casa de Campo".
c) Códigos de todos los equipos que respondieron a cualquier petición de servicio de gravedad 7 recibidas por el parque de bomberos "Casa de   Campo".
d)Nombre de los bomberos que pertenecen a cualquier equipo que respondiera a cualquier petición de servicio de gravedad 7 recibida por el parque de      bomberos "Casa de Campo".

Si necesitas CodEq, tendrás que mirar en todas las tablas para ver dónde tienes ese dato y luego ver de todas las tablas que lo tengan, cuál es el que necesitas usar.
Para ahorrarme un mensaje: En este caso tienes un CodEq en la tabla Peticion y esa tabla ya la usabas en la consulta del apartado b, por lo que solo tienes que cambiar el campo seleccionado con PI() de CodPeticion a CodEq...




Para qué quieres usar PI(CodPetServ)?? Estás buscando el código de la petición?? Yo creo que no.
#328
Supongo que cada uno tendrá una visión de este foro según el tiempo que lleva en él y comparándolo con otras plataformas; así que de primeras te diría que pruebes. El foro no es un curso en el que tengas que leerte cada tema e ir haciendo exámenes. Es un espacio con mucha información suelta y tú tendrás que ver si lo que ves te sirve o no.

Yo llevo unos cuantos años leyendo cosas de este foro aunque empecé a participar en él de forma más activa años después. Y desde mi punto de vista creo que es de los mejores foros, sino el mejor, que puedes encontrar además de que no se centra en un solo tema; hay muchos subforos y cada quien estará más cómodo en su territorio pero siempre puedes moverte a otro subforo y empezar a aprender cosas nuevas.
Algo que puedo decir de este foro comparado con otros es que muchas de las explicaciones que se dan están basadas en documentación oficial o en buenas prácticas y no en "es que yo lo hago así" (cosa que sí he visto en otros foros y que al final te acaban inculcando malas prácticas y unas bases mal formadas).
Como dice @warcry: hay personas que saben lo que hacen y con las que aprendes a tener unas buenas bases y yo creo que no es complicado que te ayuden en algún problema que tengas (no están escondidos esperando un tema que realmente les apasione para contestar, aunque algunos igual sí, no lo sé :silbar: :xD).

También es cierto que tienes que hacer un uso correcto del foro. Si esperas que te hagan las tareas, que te solucionen la vida, etc; entonces no es para ti pero ni este foro ni ningún otro. Tengo la sensación de que harías un buen uso de éste (igual me equivoco) pero como ya te he dicho y te repito: Quédate y pruébalo. No pierdes nada. Suerte. ;D
#329
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 20:37 PM
Cita de: rubcr en 18 Abril 2020, 20:28 PM
En la fórmula:
(PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))
(PI(CodPeticion) de la parte de la izquierda de la intersección, sería de la tabla recibe?
Obviamente. La tabla Parque no tiene ninguna columna CodPeticion.
#330
Bases de Datos / Re: Ejer Alg relacional
18 Abril 2020, 18:48 PM
Cita de: rubcr en 18 Abril 2020, 17:44 PM
En el apartado b, la parte de: recibidas por el parque de bomberos Casa de campo tengo claro que se usa un sigma, pero me has puesto antes que hacer in pi cod_parque no tiene sentido,  como se juntaria con la parte del apartado a? Sería con un joint pero entonces la tabla recibe no le vería sentido.

Citar
Código de todas las peticiones de servicio de gravedad 7 recibidas por el parque de bomberos "Casa de Campo".
(Pi(CodParque) (Sigma Nombre = C.campo) (Parque) ∗ Recibe) ∩ (π (CodPeticion) Sigma (Grado = 7) (Peticiones)) ∗ Recibe)

Explicado con un ejemplo. Vamos a suponer que los CodParque se forman con "Cpa" + 4 dígitos y los CodPeticion se forman con "CPe" + 4 dígitos.
Imagina que haces la primera parte de la intersección. Así obtienes el CodParque de los parques que se llamen C.campo y que hayan recibido alguna petición. Y los CodParque obtenidos son (por ejemplo):

CPa0001
CPa0002
CPa0015


Y ahora vamos a hacer la segunda parte de tu intersección. Con ello obtienes los CodPeticion de las peticiones de gravedad 7 y que han sido recibidas por algún parque. Y esto nos da como resultado los siguientes CodPeticion (por ejemplo):

CPe0005
CPe0008
CPe0010
CPe0015


Y tu solución es la intersección de ambos (cosa que te adelanto que no se puede hacer porque estás trabajando con campos diferentes CodParque por un lado y CodPeticion por otro... Pero supongamos que se puede hacer la intersección) que es: NADA. 0. Mejor dicho {Vacio}. No hay ninguna coincidencia entre una tabla y otra.




Hay dos formas de hacer esto:
  • USANDO UNA INTERSECCIÓN:

    (PI(CodPeticion)(SIGMA(Nombre = C.campo)(Parque) JOIN Recibe) INTERSECT (PI(CodPeticion)(SIGMA(gravedad = 7)(Peticion))

    Empecemos por la premisa de que CodPeticion es un atributo/campo/columna identificativa/discriminante/clave (porque lleva #). Esto significa que cualquier petición se puede identificar con saber su CodPeticion o que no existen dos peticiones con el mismo CodPeticion.
    La primera parte de la intersección obtiene los CodPeticion de todas las peticiones que haya recibido el parque C.campo. Por ejemplo, siguiendo con el ejemplo de antes:

    CPe0005
    CPe0006
    CPe0015

    Esos son los CodPeticion de todas las peticiones que han recibido los parques con nombre C.campo. Ahora de todos esos tenemos que ver los que tienen gravedad 7. Entonces con la segunda parte de la intersección obtenemos los CodPeticion de todas las peticiones con gravedad 7. Que son, por ejemplo:

    CPe0004
    CPe0005
    CPe0015

    Ahora si hacemos la intersección entre ambos resultados, obtenemos los CodPeticion de todas las peticiones de gravedad 7 que han recibido los parques C.campo.

    CPe0005
    CPe0015


    Recalco que la JOIN entre Parque y Recibe se hace por medio de CodParque (campo que tienen ambas en común).

  • USANDO UNA JOIN:
    En este método no me voy a explayar tanto. La primera parte es igual (JOIN entre Parque y Recibe) pero lo que hacemos es otra JOIN de esas dos con Peticion (por medio de CodPeticion).

    PI(Peticion.CodPeticion)(SIGMA(gravedad = 7)(Parque JOIN Recibe JOIN Peticion)

    En el campo del PI hay que especificar una tabla, bien Recibe o bien Peticion porque ambas tienen el campo CodPeticion pero el resultado es el mismo ya que el CodPeticion tiene que coincidir en ambas.
    Así tal cual esta consulta es peor porque trabaja con mayor cantidad de datos ya que hemos dejado los SIGMAs y PIs para el final pero eso hace que la consulta quede más simple.


    Ahora ya papel y boli (o lo que prefieras) y a leer todos los mensajes de este tema con todos los ejemplos que he ido poniendo hasta entenderlo. Creo que ya tienes ejemplos y explicaciones de sobra. :rolleyes: :rolleyes: