PDA

View Full Version : [PROGRAMMAZIONE IN C] Problema bubble sort


Kurjak
31-01-2006, 11:11
Ciao, devo fare un esercizio per il 2 febbraio, ma c'è qualcosa che non va:
il testo dell'esercizio è su http://vigna.dsi.unimi.it/labprog/prog.php,
ma il mio programma non fa l'ordinamento del vettore come lo vorrei io... qualcuno sa darmi una mano?
Grazie... :)

--------------------------------------------------------------------
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

FILE *input;
FILE *output;

void aggiungi_iniziale (char c, int iniziali[26]) {
int ris;
ris = c-'a';
if ((ris>=0) && (ris<26 )) {
printf("\nInserisco %c in %d;",c,ris);
iniziali[ris]++;
getchar();
}else{
printf("\nErrore in add_initials");
}
}


void bubble_sort (int* iniziali, char* letterale) {
int i,k;
int num_temp;
char let_temp;

for(i=0;i<25;i++){
for(k=i;k<25;k++){
if(iniziali[k]<iniziali[k+1]){
printf("\n %c %d e %c %d...",iniziali[k],letterale[k],iniziali[k+1],letterale[k+1]);
num_temp=iniziali[k];
let_temp=letterale[k];
iniziali[k]=iniziali[k+1];
letterale[k]=letterale[k+1];
iniziali[k+1]=num_temp;
letterale[k+1]=let_temp;
}
}
}
getchar();
}



int main () {

int i;
char buff;
char letterale[26] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L','M', 'N', 'O', 'P' , 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
int iniziali[26] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 , 0};

input = fopen("input.txt" , "r");
output = fopen("output.txt", "w+" );

/* Cancellare la riga sottostante e vedere se funziona lo stesso...*/

if(isalpha('’')==1) printf("Qualcosa non torna\n"); else printf("Qualcosa Š tornato\n");

getchar();

printf("\nComincio analisi file...");
buff = tolower (getc (input));

while (buff != EOF){
if (isalpha(buff)){
aggiungi_iniziale(tolower(buff),iniziali);
}

while(isalpha(buff)){
if(buff==EOF) break;
buff=getc(input);
}

while(!isalpha(buff)){
if(buff==EOF) break;
buff=getc(input);
}
}
if(buff==EOF){
printf("\nControllo file completato...\n");
getchar();
fclose(input);
}else{
printf("\nC'e' qualche errore...\n");
}

bubble_sort (iniziali, letterale);

for(i=0;i<26 && iniziali[i]!=0;i++){
fprintf (output, "%c %d\n", letterale[i], iniziali[i]);
printf("\nLettera %c presente %d volte...",letterale[i],iniziali[i]);
getchar();
}
fclose (output);
printf("\nOK!!");
getchar();
return 0 ;
}