Übung nächste woche dienstag wichtig!!

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Beitrag 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);
Zuletzt geändert von Gal Martin am 13.11.2006, 12:56, insgesamt 1-mal geändert.
WO IS DA GAL?!?! :twisted:
© Wiesinger

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag 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.

Benutzeravatar
pat
Beiträge: 418
Registriert: 07.10.2006, 16:11
Kontaktdaten:

Beitrag von pat »

Habs mal auf code geändert...
Ich hab das Forum lieb, weil es schon so lange da ist und man auch Infos von höheren Semestern bekommt :)

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Ok, wenn keine Einrückung drin is kann natürlich auch keine angezeigt werden. ;)

Benutzeravatar
pat
Beiträge: 418
Registriert: 07.10.2006, 16:11
Kontaktdaten:

Beitrag von pat »

Wurde euch das noch nicht beigebracht, dass Gliederung und Dokumentation wichtig sind?!
Ich hab das Forum lieb, weil es schon so lange da ist und man auch Infos von höheren Semestern bekommt :)

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag von ibi »

Ja, v.a. ersteres erleichtert das Korrigieren erheblich.

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Beitrag 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 :)
WO IS DA GAL?!?! :twisted:
© Wiesinger

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag 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.

m0tzerl
Beiträge: 89
Registriert: 06.11.2006, 00:16

Beitrag 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

Gal Martin
Beiträge: 194
Registriert: 11.10.2006, 14:53

Beitrag 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.
WO IS DA GAL?!?! :twisted:
© Wiesinger

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag 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.)

m0tzerl
Beiträge: 89
Registriert: 06.11.2006, 00:16

Beitrag von m0tzerl »

is doch egal. macht sowieso jeder ein bissl anders mit der formatierung. hauptsache ich kenn mich aus bei meinem prog...

Benutzeravatar
theo
Beiträge: 39
Registriert: 11.10.2006, 13:54
Wohnort: Wien / Höchst
Kontaktdaten:

Beitrag 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.
grün ist gelber als blau

Benutzeravatar
ibi
Dr. h.c.
Beiträge: 443
Registriert: 12.10.2006, 20:34
Wohnort: Kagran / Donaustadt

Beitrag 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.

Benutzeravatar
pat
Beiträge: 418
Registriert: 07.10.2006, 16:11
Kontaktdaten:

Beitrag 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
Ich hab das Forum lieb, weil es schon so lange da ist und man auch Infos von höheren Semestern bekommt :)

Antworten

Zurück zu „Datenverarbeitung für Physiker I“