domenica 12 febbraio 2017

COMPITO 2 (PICCIALLI, CIANESE)

COMPITO 2 PALINDROMI

#include<iostream>
#include<fstream>
#include<string>

#define MAX_SIZE 100

using namespace std;

struct coppie{
int numero;
int occorrenze;
};

bool is_palindromo(int n);
void carica_numeri(string percorso, coppie lista[], int &riemp);
int is_presente(int n, coppie lista[], int riemp);
void ordina_lista(coppie lista[], int riemp);
void stampa_lista(coppie lista[], int riemp);

int main(){
coppie lista[MAX_SIZE];
string percorso_file;
int riemp = 0;

percorso_file = "C:\\fondamenti\\compito2\\file.txt";

carica_numeri(percorso_file, lista, riemp);
if (riemp == -1){
system("PAUSE");
return -1;
}

ordina_lista(lista, riemp);

stampa_lista(lista, riemp);

system("PAUSE");
return 0;
}

bool is_palindromo(int n){
int a[20], riemp=0;
bool palindromo = true;
int i;
do{
a[riemp] = n % 10;
riemp++;
n /= 10;
} while (n != 0);

i = 0;
while (i < riemp/2 && palindromo){
if (a[i] != a[riemp - i - 1])
palindromo = false;
i++;
}
return palindromo;
}

void carica_numeri(string percorso, coppie lista[], int &riemp){
int n, index;
ifstream mioFile;
mioFile.open(percorso, ios::in);
if (!mioFile){
cout << "Errore nell'apertura!\n";
riemp = -1;
return;
}
while (!mioFile.eof()){
mioFile >> n;
if (is_palindromo(n)){
index = is_presente(n, lista, riemp);
if (index != -1)
lista[index].occorrenze++;
else{
lista[riemp].numero = n;
lista[riemp].occorrenze = 1;
riemp++;
}
}
}
mioFile.close();
}

int is_presente(int n, coppie lista[], int riemp){
bool presente = false;
int i = 0;
int posizione;
while (!presente && i < riemp){
if (lista[i].numero == n){
presente = true;
posizione = i;
}
i++;
}
if (!presente)
posizione = -1;
return posizione;
}

void ordina_lista(coppie lista[], int riemp){
int sw;
coppie temp;
do{
sw = 0;
for (int i = 0; i < riemp - 1; i++){
if (lista[i].occorrenze < lista[i + 1].occorrenze){
temp = lista[i];
lista[i] = lista[i + 1];
lista[i + 1] = temp;
sw++;
}
}
} while (sw > 0);
}

void stampa_lista(coppie lista[], int riemp){
for (int i = 0; i < riemp; i++){
cout << lista[i].numero << " compare " << lista[i].occorrenze << " volte.\n";
}
}

Nessun commento :

Posta un commento