Crash programma

di il
14 risposte

Crash programma

Ciao a tutti, ho un problema, una volta finito l'inserimento dei dati il programma crasha. Mi potete dare una mano? La traccia è questa:
Scrivere il codice di una funzione che riceva come paramentro di input un array di n numeri interi ed un intero k>1 ed elimini dall'array tutti i multipli di k, spostando a sinistra gli elementi successivi. Io ho scritto questo ma il programma mi crasha dopo l'inserimento degli interi nel vettore. Grazie.
#include <stdio.h>
#include <stdlib.h>
#define n 10
void TrovareMultipli(int i,int k,int V[n]);
	int TrovareResto(int k,int V[n],int i);
int main(){
	int k, i, V[n];
	printf("inserisci k:");
	scanf("%d",&k);
	i=0;
	while(i<n){
	printf("inserisci numero nel vettore:");
	scanf("%d",&V[i]);
	i++;
	}
	TrovareMultipli(i,k,V);
return 0;
}
void TrovareMultipli(int i,int k, int V[n]){
		int r,p;
		i=0;
		while(i<n){
			r=TrovareResto(k,V,i);
			if(r==0){
				p=i;
				while(p<n){
				V[p]=V[p+1];
				p++;
				}
			}
					i++;
		}
		i=0;
			while(i<n){
			printf("il vettore e':%d",V[i]);
			i++;
			}
	}
int TrovareResto(int k, int V[n], int i){
	int r;
	r=V[i];
	while(r>=k){
		r=r-k;
	}
	return r;
}

14 Risposte

  • Re: Crash programma

    Qui
    
    			while (p<n) {
    				V[p] = V[p + 1];
    				p++;
    			}
    
    alla fine del ciclo V[p +1] va fuori dal vettore ... rivedi p<n
  • Re: Crash programma

    Non riesco a capire come modificarlo
  • Re: Crash programma

    Allora non hai capito cosa ti ho scritto o on lo hai letto con attenzione. Quanto vale p+1 alla fine di quel ciclo?
  • Re: Crash programma

    Si quello l'ho capito che alla fine p+1 non esiste perché i numeri sono 10 però non so come aggiustare. Ho provato qualche soluzione però il programma crasha lo stesso quindi penso sia sbagliata a meno che non abbia sbagliato qualcos'altro.
  • Re: Crash programma

    Beh, ragiona ... p+1 non deve mai diventare 10 quindi p non deve diventare 9 ovvero non deve superare 8 ... quindi, ti ripeto, concentrati su

    while (p<n)
  • Re: Crash programma

    Cosi?
    if(r==0){
    		p=i;
    		while(p<n-1){
    		V[p]=V[p+1];
    		p++;
    		}
    	n=n-1;
    }
  • Re: Crash programma

    Ok ma questo

    n=n-1;

    perché l'hai aggiunto? A che serve?
  • Re: Crash programma

    Per rimuovere l'ultimo elemento?(non so se si possa fare). Comunque crasha sia senza n=n-1; che con, quindi devo aver sbagliato qualche altra cosa.
  • Re: Crash programma

    Questo

    while(p<n-1){

    basta per evitare il crash
  • Re: Crash programma

    Non so che dire, mi crasha lo stesso
  • Re: Crash programma

    #define n 10
    n=n-1;
    La sai la differenza tra processore e preprocessore? E poi dai un nome ragionevolmente lungo alle macro, chiamarla n significa che ci piace cercare le rogne
  • Re: Crash programma

    Si ma n=n-1; l'ho tolto
  • Re: Crash programma

    Stai facendo un casino per un programma che deve fare due cose in croce
    
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_N 10
    
    int TrovareResto(int k, int V[MAX_N], int i){
        int r = V[i];
        while(r >= k)
    	r = r - k;
        return r;
    }
    
    void EliminareMultipli(int k, int V[MAX_N]){
        int i, n = 0, W[MAX_N];
        for(i = 0; i < MAX_N; i++)
            if(TrovareResto(k,V,i))
                W[n++] = V[i];
        printf("Il vettore modificato e':");
        for(i = 0; i < n; i++)  
            printf(" %d", W[i]);
    }
    
    int main(){
        int k, i, V[MAX_N];
        printf("Inserisci k:");
        scanf(" %d", &k);
        for(i = 0; i < MAX_N; i++){
    	printf("Inserisci numero nel vettore:");
    	scanf(" %d",&V[i]);
        }
        EliminareMultipli(k,V);
     return 0;
    }
    
    Prova così. Se non va usa il debugger e indica il punto esatto dove va in crash
  • Re: Crash programma

    Ho risolto, grazie a tutti!
Devi accedere o registrarti per scrivere nel forum
14 risposte