Ορισμός εγγραφής
struct <όνομα εγγραφής> {
<τύπος 1ου μέλους> <όνομα 1ου μέλους>;
<τύπος 2ου μέλους> <όνομα 2ου μέλους>;
...
<τύπος Ν - οστού μέλους> <όνομα Ν - οστού μέλους>;
};
Δήλωση μεταβλητών εγγραφής
<όνομα εγγραφής> <Μεταβλητή>
π.χ.
struct product {
int code, quantity;
string description;
double price;
} apple, banana, orange;
int main() {<br /> ....
apple = { 101, 50, "ambrosia", 1.99 };
banana = { 102, 40, "chiquita", 2.70 };<br /> ....
return 0;
}
Αναφορά στα μέλη μίας εγγραφής
<όνομα μεταβλητής εγγραφής>.<όνομα μέλους εγγραφής>
Πίνακες εγγραφών
struct product { // Ορισμός εγγραφής product
int code, quantity; // Μέλη εγγραφής τύπου integer
string description; // Μέλος εγγραφής τύπου string
double price; // Μέλος εγγραφής τύπου double
} fruit[3]; //δέσμευση μνήμης για τρεις εγγραφές τύπου product
product fruit[3] = { { 101, 50, "ambrosia", 1.99 },
{ 102, 40, "chiquita", 2.70 },
{ 103, 60, "clementine", 1.60 } };
for (int i = 0; i<3; i++) {
cin >> fruits[i].code >> fruits[i].quantity;
cin >> fruits[i].description >> fruits[i].price;
}
Ένθετες εγγραφές
Μία εγγραφή μπορεί να χρησιμοποιηθεί ως μέλος άλλης εγγραφής. Η πρόσβαση στα μέλη της ένθετης εγγραφής γίνεται ιεραρχικά, με τη χρήση επιπρόσθετης τελείας.
abc.manager.id = 778899;
Εγγραφές και συναρτήσεις
Οι εγγραφές μπορούν να δοθούν παραμετρικά σε συναρτήσεις όπως και οι μεταβλητές. Μία εγγραφή μπορεί να δοθεί ως παράμετρος αναφοράς, αλλά και ως παράμετρος τιμής.
Αναζήτηση και ταξινόμηση εγγραφών
Αναζήτηση
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct school { // Ορισμός εγγραφής school
int code;
string name;
int tel;
string city;
};
// Συνάρτηση γραμμικής αναζήτησης
int find_school(school sch[], int key, int N) {
for (int i = 0; i < N; i++)
if (key == sch[i].code)
return i;
return -1;
}
int main() {
school sch[200]; // Πίνακας 200 εγγραφών
int target, cnt = 0;
ifstream fin("schools.txt"); // Ορισμός αρχείου εισόδου
while (!fin.eof()) { // Καταχώριση στοιχείων εγγραφής
fin >> sch[cnt].code;
fin >> sch[cnt].name;
fin >> sch[cnt].tel;
fin >> sch[cnt].city;
cnt++; // Επόμενη εγγραφή
}
cin >> target; // Κωδικός προς αναζήτηση
int pos = find_school(sch, target, cnt);
if (pos == -1) // Το σχολείο δεν βρέθηκε
cout << "School not found" << endl;
else { // Εμφάνιση στοιχείων
cout << sch[pos].code << " " << sch[pos].name << " ";
cout << sch[pos].tel << " " << sch[pos].city << endl;
}
fin.close(); // Κλείσιμο αρχείου
return 0;
}
Ταξινόμηση
#include <fstream>
#include <string>
#include <iomanip> // Για τη χρήση της setw
#include <cmath> // Για τη χρήση της round
using namespace std;
#define N 20 // Σταθερά για το πλήθος των μαθητών
struct student { // Ορισμός εγγραφής student
string name;
int t1;
int t2;
int F;
} A3[N]; // Δήλωση πίνακα εγγραφών εκτός της κύριας συνάρτησης<br />
// Συνάρτηση ταξινόμησης εγγραφών με εισαγωγή. Η συνάρτηση δεν έχει παράμετρους αφού ο πίνακας εγγραφών έχει δηλωθεί εκτός της κύριας συνάρτησης και είναι προσβάσιμος από τη συνάρτηση ταξινόμησης
void sort_struct() {
student temp; // Προσωρινή μεταβλητή τύπου εγγραφής temp
int j;
for (int i = 1; i<N; i++) {
temp = A3[i];
j = i - 1;
while (j >= 0 && A3[j].F<temp.F) {
A3[j + 1] = A3[j];
j--;
}
A3[j + 1] = temp;
}
}
int main() {
ifstream fin("students.txt"); // Ορισμός αρχείου εισόδου
ofstream fout("results.txt"); // Ορισμός αρχείου εξόδου
for (int i = 0; i<N; i++) { // Καταχώριση / Υπολογισμός
fin >> A3[i].name >> A3[i].t1 >> A3[i].t2;
A3[i].F = round((A3[i].t1 + A3[i].t2) / 2.0);
}
sort_struct(); // Ταξινόμηση εγγραφών
for (int i = 0; i<N; i++) // Εμφάνιση στοιχείων
fout << setw(10) << A3[i].name << setw(10) << A3[i].F << endl;
fin.close(); // Κλέισιμο αρχείων
fout.close();
return 0;
}