C Den Wald vor lauter Bäumen nicht sehen (Matrixmanipulationsproblem)

DeusExMachina

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
383
Moin Moin,

im rahmen meiner Experimente mit C habe ich folgende Aufgabe zu lösen:

Eine Matrix soll teilweise ausgelesen werden (nur die mittleren 256 Felder, also [128|128] bis [355|355]) und dann diese so in die alte Matrix geschrieben werden das diese werte jeweils vier Felder belegen (bei einem Bild wäre das eine Verdoppelung der Größe eines bestimmten Bereiches).

Meine Idee war der folgende Code aber ich habe das Problem das eben keine Überschreibung erfolgt und ich sehe den Fehler nicht vielleicht kann mich ja jemand in die richtige Richtung schubsen.

Code:
int change_data(short matrix[512][512])
{

	int zeile= 0;
	int spalte = 0;
	short h_matrix[256][256];
	int h_zeile=0;
	int h_spalte=0;
	short cache = 0;
	//Manupulieren der Daten in der Matrix
	printf("zoome\n");

	for(zeile = 0; zeile < 256; zeile++)							// Festlegen der äußeren Abbruchfunktion
	{
		for(spalte = 0; spalte < 256; spalte++)						// Festlegen der inneren Abbruchfunktion
		{			
				h_matrix[zeile][spalte] = matrix[zeile+128][spalte+128];
		}
	}

	zeile = 0;
	spalte = 0;
	h_zeile = 0;
	h_spalte = 0;

	while(zeile < 512)
	{
		printf("matrix %d , %d\n" ,zeile ,spalte);
		printf("hmatrix %d , %d\n" ,h_zeile ,h_spalte);
		while(spalte <512)
		{
			cache = h_matrix[h_zeile][h_spalte];
			matrix[zeile][spalte]    = cache;
			matrix[zeile][spalte+1]  = cache;
			matrix[zeile+1][spalte]  = cache;
			matrix[zeile+1][spalte+1]= cache;

			spalte = spalte + 2;
			h_spalte = h_spalte + 1;
		}
		zeile   = zeile + 2;
		h_zeile = h_zeile+1;
	}


return 0;
}
 
Zuletzt bearbeitet:
oh man ich wusste doch irgendsowas billiges hab ich übersehen, das kommt davon das ursprünglich mal als for schleife gedacht war.

Frage können in einer For-Schleife mehre Parameter benutzt werden?

Also:
Code:
for(para1=0, para2=0; para1<val1; para1+2, para2+1)
 
Zuletzt bearbeitet:
Ja wobei mir das bei den letzten beiden Parametern irgendwie falsch erscheint weil du keine Zuweisung machst (syntaktisch sollte es zwar funktionieren aber logisch macht es keinen Sinn).
 
schon klar das war auch völlig aus der luft gegriffen.

firma dankt aber schon mal

Noch das ganze als For-Schleife mal nachgereicht:
Code:
	//Zoomen
	for(zeile = 0, h_zeile = 0; zeile < 512; zeile = zeile+2, h_zeile = h_zeile+1)							// Festlegen der äußeren Abbruchfunktion
	{
		for(spalte = 0, h_spalte = 0; spalte < 512; spalte = spalte + 2, h_spalte = h_spalte + 1)			// Festlegen der inneren Abbruchfunktion
		{	
			//Befüllen der Zielmatrix mit den Selectierten Daten
			cache = h_matrix[h_zeile][h_spalte];
			matrix[zeile][spalte]    = cache;
			matrix[zeile][spalte+1]  = cache;
			matrix[zeile+1][spalte]  = cache;
			matrix[zeile+1][spalte+1]= cache;
		}
	}
 
Zuletzt bearbeitet:
Code:
for( int zeile = 0, h_zeile = 0; zeile < 512; zeile += 2, h_zeile++ )
  for( int spalte = 0, h_spalte = 0; spalte < 512; spalte += 2, h_spalte++ )
  {
    // ...
  }
So kannst du das auch schreiben. Ist imo übersichtlicher und insofern du die Variablen nur in der Schleife benötigst auch besser als wenn du sie vorher extra deklarierst, wodurch sie damit im ganzen Block gültig sind.
 
Das deklarieren im Schleifenkopf ist bei ANSI C nicht erlaubt.
Außerdem würde ich empfehlen für schleifen einzelne Buchstaben zu verwenden, also [i,j,...,z], da es einfacher zu lesen wird. Bei der Deklaration dann aber auf Kommentar achten!

(nur die mittleren 256 Felder, also [128|128] bis [355|355])
Also da musst dich verrechnet haben :D
1. [128][128] bis [384][384] wäre eine 256x256 Matrix was entsprechend 65.536 Felder wären
2. [224][224] bis [288][288] wäre eine 64x64 Matrix was 256 Felder ergibt und somit die inneren 256 Felder repräsentieren würde.

Du musst schon genau definieren was du wirklich möchtest....^^
 
Zurück
Oben