Programma c++ che non funziona

di Anonimizzato26399 il
8 risposte
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

  • 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?!?!?!?!?!
  • Usa i tag CODE altrimenti, come puoi vedere, il codice diventa illeggibile
  • 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!
  • 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.
  • Di quale errore si tratta?
  • -1073741510 (0xc000013a) codice che mi dava
  • 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?
  • 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