THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: leukosaraphs! on April 01, 2016, 13:56:24 pm



Title: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: leukosaraphs! on April 01, 2016, 13:56:24 pm
Παιδες προσπαθω να γραψω ενα προγραμμα (ασκηση εργαστηριου ειναι απλα δν προλαβα να τν κανω εκει) και πρεπει να χρησιμοποιησω την "if" .
Code:
#include <stdio.h>
int main()
{
    int x1,x2; //x1: wra enar3hs, x2:wra lh3hs
    scanf("%d",&x1);
    scanf("%d",&x2);
    int c;
    int d;
    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
    if(d-c>0){
        double x=(d-c)*0.2;
        double poso=x+0.6;
        printf("%lf\n",poso);
    } else {
        double x=((d+60)-c)*0.2;
        double poso=x+0.6;
        printf("%lf\n",poso);
    }
    return 0;

}

Οπως βλεπετε κι στο στελεχος της if και της else υπαρχουν δυο εντολες
Code:
ouble poso=x+0.6;
        printf("%lf\n",poso);
οι οποιες γινεται να χρησιμοποιηθουν μια φορα εξω απο τν if , απλα για καποιο λογο οταν το κανω δεν "μεταφερει" την τιμη που της εχεις δοθει

edit: tag


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: nvog1993 on April 01, 2016, 14:01:18 pm
Τι εννοείς εξωτερικά της if? Πως αλλάζεις ακριβώς τον κώδικα?


Title: Re: Απορια στην χρηση της if
Post by: Escobar on April 01, 2016, 14:01:42 pm

Οτιδήποτε δηλώνεις στο εσωτερικό ενός μπλοκ έχει τοπική ισχύ, δηλαδή δε φαίνεται στο εξωτερικό του μπλοκ.


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Vlassis on April 01, 2016, 14:02:18 pm
την μεταβλητη poso την δηλωνεις μεσα στα  { } της if και else αντιστοιχα. αυτη ειναι και η εμβελεια της. καλο ειναι να την δηλωσεις εξω απο την if, και μετα να την χρησιμοποιεις..


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: leukosaraphs! on April 01, 2016, 14:10:13 pm
Ξερω οτι πρεπει να την δηλωσω κι εξω απο την if  την μεταβλητη poso και την μεταβλητη x, κατι που δοκιμασα κιολας αλλα μολις το ετρεξα μου βγαζε αποτελεσμα μονο 0 , υπεθεσα οτι απλα δν περαστηκε η τιμη που της δοθηκε μεσα στην if .Κι ρωτησα αν υπαρχει τροπος να την περασω

Quote
Οτιδήποτε δηλώνεις στο εσωτερικό ενός μπλοκ έχει τοπική ισχύ, δηλαδή δε φαίνεται στο εξωτερικό του μπλοκ.
Δηλαδη μονο ετσι γινεται να εμφανισω αυτο που θελω? Μεσα στην if?

Quote
Τι εννοείς εξωτερικά της if? Πως αλλάζεις ακριβώς τον κώδικα?
Απλα μου φανηκε χαζο να γραφω πολλες φορες τις ιδιες γραμμες κωδικα..Το αλλαζει ετσι :
Code:
#include <stdio.h>
int main()
{
    int x1,x2; //x1: wra enar3hs, x2:wra lh3hs
    scanf("%d",&x1);
    scanf("%d",&x2);
    int c;
    int d;
    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
    if(d-c>0)
    {
        double x=(d-c)*0.2;

    }
    else
    {
        double x=((d+60)-c)*0.2;

    }
    double x,poso;
    poso=x+0.6;
    return 0;

}


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Vlassis on April 01, 2016, 14:15:10 pm
Code:
int main()
{
    int x1,x2; //x1: wra enar3hs, x2:wra lh3hs
    scanf("%d",&x1);
    scanf("%d",&x2);
    int c;
    int d;
    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
   double poso=0;
   double x=0;
    if(d-c>0){
        x=(d-c)*0.2;
        poso=x+0.6;
        printf("%lf\n",poso);
    } else {
        x=((d+60)-c)*0.2;
        poso=x+0.6;
        printf("%lf\n",poso);
    }
    return 0;

}
για δοκιμασε ετσι.


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: leukosaraphs! on April 01, 2016, 14:20:53 pm
Απλα αρχικοποιησες τις τιμες των x,poso?
Συμφωνω οτι τρεχει , απλα χρησιμοποιησεις printf μεσα στην if και else ,κατι που θελω να αποφυγω(αν γινεται)


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Vlassis on April 01, 2016, 14:25:41 pm
Απλα αρχικοποιησες τις τιμες των x,poso?
Συμφωνω οτι τρεχει , απλα χρησιμοποιησεις printf μεσα στην if και else ,κατι που θελω να αποφυγω(αν γινεται)
τις δηλωνεις κυριως και τις αρχικοποιεις εξω απο την if.
α για αυτο απλα βαλε, το printf("%lf\n",poso); ακριβως μια εντολη πριν το return, εξω απο το if


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: leukosaraphs! on April 01, 2016, 14:29:04 pm
Α ωραιος τωρα ετρεξε, λογικα με τις αρχικοποιησεις εκανα βλακεια

Ευχαριστωωωωω


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Vlassis on April 01, 2016, 14:30:40 pm
απλα εσυ καθε φορα που εγραφες double poso; , η μεταβλητη poso εχανε την προηγουμενη τιμη της και δεν ειχε καμια σχεση με την μεταβλητη που εσυ ορισες πριν, εξω απο το μπλοκ που ησουν ..
 ;)


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Andromedas on April 01, 2016, 14:36:22 pm
Code:
#include <stdio.h>
int main()
{
    int x1,x2; //x1: wra enar3hs, x2:wra lh3hs
    scanf("%d",&x1);
    scanf("%d",&x2);
    int c;
    int d;
    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
    if(d-c>0)
    {
        [u]double x=(d-c)*0.2;[/u]

    }
    else
    {
       [u] double x=((d+60)-c)*0.2;[/u]

    }
    [u]double x[/u],poso;
    poso=x+0.6;
    return 0;

}

Πρακτικα κανεις δηλωση δυο διαφορετικων pointer ετσι ενα μεσα στο bracket της if και ενα στο bracket της main οποτε χανετε οταν βγαινει εξω η τιμη. Σωστο ειναι η δηλωση Xcorrect
Code:
#include <stdio.h>
int main()
{
    int x1,x2; //x1: wra enar3hs, x2:wra lh3hs
    printf("Give x1 \n");
    scanf("%d",&x1);
    printf("Give x2 \n");
    scanf("%d",&x2);
    int c;
    int d;
    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
   
    double Xcorrect=0;
   
    if(d-c>0)
    { Xcorrect=(d-c)*0.2;
        double x=(d-c)*0.2;
        printf("INSide x= %f \n",(float)x);

    }
    else
    { Xcorrect=((d+60)-c)*0.2;
        double x=((d+60)-c)*0.2;
         printf("INSide x= %f \n",(float)x);

    }
    double x,poso=0.6;
    poso=x+poso;
    printf("Outside x= %f poso=%f\n",(float)x,(float)poso);
  poso=Xcorrect+poso;
printf("Xcorrect=%f poso=%f",(float)Xcorrect,(float)poso);
   
    return 0;

}


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: Apostolof on April 01, 2016, 14:36:29 pm
Code:
int main()
{
    ...
    if(d-c>0)
    {
        double x=(d-c)*0.2;

    }
    else
    {
        double x=((d+60)-c)*0.2;

    }
    double x,poso;
    poso=x+0.6;
    ...

Εδώ δηλώνεις ένα double x μέσα στην if, αυτό αποθηκεύεται σε μία θέση μνήμης. Όταν βγαίνει από την if δεν υπάρχει πια x!
Ύστερα δηλώνεις ξανά ένα double x μέσα στην else. Αυτό είναι άλλο x! Θα μπει σε άλλη θέση μνήμης! Βγαίνεις από την else και πάλι δεν υπάρχει x.
Τέλος πας κάτω από την else και δηλώνεις ένα τελευταίο double x. Αυτό θα πάει σε μία τυχαία θέση μνήμης που είναι διαθέσιμη. Αυτή η θέση έχει μέσα σκουπίδια από προηγούμενη χρήση. Πας και κάνεις poso=x+0.6; το οποίο στην ουσία θα προσθέσει 0.6 στα σκουπίδια. Αυτό που θες να κάνεις γίνεται έτσι:

Code:
#include <stdio.h>
int main()
{
    int x1,x2,c,d; //x1: wra enar3hs, x2:wra lh3hs
    double x,poso;

    scanf("%d",&x1);
    scanf("%d",&x2);

    c=x1%100; //c:to ypoloipo ths akeraias diaireshs tou me to 100
    d=x2%100; //d:to ypoloipo ths akeraias diaireshs tou me to 100
    if(d-c>0)
    {
        x=(d-c)*0.2;
    }
    else
    {
        x=((d+60)-c)*0.2;
    }
    poso=x+0.6;
    return 0;

}


Title: Re: [Δομημένος Προγραμματισμός] Απορια στην χρηση της if
Post by: leukosaraphs! on April 01, 2016, 15:53:34 pm
Καταλαβα τι μ@..κια εκανα  :( :( τεσπα τον παρατησα αυτον τον τροπο λυσης , ηταν πιο περιπλοκος απο οτι υπολογιζα