Τεχνολογία Λογισμικού — 2023 (έλεγχος ροής)¶
2023.png¶
#include ...
int main(){
int i=1, j=1, rows;
Scanf("%od",&rows);
if(i>=0 && i<= rows)
{
while (j<=i){
printf("* ");
j++;
}
printf("/n");
}
return 0;
}
[sic:
"%od"και"/n"όπως εμφανίζονται στον κώδικα της φωτογραφίας]Σημείωση: η φωτογραφία περιέχει χειρόγραφες απαντήσεις φοιτητή, που δεν μεταφέρονται (γράφος ροής ελέγχου και υπολογισμοί). Η εκφώνηση του θέματος (τι ζητείται) δεν φαίνεται στη φωτογραφία.
Λύσεις (🟡 community)
Κατάσταση: 🟡 community Πηγή: χειρόγραφη λύση φοιτητή στη φωτογραφία 2023.png
Λύση φοιτητή — 2023 (έλεγχος ροής)¶
Η λύση είναι χειρόγραφη από φοιτητή στη φωτογραφία. Δεν έχει επαληθευτεί από διδάσκοντα.
2023.png¶
#include ...
int main(){
int i=1, j=1, rows;
Scanf("%od",&rows);
if(i>=0 && i<= rows)
{
while (j<=i){
printf("* ");
j++;
}
printf("/n");
}
return 0;
}
[Σχήμα: Γράφος ροής ελέγχου (Control Flow Graph) με κόμβους 1 έως 7, μεταβάσεις με ετικέτες then, else, \(j \le i\), \(i > j\), και 4 περιοχές σημειωμένες με πράσινους αριθμούς 1 έως 4.]
Παγιδα!
if(a<b<5){
a<b => 0 ή 1
0 ή 1 < 5
}
\(V(G) = 4\) (οι περιοχές με πράσινο)
\(V(G) = E-V+2 =9-7+2=4\)
\(V(G) = 3+1=4\)
Οι δομές: if(i>=0), if(i<=rows), while(j<=i)
Ο μέγιστος αριθμός πιθανών μονοπατιών είναι 4.
Αυτά είναι:
M1:1-2-7 (αν είναι false η 1η συνθήκη του if)
M2:1-2-3-7 (αν είναι false η 2η συνθήκη του if)
M3:1-2-3-4-6-7 (αν ειναι false η συνθήκη του while)
M4:1-2-3-4-5-4-6-7 (αν είναι όλες true)
Παρατηρούμε πως το M1 είναι άκυρο καθώς το i αρχικοποιήται με 1 και δεν μειώνεται άρα θα είναι πάντα >0
Άρα μένουν 3 μονοπάτια, τα M2, M3, M4.
Το M2 τρέχει για rows<=0.
Το M4 τρέχει μια φορά για rows >=1. Μετά η συνθήκη του δεν ισχύει και τελειώνει το πρόγραμμα.
Το M3 δεν προκειται να εκτελεστει επειδή σίγουρα θα μπούμε μια φορά στην while.
Άρα υπάρχουν μόνο τα M2, M4
Τιμές για M2: 0, -1
Τιμές για M4: 1, 2
Σημείωση: η φωτογραφία περιέχει χειρόγραφες απαντήσεις φοιτητή.