2 Felder zu einem vereinen

nitro-Merlin

Mitglied
hi, ich will 2 felder: refa[] und refb[] zusammenfassen und refc[] aus diesen beiden feldern machen, finde aber keinen ansatz wie ich das bewerkstellige.
 
z.B.

Indem du zwei forschleifen baust.

Code:
int i,z;
char quelle1[index1];
char quelle2[index2];
char ziel[index1+index2]
for (i=0; i<index1;i++)
{
ziel [i]=quelle1[index1];
index1--;
}
z=i;
for (i=0; i< index2; i++)
{
z++;
ziel [z]=quelle2[index2];
index2--;z
}

So müsste es gehen!
 
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>

void eingabe(int ref[], int anzahl)
{
    int i;
    
    printf("\nEingabe der Elemente von der Tastatur: \n");

    for(i=0; i<anzahl; i++)
    {
     scanf("%i",&ref[i]);
	}
}


void zufall(int ref[], int anzahl)
{
	int i;

	 srand((unsigned)time(NULL));
     for(i=0; i<anzahl; i++)
     {

        ref[i] = rand()%100;
     }
}


void ausgabe(int ref[], int anzahl)
{
	int i;

	printf("\n\nDas Feld lautet:\n");

	for(i=0; i<anzahl; i++)
	{
	  printf("%4i\n",ref[i]);
	}

	printf("\n\n");
}


void bubblesort(int ref[], int anzahl)
{
  int end,i,sorts,tausch;

  do
  {
  sorts=0;
  end=anzahl-1;
  for(i=0;i<end;i++)
	if(ref[i]>ref[i+1])
		{
			tausch=ref[i];
			ref[i]=ref[i+1];
			ref[i+1]=tausch;
			sorts++;
		}

  }	while(sorts&&(end>2));
}



void merge(int refa[], int refb[], int refc[], int anzahla, int anzahlb)
{
	int i,z;//Zählvariablen

	int anzahlc;
	anzahlc = anzahla+ anzahlb; // Größe der kompletten Liste aus anzahla und anzahlb gebildet

	printf("anzahlc enthaelt %i elemente\n",anzahlc);

	for (i=0; i<anzahla;i++) // refa wird in liste refc geschrieben
	{
		refc[i]=refa[anzahla];
		anzahla--;
	}
	
	z=i;
	for (i=0; i< anzahlb; i++) // refb wird in liste refc geschrieben
	{
		z++;
		refc[z]=refb[anzahlb];
		anzahlb--;
		z;
	}
	
	bubblesort(refc, anzahlc);

	printf("refc lautet %i und anzahlc lautet %i\n", refc, anzahlc);
	
	ausgabe(refc, anzahlc);
		
}


int main(void)
{
  char ch;
  int anzahla, anzahlb;
  int felda[10];
  int feldb[10];
  int feldc[20];


  printf("\n\nEingabe der Werte\n");
  
  printf("Wieviel Zahlen sollen in Feld A sortiert werden?(Maximal 10)");
  scanf("%i",&anzahla);
  
  printf("Wieviel Zahlen sollen in Feld B sortiert werden?(Maximal 10)");
  scanf("%i",&anzahlb);

  printf("\nSollen die %i Zahlen von der Tastatur eingegeben werden (j/n) ? ",anzahla+anzahlb);
  scanf("%i",&ch);
  do ch = toupper(getchar()); while ((ch!='J')&&(ch!='N'));
  if (ch == 'J')
  	{
  	  eingabe(felda, anzahla);/*Eingabe der unsortierten Werte mit einer Funktion*/
	  eingabe(feldb, anzahlb);
	}
  else
  printf("\nErzeugung der Werte ueber Zufallszahlen \n");
  zufall(felda, anzahla);/*unsortierte Werte werden durch eine Funktion die Zufallszahlen erstellt realisiert*/
  zufall(feldb, anzahlb);
  
  ausgabe(felda, anzahla);  /*Ausgabe unsortiertes Feld*/
  ausgabe(feldb, anzahlb);
  
  printf("\n\nJetzt wird sortiert, bitte gedulden Sie sich einen Moment!\n");
  bubblesort(felda, anzahla);/*Feld wird mit bubblesort sortiert*/ 
  bubblesort(feldb, anzahlb);  
  
  ausgabe(felda, anzahla);/*Ausgabe sortiertes Feld*/
  ausgabe(feldb, anzahlb);
  
  printf("\nDie Funktion merge wird aufgerufen\n");
  /*Die beiden sortierten Felder A und B werden an Merge übergeben. Merge soll beide Felder mischen und gleichzeitig sortieren.*/
  merge(felda, feldb, feldc, anzahla, anzahlb);

 return 0;
}


also wenn ich den code so schreibe, dann bestimmt er die anzahl der elemte der refc[] richtig, aber leider haut er beim inhalt noch alles durcheinander.

also sprich merge wird die anzahl und die listen von a und b übergeben und merge soll die liste c draus machen, aber irgendetwas stimmt noch nicht so ganz. der fehler muss in merge liegen, leider kann ich ihn noch nicht entdecken.
 
nitro hat gesagt.:
Code:
void merge(int refa[], int refb[], int refc[], int anzahla, int anzahlb)
{
	int i,z;//Zählvariablen

	int anzahlc;
	anzahlc = anzahla+ anzahlb; // Größe der kompletten Liste aus anzahla und anzahlb gebildet

	printf("anzahlc enthaelt %i elemente\n",anzahlc);

	for (i=0; i<anzahla;i++) // refa wird in liste refc geschrieben
	{
		refc[i]=refa[anzahla];
		anzahla--;
	}
	
	z=i;
	for (i=0; i< anzahlb; i++) // refb wird in liste refc geschrieben
	{
		z++;
		refc[z]=refb[anzahlb];
		anzahlb--;
		z;
	}
	
	bubblesort(refc, anzahlc);

	printf("refc lautet %i und anzahlc lautet %i\n", refc, anzahlc);
	
	ausgabe(refc, anzahlc);
		
}

Deine Vermutung war richtig;)
So solltes funktionieren:

Code:
void merge(int refa[], int refb[], int refc[], int anzahla, int anzahlb)
{ 
        int i,z;//Zählvariablen
  
        int anzahlc;
        anzahlc = anzahla+ anzahlb; // Größe der kompletten Liste aus anzahla und anzahlb gebildet
  
        printf("anzahlc enthaelt %i elemente\n",anzahlc);
  
        for (i=0; i<anzahla;i++) // refa wird in liste refc geschrieben
        {
                refc[i]=refa[i];
        }
        
        z=i;
        for (i=0; i< anzahlb; i++) // refb wird in liste refc geschrieben
        {
                refc[z++]=refb[i];
        }
        
        bubblesort(refc, anzahlc);

        ausgabe(refc, anzahlc);

;)

Gruß

RedWing
 
naja erstes semster medieninformatik, also ka ob da was dagegenspricht, bin noch in der lernphase ;) also nicht zu heftig pls

aber erklärn kannst es mir natürlich gern
 
So war das nicht gemeint. Ich war mir nur nicht sicher ob irgendwas dagegen spricht.

Code:
    char eins[15] = "a b c";
    char zwei[15] = "d e f";
    strcat( eins, zwei );
    cout << eins << endl;

strcat fügt den Inhalt von zwei hinter eins ein und gibt eins zurück.
 
Zurück