30 δευτερόλεπτα γνώσης
Posted by Γεωργία Γεωργίου Wed, 26 Sep 2007 20:45:44 EEST
Μοιράζομαι μαζί σας πράγματα που έμαθα πρόσφατα.
Προσοχή, σχετίζονται με πληροφορική.
Χρήσιμο:
Έστω ότι έχουμε μία many-to-many σχέση. Π.χ. Άνδρας και Προτερήματα. Άρα, θα έχουμε ένα πίνακα που να αντιπροσωπεύει αυτή τη σχέση.
Τωρά, σκεφτείτε, ότι θέλουμε μια αναφορά(Report) που να βγάζει τα εξής στοιχεία. Όνομα, Ηλικία, και κατά πόσον ο συγκεκριμένος άνδρας έχει τα τρία κύρια προτερήματα.
Για να το κάνω αυτό, μπορώ να κάνω το εξής:
SELECT DISTINCT dbo.Man.Name,
‘IsRich’= CASE dbo.Advantage.Description WHEN ‘Rich’ THEN 1ELSE 0 END,
‘IsCute’ = CASE dbo.Advantage.Description WHEN ‘Cute’ THEN 1 ELSE 0 END,
‘IsSmart’ = CASE dbo.Advantage.Description WHEN ‘Smart’ THEN 1 ELSE 0 END
FROM dbo.Man INNER JOIN dbo.ManAdvantage ON
dbo.Man.ManID = dbo.ManAdvantage.ManID
Inner join dbo.Advantage on dbo.ManAdvantage.AdvantageID=
dbo.Advantage.AdvantageID
Αυτό το query θα μου επιστρέψει πλειάδες της μορφής:
Name – IsRich - IsCute – IsSmart.
Σημείωση(έπειτα από κάποια διόρθωση): για κάθε άτομο θα έχω από 0 εώς 3 records. Μπορεί όμως αυτό το query να αποτελέσει ένα view, το οποίο με ένα Group By μπορεί να μας δώσει ένα record για κάθε άτομο. Σκεφτείτε ότι το πιο πάνω query μας δημιουργεί ένα view –> vManAdv.
Άρα, Select Name, max(isnull(IsRich,0)) as IsRich, max(isnull(IsCute,0)) as ISCute, max(isnull(IsSmart,0)) as IsSmart
from vManAdv
Group by Name
Χρήσιμο ε;;
Ενδιαφέρον:
double x=0.0;
x= … κάποιος κώδικας εδώ που αλλάζει την τιμή του x.
If(x != x) { g. will win the joker!!! }
Ερώτηση: Πότε θα κερδίσει η g το Joker;;
Αν απάντησες ‘ποτέ’, εκτός από άπιστος, είσαι και λάθος!
Το (x != x) είναι αληθές σε κώδικα, στην περίπτωση που το x είναι NaN (Not a Number).
Το έχω δοκιμάσει. Έχω βάλει breakpoint στο If(x != x), και σταμάτησε εκεί ότι ισχύει.
Συγκεκριμένα το watch Που έχω βάλει είχε αυτές τις πληροφορίες:
Name: this.value != this.value Value: true Type: bool
Με λίγα λόγια, το NaN προκύπτει όταν γίνει μαθηματική πράξη που οδηγεί σε
απροσδιοριστία. Με πολλά λόγια, μπορείτε να βρείτε την εξήγηση εδώ
Ενδιαφέρον ε;;
Reader's Comments
Μπράβο Γεωργία.
Όσον αφορά το δεύτερο κομμάτι νομίζω ότι έχει να κάνει περισσότερο με το είδος της γλώσσας. Έτσι από περιέργεια δοκίμασε το με C που δεν έχει boolean data type.
Πρώτο, σε 30 δευτερόλεπτα δεν προλαβαίνω να κατανοήσω το βαθύτερο νόημα. Θέλω την ώρα μου. Δεύτερο και κυριότερο. Αν το if ισχύει αλλά το χ δεν είναι αριθμός τότε πως θα κερδίσεις το Τζόκερ αφού για να το κερδίσεις πρέπει να βρεις …. τους αριθμούς ;
@Χάρη:
#include <stdio.h> #include "math.h"
int main()
{ double x;
x=1.0/0.0;
printf("Step 1: x=%e ",x);
x=x*0.0;
printf("Step 2: x=%e ",x);
if(x!=x) { printf("Hey Harry ! Look! x!=x is valid
"); printf("The expresion has value: %d",x!=x );
}
}
Αποτέλεσμα:
$ ./a.exe Step 1: x=inf Step 2: x=nan Hey Harry ! Look! x!=x is valid
The expresion has value: 1
@Φλω: Είναι ένα μικρό εμπόδιο που πρέπει να ξεπεράσουμε. Βασικά, προκύπτει από το γεγονός ότι κάπου εμφανίζεται το -Infinite. Θα δείξει. have faith ;).
Κάποια " " εχαθήκαν από το προηγούμενό μου σχόλιο (Νεόφυτε, γιατί μας τρώει γραμμές;; ).
Αλλά νομίζω είναι καθαρός ο κώδικας και το αποτέλεσμα :).
Ίσως επειδή γράφεις κώδικα στο ελεύθερο κείμενο (χρησιμοποίησε καλύτερα τα %% για κώδικα με τον ίδιο τρόπο που χρησιμοποιείς τα :: για preformatted). Αν είναι στείλε μου ακριβώς αυτό που έγραψες και θα εξηγήσω αν πρόκειται για bug ή αν απλά αυτό που έγραψες άθελα ενεργοποίησε κάποιο κανόνα για formating (όπως γνωρίζεις τα quotes χρησιμοποιούνται για τα λινκς αλλά και για άλλα)
Δηλαδή με λίγα λόγια, το βαθύτερο νόημα είναι ότι θέλεις άντρα και λεφτά; Πρέπει να σε προειδοποιήσω ότι οι προγραμματιστικές σου γνώσεις δεν θα σε βοηθήσουν!!! ;)
@Κωνσταντίνο: Τα λεφτά είναι αρκετά.
Ο compiler του Visual Studio 2005 δεν μου το μεταγλωττίζει και μου δίνει το ακόλουθο μήνυμα:
για το σημείο :
Όμως με μια ελαφριά τροποποίηση του κώδικα:
το αποτέλεσμα έχει ως εξής:
Ενδιαφέρον . . .
Σημαντικό πάντως να αναφερθεί ότι εάν θέσουμε τα x,y ως int τότε θα έχουμε πάλι: