Ciao a tutti sono alle prime armi con la programmazione in c, e dopo aver compilato con successo il file in allegato, l'ho eseguito; il problema è che nel punto in cui c'è lo scambio tra l'elemnto più alto nella matrice con l'elemento più basso appare la scritta segmentation fault (core dumped), la cosa strana e che se inserisco dei numeri con 1 o 2 cifre il programma viene eseguito con successo, ma il 98% delle volte appare quel mex....Cosa posso fare?
codice:
#include<stdio.h>
# define N 6
/* inizio main */
main()
{
int mat[N][2], i, k, voto, matricola, min, max, x, y;
//inizio acquisizione dati
for(i=0; i<N; i++)
{
printf("\nInserire la matricola:\n");
scanf("%d", &mat[i][0]);
printf("\nInserire il voto:\n");
scanf("%d", &mat[i][1]);
}
//fine acquisizione dati
//inizio stampa 1
printf("\nStampa della matrice inserita\n");
printf("\nmat voto\n");
for(i=0; i<N; i++)
printf("%d %d\n", mat[i][0], mat[i][1]);
//fine stampa 1
//inserimento voto da cercare
do
{
printf("\nInserire un voto da cercare compreso tra 18 e 30\n");
scanf("%d", &voto);
}
while(voto<18 || voto>30);
//fine inserimento
//inizio ricerca per voto
k=0; //valore bandiera
printf("\nMatricole che hanno ottenuto %d:\n",voto);
for(i=0; i<N; i++)
{
if(mat[i][1]==voto)
{
k=1;
printf("%d\n", mat[i][0]);
}
}
if(k==0)
printf("Nessuna!\n");
//fine ricerca per voto
//inserimento matricola da cercare
printf("\nInserire la matricola da cercare\n");
scanf("%d", &matricola);
//fine inserimento
//inizio ricerca per matricola
k=0; //valore bandiera
printf("\nLa mat. %d ha conseguito l'esame?:\n",matricola);
for(i=0; i<N && k==0; i++)
{
if(mat[i][0]==matricola)
{
k=1;
printf("Esame sostenuto!\n");
}
}
if(k==0)
printf("Esame non sostenuto!\n");
//fine ricerca per matricola
//scambio matricola più alta con più bassa
min=mat[0][0];
max=mat[0][0];
for(i=1; i<N; i++)
{
if(min>mat[i][0])
{
min=mat[i][0];
x=mat[i][1];
}
if(max<mat[i][0])
{
max=mat[i][0];
y=mat[i][1];
}
}
mat[x][0]=max;
mat[x][1]=y;
mat[y][0]=min;
mat[y][1]=x;
//fine scambio matricole
//inizio stampa 2
printf("\nStampa della matrice ottenuta\n");
printf("\nmat voto\n");
for(i=0; i<N; i++)
printf("%d %d\n", mat[i][0], mat[i][1]);
//fine stampa 2
}
/* fine main */