Esercizio di merging ordinato a due vie

di il
7 risposte

Esercizio di merging ordinato a due vie

Buonasera ragazzi!
Ho bisogno di un aiutino con questo esercizio:
Leggere in input una sequenza A di n numeri interi. Si supponga che la sequenza letta in input sia già ordinata in ordine crescente. Generare in modo casuale una seconda sequenza B di m numeri interi ed inserire gli elementi della seconda sequenza B nella posizione corretta nella prima sequenza A in modo che A continui ad essere ordinato.
Stampare in output la sequenza A

/*
 ============================================================================
 Name        : Esercizio19Dicembre.c
 Author      : 
 Version     :
 Copyright   : Your copyright notice
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>




int main(void) {


	//caricamento del primo vettore

	int elementi;
	int i;
	printf("Quanti numeri vuoi inserire? \n");
	scanf("%d", &elementi);
	int vetA[elementi];
	i=0;
	while (i<elementi)
		{
			printf("inserisci il %d elemento del vettore \n", i);
			scanf("%d", &vetA[i]);
			i++;
		}

	//ordinamento crescente valori inseriti

	i=0;
	int j;
	int tmp;

	i=0;
	while(i<elementi)
	{
		j=i+1;
		while(j<elementi)
		{
			if(vetA[i]>vetA[j])
			{
				tmp=vetA[i];
				vetA[i]=vetA[j];
				vetA[j]=tmp;
			}
			j++;
		}
		i++;
	}

	//stampa

	i=0;
	printf("il vettore inserito e': \n");
	while(i<elementi)
		{
			printf("| %d |", vetA[i]);
			i++;
			}
		printf("\n");



	//generare sequenza random
	int elementi2;

	printf("Quanti numeri vuoi inserire? \n");
	scanf("%d", &elementi2);
	srand((unsigned)time(NULL));
	int vetB[elementi2];
	i=0;
	while(i<elementi2)
	{
		vetB[i]=rand()%100;
		i++;
	}

	//stampa2

	i=0;
	printf("il vettore inserito e': \n");
	while(i<elementi2)
		{
			printf("| %d |", vetB[i]);
			i++;
		}
	printf("\n");

	//inserimento dati random in vet1

	i=0;
	while(i<elementi2)
		{
		j=0;
		while(j>=0 && vetA[i]>vetB[j])
			{
				vetA[i+1]=vetB[i];
				j--;
			}
			vetA[i+1]=vetB[j];
		i++;
		}

	//stampa3

	i=0;
		printf("il vettore finale e': \n");
		while(i<elementi)
			{
			j=0;
			while(j<elementi2)
				{
				printf("| %d |", vetA[i+j]);
				j++;
				}
			i++;
			}
			printf("\n");

	system("pause");
	return 0;
}
Il problema sta nell'ultima stampa ovvero quella del vettore completo di elementi iniziali dati in input più elementi generati random.
Grazie in anticipo.

7 Risposte

  • Re: Esercizio di merging ordinato a due vie

    Il problema ... quale problema?
  • Re: Esercizio di merging ordinato a due vie

    Questa funzione mi da un stampa sbagliata
    
    //stampa3
    
       i=0;
          printf("il vettore finale e': \n");
          while(i<elementi)
             {
             j=0;
             while(j<elementi2)
                {
                printf("| %d |", vetA[i+j]);
                j++;
                }
             i++;
             }
             printf("\n");
    
    Dovrebbe stamparmi in un singolo vettore gli elementi del Vettore A, quindi quelli inseriti in input, più quelli del VetB, ovvero quelli generati random tutti in ordine crescente
  • Re: Esercizio di merging ordinato a due vie

    A occhio mi sembra che ci sia tanto codice sbagliato, non solo in questa parte (che comunque non è una funzione).

    Se tutti gli elementi vanno inseriti in vetA allora basta un ciclo solo con

    i<elementi+elementi2

    ma mi pare che vetA sia dimensionato male perché può accettare solo i primi, non ha spazio per tutti.
  • Re: Esercizio di merging ordinato a due vie

    L'esercizio nel complesso funziona e ogni singola istruzione svolge il suo compito..
    in ogni caso provo come mi hai detto tu
  • Re: Esercizio di merging ordinato a due vie

    Ho provato come mi hai detto e mi da questo come risultato:
    Allegati:
    20789_d86bfd816bb998c6d54e02f81c85296e.png
    20789_d86bfd816bb998c6d54e02f81c85296e.png
  • Re: Esercizio di merging ordinato a due vie

    Stai solo scrivendo in memoria in zone a caso, non va bene, altro che funzionare...

    Prova a fare un po' di debugging e ferma l'esecuzione subito prima la stampa finale. Esamina il contenuto del vettore A
  • Re: Esercizio di merging ordinato a due vie

    Non riesco a capire a cosa ti riferisci, tutti i punti della traccia sono sviluppati e danno il risultato richiesto
Devi accedere o registrarti per scrivere nel forum
7 risposte