ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ

ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Εξαμηνιαίες

Μάθημα

Εισαγωγή στον Προγραμματισμό των Υπολογιστών

Εξετάσεις

Διδάσκων

Ι. Κάβουρας

Φεβρουαρίου

Εξάμηνο

Α’

2000

Ημέρα

Δευτέρα, 24/1/2000
 

Ώρα

13.00

ΘΕΜΑ 1ο (20%)

Δίνεται η συμβολοσειρά s που περιέχει τους χαρακτήρες του αριθμού μητρώου ενός φοιτητή (8 χαρακτήρες), το ονοματεπώνυμό του (τουλάχιστον ένας χαρακτήρας) και τη βαθμολογία (2 χαρακτήρες) που έλαβε σ’ ένα μάθημα:

String s="P3990000|PAPAS NIKOS|07"

Οι προαναφερόμενες πληροφορίες διαχωρίζονται με τον χαρακτήρα |.

Γράψτε εντολές (σε γλώσσα Java) που κάνουν τα εξής:

  1. Υπολογίζουν (και εκχωρούν σε μια μεταβλητή) σε ποια θέση της συμβολοσειράς αρχίζει το ονοματεπώνυμο του φοιτητή.
  2. Υπολογίζουν (και εκχωρούν σε μια μεταβλητή) σε ποια θέση της συμβολοσειράς τελειώνει το ονοματεπώνυμο του φοιτητή.
  3. Δημιουργούν μια συμβολοσειρά (έστω onomat) με το ονοματεπώνυμο του φοιτητή που βρίσκεται στην συμβολοσειρά s.
  4. Δημιουργούν μια συμβολοσειρά (έστω onomat2) με το ίδιο περιεχόμενο με την onomat, εκτός από τον κενό χαρακτήρα, ανάμεσα στο όνομα και το επώνυμο του φοιτητή, που θα πρέπει να αντικατασταθεί με τον χαρακτήρα “&”.
  5. Τυπώνουν τον πρώτο χαρακτήρα της συμβολοσειράς onomat (ονοματεπωνύμου).
  6. Δημιουργούν μια συμβολοσειρά (bathmos) με τον βαθμό του φοιτητή (που υπάρχει στην συμβολοσειρά s).

 

ΘΕΜΑ 2ο (20%)

Δίνεται το παρακάτω πρόγραμμα σε γλώσσα Java:

1

import java.io.*;

2

public class foundinpin {

3

public static void main (String args[])throws IOException {

4

char[] Pinakas = new char[5];

5

int pos = 0;

6

System.out.print (Entoli (ε,α,τ):);

7

char ch = (char) System.in.read();

8

char item;

9

while ch != 'τ' {

10

found = false;

11

System.in.skip(1);

12

item = (char) System.in.read();

13

switch (ch) {

14

        'ε' : if (pos<5)

15

Pinakas[pos]= item;

16

pos++;

17

}

18

else

19

System.out.println ("Pinakas Plirhs");

20

break;

21

'α' : for (int i=0; i<pos; i++)

22

if (Pinakas[i] == item){

23

System.out.println("Paron sth thesi"+i);

24

found=true;}

25

if (!found)

26

System.out.println("Apon");

27

break;

28

Default : System.out.println("Lathos entoli");

29

}

30

System.in.skip(2);

31

System.out.print ("Entoli (ε,α,τ):");

32

ch = (char) System.in.read();

33

}

34

}

35

}
  1. Υπάρχουν συντακτικά λάθη στο πρόγραμμα. Αν ναι, ποια είναι αυτά;
  2. Περιγράψτε τη λειτουργία του προγράμματος (σε 7-8 το πολύ γραμμές). Προσοχή, μην κάνετε περιγραφή μεμονωμένων εντολών.
  3. Γράψτε μια λύση πρώτου επιπέδου για το πρόγραμμα αυτό.
  4. Γράψτε κατάλληλα δοκιμαστικά δεδομένα. Ποια είναι τα αναμενόμενα αποτελέσματα;

