Άσκηση 6

Δημιουργήστε πρόγραμμα που διαβάζει τα ονόματα και βαθμολογίες (ακέραιοι 1 – 20) 10 μαθητών και τα τοποθετεί σε 2 παράλληλους πίνακες. Στη συνέχεια:

  1. Δημιουργήστε συνάρτηση που τυπώνει μορφοποιημένα το περιεχόμενο των 2 πινάκων.
  2. Συνάρτηση που υπολογίζει ποιος έχει την πιο ψηλή βαθμολογία;
  3. Ποια βαθμολογία είναι η πιο χαμηλή;
  4. Συνάρτηση που υπολογίζει το μέσο όρο των βαθμολογιών;
  5. Συνάρτηση που τυπώνει τους 2 πίνακες στην οθόνη ταξινομημένους κατά αύξουσα με βάση το όνομα. (Bubble sort)
  6. Τυπώστε τους 2 πίνακες στην οθόνη ταξινομημένους σε αύξουσα με βάση τη βαθμολογία. (Insertion sort)
  7. Συνάρτηση που υπολογίζει πόσοι μαθητές έχουν βαθμό 20; (Sequential search)
  8. Μπορεί να γίνει Binary search στο πίνακα των βαθμολογιών και αν ναι γιατί; Σε περίπτωση που ισχύει να βρεθεί μαθητής που έχει βαθμό 15.

 

#include <iostream>
#include <string>
#include <iomanip>

#define SIZE 10

using namespace std;

void printArrays(string names[], int grades[]){
    for(int i=0;i<SIZE;i++){
        cout<<names[i]<<setw(20)<<grades[i]<<endl;
    }
}

string highestGrade(string names[],int grades[]){
    int maxGrade=grades[0];
    int maxi=0;
    for(int i=1;i<SIZE;i++){
        if(grades[i]>maxGrade){
            maxGrade=grades[i];
            maxi=i;
        }
    }
    return names[maxi];
}

double average(int grades[]){
    int sum=0;

    for(int i=0;i<SIZE;i++){
        sum+=grades[i];
    }
    return (double)sum/SIZE;
}

void bubbleSortName(string names[],int grades[]){
    int temp;
    string tempS;
	for (int i = 0; i<SIZE - 1; i++) {
		for (int j = i + 1; j<SIZE; j++) {
			if (names[i]>names[j]) {
				temp = grades[i];
				grades[i] = grades[j];
				grades[j] = temp;
				tempS=names[i];
				names[i]=names[j];
				names[j]=tempS;
			}
		}
	}
	printArrays(names,grades);
}

int student20(int grades[]){

    int counter=0;
    for(int i = 0; i < SIZE; i++)
		if (grades[i]==20)
			counter+=1;
    return counter;
}

int main(){
    int i,j,lowestGrade, temp;
    string tempS;

    /*
    string names[SIZE];
    int grades[SIZE];

    for(i=0;i<SIZE;i++){
        cout<<"Name: ";
        cin>>names[i];
        cout<<"Grade: ";
        cin>>grades[i];
    }*/
    string names[SIZE]={"Maria","Nikos","Popi","Mike","Nandia","Anna","Stella","Tasos","Lena","Nana"};
    int grades[SIZE]={15,20,2,15,20,3,2,17,14,18};

    printArrays(names,grades);

    cout<<"Student with the highest grade is "<<highestGrade(names,grades)<<endl;

    lowestGrade=21;
    for(i=0;i<SIZE;i++){
        if(grades[i]<lowestGrade){
            lowestGrade=grades[i];
        }
    }
    cout<<"The lowest grade is "<<lowestGrade<<endl;

    cout<<"Average grade is "<<average(grades)<<endl;

    bubbleSortName(names,grades);

	for (i = 1; i<SIZE; i++) {
		temp = grades[i];
		tempS=names[i];
		j = i - 1;
		while (j >= 0 && grades[j]>temp) {
			grades[j + 1] = grades[j];
			names[j+1]=names[j];
			j--;
		}
        grades[j + 1] = temp;
        names[j+1]=tempS;
	}

	cout<<endl;
	printArrays(names,grades);

	cout<<endl<<"Number of students with grade 20 is "<<student20(grades)<<endl;

	//Binary Search available because array is already sorted
	int first = 0, last = SIZE - 1, mid;
	bool found=false;
	while (first <= last) {
		mid = (first + last) / 2;
		if (grades[mid] == 15){
            found=true;
            cout<<"Student with grade 15 is "<<names[mid];
            break;
		}
		else
			if (15 < grades[mid])
				last = mid - 1;
			else
				first = mid + 1;
	}
	if(found==false){
        cout<<"Student with grade 15 is NONE";
	}

    return 0;
}