Seite 2 von 3

Verfasst: 12.11.2006, 18:48
von Gal Martin
Ok bevor ich das hier poste soll halt jedem klar sein der sich das reinzieht das es nur zur hilf gedacht ist und nicht zum kopieren da es da schon einige probleme gegeben hat und ich sicher nicht draufzahlen will nur weil ich hilfsbereit bin:)

Code: Alles auswählen

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

struct point {int row,col;};
  struct MMinMax{ struct point cr_min;
                  double vmin;
                  struct point cr_max;
                  double vmax;
                };
		
		

double **Read(char *FileName,struct point *len_cr)
     {
        int i,j,r,c;
	double **pointer;
        FILE *infile;
	infile=fopen(FileName,"r");

	if(infile==NULL)
	{
	 printf("Fehler");
	 perror("reason");
	 exit(1);
	}
	fscanf(infile,"%i,%i",&r,&c);
	(*len_cr).row=r;          /*	len_cr->row=r;*/
	len_cr->col=c;		  /*    (*len_cr).col=c;   */
	
	
	pointer=(double**)malloc(r*sizeof(double*));
	
	for(i=0;i<r;i++)
	 {
	  pointer[i]=(double*)malloc(c*sizeof(double));
	 }
	for(i=0;i<r;i++)
	 {
	  for(j=0;j<c;j++)
	 {
	fscanf(infile,"%lf",&(pointer[i][j]));
	}
     }	
	return pointer;
	
	}



void Print(double ** pM, struct point len_cr)
     {
      int i,j;
      double k=0,l=0;
      k=len_cr.row;
      l=len_cr.col;
    
     
		for(i=0;i<k;i++)
		{printf("\n\n");
		for(j=0;j<l;j++)
		{
		printf("%13.lf",pM[i][j]);
		}
		}
		printf("\n\n");
	
     }






void SearchMinMax(double **pM, struct point len_cr, struct MMinMax *mm)
    {
    
    int i,j;
    
    double k=0,l=0;
    mm->vmax=pM[0][0];
    mm->vmin=pM[0][0];
    mm->cr_min.row=1;
    mm->cr_min.col=1;
    mm->cr_max.row=1;
    mm->cr_max.col=1;
    k=len_cr.row;
    l=len_cr.col;
    
    	for(i=0;i<k;i++)
	{
		for(j=0;j<l;j++)
		{
		
		if(mm->vmax<pM[i][j])
		
			{
			mm->vmax=pM[i][j];
			mm->cr_min.row=i+1;
			mm->cr_min.col=j+1;
			}	
			
				
		}
	
	}
	
	for(i=0;i<k;i++)
	{
		for(j=0;j<l;j++)
		{
		
		if(mm->vmin>pM[i][j])
		
			{
			mm->vmin=pM[i][j];
			mm->cr_max.row=i+1;
			mm->cr_max.col=j+1;
			}	
			
				
		}
	
	}
    }   


       


int main(int argc, char **argv)
    {/* Groesse der Matrix */
     struct point length;

     /* Min und Max */
     struct MMinMax mami;

     /* Zeiger fuer Matrix */
     double **m;

     int z;

     /* Pruefen der Anzahl derKommandozeilenparameter */
     if (argc != 2)
        {printf("Usage: %s filename\n",argv[0]);
         exit(1);
        }

     /* Einlesen der Matrix
        Filename ist 1. Kommandozeilenparameter
        Speicher wird in Read reseviert */
     m=Read(argv[1],&length);

     /* Pruefen ob gueltiger Zeiger */
     if (m==NULL)
        {printf("Error reading %s",argv[1]);
         exit(1);
         }

     /* Ausgeben der Groesse (durch Parameter length uebergeben)
        der Matrix */
     printf("%d lines, %d columns\n",length.row,length.col);

     /* Ausgeben der Matrix */
    Print(m,length);    

     /* Suche von Min und Max
        Uebergabe des Ergebnisses durch struct MMinMAx mami */
     SearchMinMax(m,length,&mami);

     /* Ausgeben der Werte */
     printf("Min: %f (%d,%d), Max: %f (%d,%d)\n",
         mami.vmin,mami.cr_max.row,mami.cr_max.col,
         mami.vmax,mami.cr_min.row,mami.cr_min.col );

     /* Freigabe des zuvor in Read(..) reservierten Speichers */
     for (z=0;z<length.row;z++)
         free(m[z]); 
     free(m);

     exit(0);

Verfasst: 12.11.2006, 21:49
von ibi
Die geöffnete Datei sollte auch irgendwo wieder geschlossen werden.
Außerdem würde ich Quelltext zwischen [code] und [/code] posten, damit die Einrückung erhalten bleibt.

Verfasst: 12.11.2006, 22:08
von pat
Habs mal auf code geändert...

Verfasst: 12.11.2006, 22:18
von ibi
Ok, wenn keine Einrückung drin is kann natürlich auch keine angezeigt werden. ;)