ΘΕΜΑ 3ο (30%)

Γράψτε ένα πρόγραμμα που διαβάζει από την προκαθορισμένη είσοδο ένα κείμενο που τελειώνει με τον χαρακτήρα #. Το πρόγραμμα θα πρέπει να τυπώνει τη συχνότητα εμφάνισης στο κείμενο λέξεων που αποτελούνται από ένα χαρακτήρα, από δύο χαρακτήρες, τρεις χαρακτήρες κλπ. Υποθέστε ότι μια λέξη του κειμένου αποτελείται από έναν μέχρι (το πολύ) είκοσι κεφαλαίους λατινικούς χαρακτήρες. Όλοι οι υπόλοιποι χαρακτήρες (που δεν είναι κεφαλαίοι λατινικοί) θεωρούνται ως χαρακτήρες διαχωρισμού των λέξεων και πρέπει το πρόγραμμα να τους αγνοεί.

Γράψτε επίσης και τη λύση πρώτου επιπέδου για το πρόγραμμα αυτό.

ΘΕΜΑ 4ο (30%)

Ένα αρχείο (posothtes.dat) τυχαίας προσπέλασης, περιέχει ακεραίους που παριστάνουν τις ποσότητες δέκα προϊόντων που υπάρχουν σε μια αποθήκη, ως εξής:

0

1

2

3

4

5

6

7

8

9

100

200

200

200

150

150

250

250

300

300

Το προϊόν που βρίσκεται στη θέση 0 του αρχείου έχει απόθεμα 100, το προϊόν στη θέση 1 έχει απόθεμα 200 κλπ.

Γράψτε ένα πρόγραμμα (σε γλώσσα Java) που κάνει τα εξής:

  1. Έξοδος από το πρόγραμμα
  2. Πώληση
  3. Προμήθεια

Η πώληση και η προμήθεια είναι δυο μέθοδοι που κάνουν τα εξής:

Πώληση: Διάβασε τον αριθμό του προϊόντος (0-9) και την ποσότητα πώλησης. Εάν το απόθεμα είναι μεγαλύτερο από την ποσότητα πώλησης τότε μείωσε το απόθεμα κατά την ποσότητα αυτή. Διαφορετικά τύπωσε ένα κατάλληλο μήνυμα στην προκαθορισμένη έξοδο

Προμήθεια: Διάβασε τον αριθμό του προϊόντος (0-9) και την ποσότητα προμήθειας. Αύξησε το απόθεμα του προϊόντος κατά την ποσότητα της προμήθειας.

Δίνεται η παρακάτω μέθοδος για το διάβασμα ενός ακεραίου. Δε χρειάζεται να γράψετε ξανά τη μέθοδο αυτή. Απλά καλέστε τη όπου τη χρειάζεστε.

static int intRead()throws IOException{

int res=0,ch;

ch=(int)System.in.read();

while (ch <'0' || ch>'9') ch=System.in.read() ;

while (ch >='0' && ch<='9') {

res = 10*res+(ch-'0');

ch=(int)System.in.read();

}

return res;

}

Μέθοδοι της τάξης String

string.charAt (index)
string.concat (string2)
string.getBytes (from, toPlusOne, πίνακας_δυφιοσυλλαβών, at)
string.getChars (from, toPlusOne, πίνακας_χαρακτήρων, at)
string.indexOf (συμβολοσειρά)
string.indexOf (συμβολοσειρά, starting_index)
string.lastIndex (συμβολοσειρά, starting_index)
string.length ()
string.replace (χαρακτήρας1, χαρακτήρας2)
string.substring (starting_index)
string.substring (starting_index, ending_indexPlusOne)
string.toLowerCase ()
string.toString ()
string.trim ()
string.valueOf (πίνακας_χαρακτήρων)

ΤΕΛΟΣ ΤΩΝ ΕΡΩΤΗΣΕΩΝ