Programma c++ che non funziona

di il
8 risposte

Programma c++ che non funziona

Buongiorno,
da più giorni sto provando a fare questo programma, ma quando faccio partire il debug entra in un loop. Qualcuno mi potrebbe aiutare? allego il mio svolgimento: Grazie in anticipo!!


Mio svolgimento:
#include <iostream>
#define DIM 6
using namespace std;

void maxnext(int a[], int b[], int *c)
{

	int k, j, trovato;

	*c = 0;

	for (k = 0; k < DIM; k++)
	{
		trovato = 0;
		j = k;
	}
	while (trovato == 0 && j < DIM && j <= k + a[k])
	{
		if (a[k] <= b[j])
		{
			trovato = 1;
		}
		j++;
	}
	if (trovato == 0)
	{
		a[k] = b[j];
		*c = *c + 1;
	}
}

int main()
{
	int x[DIM], y[DIM];
	int i, k;
	cout << "carico y:";
	for (i = 0; i < DIM; i++)
	{
		cin >> y[i];
	}
	do
	{
		cout << "carico x:";
		for (i = 0; i < DIM; i++)
		{
			do
			{
				cin >> x[i];
			} while (x[i] <= 0);
		}
		maxnext(x, y, &k);
	} while (k!=DIM);
	return 0;
}

8 Risposte

  • Re: Programma c++ che non funziona

    Dacci un solo buon motivo per cui noi dovremmo impiegare il nostro tempo per leggere quello che scrivi quando tu non impieghi neanche un secondi del tuo per leggere il regolamento del forum?!?!?!?!?!
  • Re: Programma c++ che non funziona

    Usa i tag CODE altrimenti, come puoi vedere, il codice diventa illeggibile
  • Re: Programma c++ che non funziona

    Hai tolto dal testo il testo del compito: male!
    #include <iostream>
    #define DIM 6
    
    Nel testo che hai fatto sparire c'era scritto 100. Quanto scritto nel testo di un compito/esame/progetto/lavoro non va MAI cambiato arbitrariamente. Se necessario si fa ma si giustifica.

    
    void maxnext(int a[], int b[], int *c)
    
    Usa nomi SIGNIFICATIVI per le variabili: impieghi due secondi in più per scriverli e un sacco di tempo in meno a dorreggere/debuggare il codice.
    
    {
    
    	int k, j, trovato;
    
    	*c = 0;
    
    	for (k = 0; k < DIM; k++)
    	{
    		trovato = 0;
    		j = k;
    	}
    
    Quel ciclo è del tutto inutile, proprio del tutto!
    
    	while (trovato == 0 && j < DIM && j <= k + a[k])
    	{
    		if (a[k] <= b[j])
    		{
    			trovato = 1;
    		}
    		j++;
    	}
    	if (trovato == 0)
    	{
    		a[k] = b[j];
    		*c = *c + 1;
    	}
    }
    
    Non sapendo cosa devi fare e mancando del tutto i commenti (perché?) diventa difficile capire il codice.

    
    int main()
    {
    	int x[DIM], y[DIM];
    	int i, k;
    	cout << "carico y:";
    	for (i = 0; i < DIM; i++)
    	{
    		cin >> y[i];
    	}
    	do
    	{
    		cout << "carico x:";
    		for (i = 0; i < DIM; i++)
    		{
    			do
    			{
    				cin >> x[i];
    			} while (x[i] <= 0);
    		}
    		maxnext(x, y, &k);
    	} while (k!=DIM);
    	return 0;
    }
    Spiega, in italiano e con parole semplici cosa deve fare la funzione maxnext. Magari scopriamo che passare i parametri per valore non va bene!
  • Re: Programma c++ che non funziona

    Praticamente quando faccio partire il debug il programma entra in un loop e mi da un codice di errore.
    Questo è il testo
    Descrivere un algoritmo codificato in linguaggio C/C++ che:
    1. definisce la funzione maxnext con parametri:
    • a di tipo vettore di 100 int;
    • b di tipo vettore di 100 int;
    • c di tipo puntatore/riferimento ad un int;
    Si suppone i valori contenuti nel vettore a siano numeri non negativi. Per ogni posizione k del vettore a, se a[k] è maggiore di ogni valore del vettore b tra le posizioni k e k+a[k] (le posizioni oltre la dimensione del vettore non vanno considerate), la funzione deve scrivere in a[k] il valore b[k]. Inoltre la funzione deve scrivere nell’area di memoria puntata/riferita da c il numero di modifiche fatte al vettore a. Ad esempio, se il vettore a è il seguente:
    2 3 5 1 4 6 1 3 0 8
    e il vettore b contiene
    1 5 2 -1 7 -6 -2 1 5 3
    Alla fine dell’elaborazione il contenuto vettore a sarà:
    2 3 5 1 4 -6 1 3 0 3
    e l’area di memoria puntata/riferita da c conterrà il valore 2.
    2. nella funzione main
    I. dichiarare un vettore di nome x di 100 int e un vettore di nome y di 100 int;
    II. una variabile di nome k di tipo int;
    III. inserire (uno per ogni posizione) 100 valori letti da standard input nel vettore y;
    IV. ripetere le seguenti operazioni fino a quando, dopo l’esecuzione della funzione maxnext, i vettori x e y contengono gli stessi valori:
    a. inserire (uno per ogni posizione) 100 valori letti da standard input nel vettore x (durante l’esecuzione inserire valori positivi);
    b. eseguire la funzione maxnext applicata al vettore x (vettore che deve essere modificato dalla funzione), al vettore y e inserendo il risultato intero nella variabile k.
  • Re: Programma c++ che non funziona

    Di quale errore si tratta?
  • Re: Programma c++ che non funziona

    -1073741510 (0xc000013a) codice che mi dava
  • Re: Programma c++ che non funziona

    Quello non è un errore vero e proprio ma solamente l'indicazione che hai premuto Ctrl-C per terminare il programma.

    Puoi mostrare cosa inserisci? Quali valori? Cosa dovrebbe succedere?
  • Re: Programma c++ che non funziona

    Consiglio: EVITA di inserire i dati da tastiera ogni volta.
    perdi un SAAAAAACCO di tempo in un'attivita' inutile per la correzione dell'implementazione.

    Quando avrai il programma funzionante, potrai ripristinare l'imput da tastiera
Devi accedere o registrarti per scrivere nel forum
8 risposte