Verfasst: 12.11.2006, 22:40
von pat
Wurde euch das noch nicht beigebracht, dass Gliederung und Dokumentation wichtig sind?!

Verfasst: 12.11.2006, 22:46
von ibi
Ja, v.a. ersteres erleichtert das Korrigieren erheblich.

Verfasst: 12.11.2006, 22:49
von Gal Martin
ich bin über ssh drauf und hab dann mit cat einfach den text raus und in die mail da wird das einrücken nicht berücksichtigt
wenn ich morgen in da uni bin kann ich das übersichtlichere einfügen :)

Verfasst: 12.11.2006, 23:32
von ibi
Da hast aber irgendwas falsch gemacht.
Wenn ich einen Quelltext per Mail schicke (funktioniert ohne cat! Wieso machen das alle mit cat?), dann bleibt die Formatierung drinnen.

Befehl: mail adresse@irgendwo.example -s "Betreff" < Quelltext.c
--> cat ist überflüssig.
Sollte mit cat aber auch funktionieren.

Verfasst: 13.11.2006, 00:03
von m0tzerl
kewl, danke. hatte nur einen syntaxfehler.

ach, übrigens: hab einen kleinen bug in deinem prog entdeckt:
in der Fkt. SearchMinMax solltest du vor den for-schleifen noch die definitionen:

(*mm).cr_min.row=1;
(*mm).cr_min.col=1;
(*mm).cr_max.row=1;
(*mm).cr_max.col=1;

einbringen, da, wenn zufällig das Element in zeile 1 und spalte 1 das minimum bzw maximum ist, wird diesen nie ein wert zugewiesen und dann zeigt er vermutlich nachher an dass es in zeile 0 und spalte 0 steht. das sollte nicht sein ;)

mfg m0tzerl

Verfasst: 13.11.2006, 12:54
von Gal Martin
aja danke wär mir nicht aufgefallen :) ich stell mal das neue rauf weil im alten habe ich nicht über dir print fkt die werte aufgerufen.

Verfasst: 13.11.2006, 13:14
von ibi
Die Einrückung der for-Schleifen schaut noch etwas komisch aus, weil Du zum Einrücken sowohl TAB als auch SP verwendest.
Leider zeigt nicht jedes Programm TAB als 8*SP an, manche verwenden weniger oder auch mehr. Deshalb sollte man zum Einrücken nur TAB oder nur SP verwenden. (Bei manchen Programmiersprachen wie z.B. Python erzeugt die gemischte Verwendung manchmal sogar Syntaxprobleme.)

Verfasst: 13.11.2006, 15:29
von m0tzerl
is doch egal. macht sowieso jeder ein bissl anders mit der formatierung. hauptsache ich kenn mich aus bei meinem prog...

Verfasst: 13.11.2006, 15:49
von theo
m0tzerl hat geschrieben:is doch egal. macht sowieso jeder ein bissl anders mit der formatierung. hauptsache ich kenn mich aus bei meinem prog...

Du wirst dich bedanken wenn du mal mit dem Code von wem Andern arbeiten musst.

Verfasst: 13.11.2006, 16:12
von ibi
m0tzerl hat geschrieben:is doch egal. macht sowieso jeder ein bissl anders mit der formatierung.
Naja, wenn jetzt statt einer Einrückung auf einmal eine "Ausrückung" angezeigt wird, dann schaut das etwas komisch aus.
Hier ein Beispiel:

Code: Alles auswählen

	for(i=0;i<r;i++)
	 {
	  for(j=0;j<c;j++)
	 {
	fscanf(infile,"%lf",&(pointer[i][j]));
	}
     }	
Ich will jetzt nicht den Autor kritisieren, an solche Sachen denkt man einfach nicht (ist mir auch schon passiert).
theo hat geschrieben:Du wirst dich bedanken wenn du mal mit dem Code von wem Andern arbeiten musst.
Ja, ich freu mich schon. ;)
Manche Fehler findet man viel leichter, wenn der Text eingerückt ist. Vor allem falsch gesetzte Klammern und sowas.

Verfasst: 13.11.2006, 17:04
von pat
theo hat geschrieben:Du wirst dich bedanken wenn du mal mit dem Code von wem Andern arbeiten musst.
Geil, ich hätt nie glaubt, dass ich den Spruch nochmal hör! :D