Kleines Prog in C++ schreiben

MatzeViert

Grünschnabel
Moin.
Erstmal, ich bin neu hier und kenn mich hier nicht wirklich aus.
So, jetzt zu meinem Anliegen.
Ich bin Student für Fahrzeugtechnik im 2 Semester, und habe riesige Probleme mit meinem Projekt als Abschlussarbeit der Vorlesung Informatik 2.
Ich suche deswegen jemanden aus der Gegend um ES oder S, der mir helfen kann, das Prog an diesem Wochenende zu schreiben.
Oder alternativ auch jemand aus dem Rest der großen Welt, da wäre nur kein Meeting zum zusammenschreiben möglich.
Die Aufgabe besteht kurz aus folgenden Teilen:

- Auslesen von 12 Drehmomenten, und zwei Drehzahlen aus einer dat.Datei
- Ablegen der Daten in einem Array
- Zuweisung der 12 Drehmomente an neu geschaffene Stützstellen und an die Anfangs und Enddrehzahl aus der dat. (Alle 500 U/min gibt es eine Drehmomentsangabe)
- Ausgeben in Tabellenform
- Ausgabe als Grafik
- Berechnung von Drehmomenten zwischen den festen Drehzahl-Momentbeziehungen mittels einer linearen Interpolation.


Wer sich das zutraut, und wer mir gern helfen möchte, dem lass ich drei Dateien aus der Aufgabenstellung zukommen (dat - Datei, Doc als Anleitung und eine cpp datei), und dazu noch eine selbstgemacht Excel-tabelle und Grafik zur Veranschaulichung.
Über Resonanz in jeglicher Form würd ich mich echt freuen, ich verzweifel nämlich schon am auslesen der Daten.
Gruss Matze

P.S.: Nochmals meine e-Mail: m.viert@web.de
 
Ähm nix für ungut, aber wenn du in deinem Studium schon Informatik Vorlesungen hast, dann solltest du doch wissen, wie das ganze von Statten gehen soll.
Oder hast du etwa nicht an den Vorlesungen teilgenommen (soll ja Studenden geben die sowas tun :-) ).
Also im grundegenommen ist das ganze nicht so schwer, wenn du allerdings von Programmierung keine Ahnung hast, dann ist das schon schwer. Aber dann bezweifle ich, daß es einen Sinn macht wenn dir das jemand programmiert, da hast du zwar denn deinen A... gerettet, aber in Zukunft wird dir das ja auch nix helfen.
Also streng dich an und leg los. Wenn du dann irgendwo Fragen hast, dann hilft dir hier bestimmt jemand weiter.
Wichtig wäre dabei aber dann welche Vorgaben du hast:
- Sprache (ANSI C oder C++)
- Betriebssystem
- Konsolenprogramm oder mit GUI
- welche Bibliotheken in dem jeweiligen Betriebssystem (besonders wichtig bei GUI)
- usw...

P.S. zum auslesen von Dateien gibt es hier genug:
:suchen:

Gruß Homer
 
hmm,

MatzeViert
SOrry es dir so ins Gesicht posten zu müssen aber es gibt viele Leute denen wird das Stundium untersagt weil sie, angeblich, nicht die Qualifikation haben, leider hast du diese erreicht und fängst jetzt schon an unserer schlechten Wirschaftslage noch einen drauf zu geben. Mach doch einfach eine Tischlerlehre wenn du keine Ahnung hast von deinem Studium und lieg nicht der Allgemeinheit auf der Tasche.

Danke.
 
Moin.
So wie du das hier darstellst, sollte ich wirklich das Studium aufgeben, aber ne Tischlerlehre währe auch nich drin, ich kann nicht hobeln.
Wenn ich wegen einer Vorlesung, die ich nach meinem Studium nie wieder brauche, mein Studium schmeissen soll, dann muss ich echt weg. Ich studiere extra Fahrzeugtechnik, weil ich davon Ahnung habe, und mich nicht mit dingen beschäftigen will und muss, die ich nicht mag und auch nicht kann. Programmieren in C++ gehört dazu, nach meiner Info2 Vorlesung brauch ichs nie wieder. Die Dinge, die ich am PC dann können muss, wie Catia und ProE, die kann ich auch, und die machen mir auch Spass.
Ich hab echt gehofft, hier Hilfe zu finden. Ich hab das hier extra nicht so formuliert, :
Schreib mir einer das Programm, sonst flieg ich am Montag durch!
Weils nicht so ist. Die meisten Teile (nach meinem Wissen) sind fertig, nur bei der Ausführung fliegen mir über 20 Fehlermeldungen ins Gesicht.
Ich bin selbst aktiver Foriker in VW-Bus und im Salatölforum, und ich hab schon viel Arroganz und Überheblichkeit, und Missachtung und und und gegenüber Neuankömmlingen mit ansehen müssen, aber das was hier abgeht, find ich echt ziemlich , und sowas hab ich in langer Forumszeit noch nicht gesehen.
Dennoch mit Gruss
Matze
 
-

Eigentlich ist es nicht meine Art, dass ich Beiträge aus Threads herauslösche, aber die persönlichen Bemerkungen hier waren mehr als unpassend. Ich möchte gar nicht großartig darauf eingehen, jeder hat sein Päckchen heutzutage zu tragen.

Matze, wie du schon selbst bemerkt hast, kommt es nicht gut, wenn man seine Programme geschrieben haben möchte, von daher würde ich vorschlagen, dass du deine Dateien einfach mal postest und beschreibst, wo du nicht weiterkommst. Macht ein besseres Bild und dir wird die Hilfe hier auch nicht verweigert.

Auf ein frohes Posten
 
Prog ist fast fertig

Moin,
ich habs fast fertig, es kommen aber immer nuch einige Fehler und es läuft einfach nicht richtig.
Wenn jemand ein bischen Wepspace hätte, würd ich meine Grundfassung, meine frisch überarbeitete und die Aufgabenstellung sowie die daten Datei hier reinstellen, dann könnte sich jeder meine Auswürfe anschauen.
Gruss Matze
 
an webspaceprovidern kanns ja wohl nich mangeln..

tripod, geocitys, dk3, um nur einige zu nennen, und zur not gibts auch unten dran bei jedem post die möglichkeit eine datei anzuhängen ;-)
 
So, Mangels Webspace stell ichs einfach mal hier rein. Ist jetzt die letzte Version.
Die .dat Datei kann ich leider nicht mit anhängen, aber ich stell einfach mal die Zahlen aus ihr mit rein.

12
600
6100
188
213
223
236
247
249
251
261
259
251
230
207


Ist ganz einfach, die 12 sind die 12 Stützstellen für die Drehmomente
die 600 ist die Leerlaufdrehzahl, die 6100 ist die Abregeldrehzahl, und die restlichen Zahlen sind die Drehmomente. Alle 500 U/min, beginnend mit 600, ist eine Stützstelle für die Drehmomente.
Die Daten stehen genauso in der .dat-Datei

Im nun folgenden Programm waren glaub noch 13 Fehler und 9 Warnungen drin.
Ich habs nach bestem Wissen geschrieben, die meine 90 minuten Vorlesung zulässt.

/* Viert, Matthias, 726720, (1. Verfasser) */
Code:
#include <stdio.h>
#include <stdlib.h>
#include <afxwin.h>
#include <conio.h>
#include <ctype.h>
#define N 100

int n, xmin, xmax, y[N];


void dateiEinlesen(char s[80])
{	
   int i;
   FILE * fp;

   fp=fopen(s,"r");

   // pruefen, ob Datei erfolgreich geoeffnet werden konnte
   if(fp == 0)
   {
    printf("\nEin Fehler ist beim öffnen der Datei entstanden fp = %d\n",fp);
   }
   else
   {
    printf("\nDatei wurde erfolgreich geöffnet fp = %d\n",fp);
   }

   fscanf(fp, "%d", &n);
   fscanf(fp, "%d", &xmin);
   fscanf(fp, "%d", &xmax);

   y[0] = 1;
 
   for(i=1; i<=n; ++i)
   {	
    fscanf(fp,"%d",&y[i]);
   }	

   //Datei schließen
   fclose(fp); 

   printf("\nDatei eingelesen. Weiter mit W-Taste...");
   
   int ch;

   do
   {
      ch = _getch();
      ch = toupper( ch );
   } while( ch != 'W' );


}

void tabelleAusgeben()
{

  int i;
  float dx;

  cleardevice();

  if (y[0] = 0)
  {
   printf("Datei Motor_Kennfeld.dat wurde noch nicht eingelesen!\n");
   printf("Weiter mit beliebiger Taste...");
   getch();
   return;
  }

  dx = (xmax - xmin) / (n - 1);


  printf("X [1/min]| Y [Nm]\n");
  printf("---------+--------\n");
 
  for(i=0; i<n; ++i)
  {	
   printf("  %3d   | %3d\n", xmin + i * dx, y[i+1]);
  }	
 
  printf("\nWeiter mit beliebiger Taste...");
  getch();
}

void maxminMomentBerechnen()
{

   //if (y[0] = 0)
   // {
   //  printf("Datei Motor_Kennfeld.dat wurde noch nicht eingelesen!\n");
   //  printf("Weiter mit beliebiger Taste...");
   //  getch();
   //  return;
   //}
   int ymax = y[1], ymin = y[1],i;

   for(i=2; i<=n; ++i)
   {	
    if(y[i] > ymax)
	{
     ymax = y[i];
	}
   }
 
   for(i=2; i<=n; ++i)
   {	
    if(y[i] < ymin)
	{
     ymin = y[i];
	}
   }

   printf("maximales Moment: %d\n", ymax);
   printf("minimales Moment: %d\n", ymin);
   printf("\nWeiter mit beliebiger Taste...");
   getch();
}

void momentenKennlinieAusgeben()
{

   //if (y[0] = 0)
   // {
   //  printf("Datei Motor_Kennfeld.dat wurde noch nicht eingelesen!\n");
   //  printf("Weiter mit beliebiger Taste...");
   //  getch();
   //  return;
   //}
  float dx;
  int xp, yp,i,ymax;

  cleardevice();

  dx = (xmax - xmin) / (n -1);

  xp = (639 / xmax) * xmin;
  yp = ((479 / ymax) * y[1]) + 479;
  moveto xp yp;

  for(i=1; i<n; ++i)
  {	
   xp = (639 / xmax) * (xmin + (dx * i));
   yp = ((479 / ymax) * y[i+1]) + 479;
   lineto xp yp;  
  }

  printf("\nWeiter mit beliebiger Taste...");
  getch();
}

void interpoliertesMomentBerechnen()
{

   //if (y[0] = 0)
   // {
   //  printf("Datei Motor_Kennfeld.dat wurde noch nicht eingelesen!\n");
   //  printf("Weiter mit beliebiger Taste...");
   //  getch();
   //  return;
   //}
  int x, y, i=0;
  float dx;

  cleardevice();
  printf("\nBitte Drehzahl zwischen %d und %d eingeben: ", xmin, xmax);
  scanf("%d", x);

  if(x<xmin || x>xmax)
  {
   printf("\nWert muss zwischen %d und %d liegen!", xmin, xmax); 
   printf("\nWeiter mit beliebiger Taste...");
   getch();
  }

  dx = (xmax - xmin) / (n -1);
  while(x>(xmin+dx*i))
  {
   i++;
  }

  y = y[i-1] + ((y[i] + y[i-1])/((xmin+dx*i) + (xmin+(dx*(i-1)))));
  printf("Interpoliertes Moment zu Drehzahl %d lautet: %d\n", x, y);
  printf("\nWeiter mit beliebiger Taste...");
  getch();
}

void main()
{
 char ch;
 int grt=DETECT, grm;

 y[0] = 0; // 0 bis Datei eingelesen wurde, dann 1

 initgraph(&grt, &grm, " ");
 cleardevice();
	
 do
 {
   printf("MOTORKENNFELD\n\nHauptmenu:\n");
   printf(" 1) Datei Motor_Kennfeld.dat einlesen\n");
   printf(" 2) Moment- und Drehzahl-Tabelle ausgeben\n");
   printf(" 3) maximales und minimales Moment ermitteln\n");
   printf(" 4) Momentenkennlinie grafisch ausgeben\n");
   printf(" 5) linear interpoliertes Moment berechnen\n");
   printf(" 6) Beenden des Programmes\n\n");
   printf("Geben Sie eine der oben erwähnten Zahlen ein."); 
   printf("\nEs muss darauf geachtet werden, dass zuerst der 1. Punkt abgearbeitet werden muss, \nbevor Daten ausgegeben werden können: ");
   ch = getch();
   if (ch = '1')
   {
    dateiEinlesen("Motor_Kennfeld.dat");
   }
   if (ch = '2')
   {
    tabelleAusgeben;
   }
   if (ch = '3')
   {
    maxminMomentBerechnen;
   }
   if (ch = '4')
   {
    momentenKennlinieAusgeben;
   }
   if (ch = '5')
   {
    interpoliertesMomentBerechnen; 
   }
   if (ch = '6')
   {
    closegraph();
    printf("Und Tschüss!");
   }
   else
   {
    printf("Dies ist ein fehlerhafte Eingabe. \nBitte geben sie erneut eine der oben erwähnten Zahlen ein: ");
   }
   cleardevice();   
 // while(ch != '6');
 //{
 //closegraph();
 //printf("Und Tschüss!");
 }


So, das wars.
Wenn mir jemand ein oder zwei Fehler nennen könnte, wär das super.
Gruss Matze
 
OK dann fangen wir mal an....
Code:
void dateiEinlesen(char s[80])
wird zu:
void dateiEinlesen(char *s)
----------------------
fscanf(fp, "%d", &n);
fscanf(fp, "%d", &xmin);
fscanf(fp, "%d", &xmax);

wird zu

fscanf(fp, "%i\n%i\n%i\n", &n, &xmin, $xmax);
-----------------------
fscanf(fp,"%d",&y[i]);

sollte eher

fscanf(fp,"%i",&y[i]);

sein
------------------------
printf(" %3d | %3d\n", xmin + i * dx, y[i+1]);

hmm schlimstenfalls n netter absturz... double variablen sind nunmal mehr als doppelt so groß wie interger...

printf(" %i | %i\n", xmin + i * dx, y[i+1]);
---------------------------------------------------
moveto xp yp;
und 
lineto xp yp; 

Das ist KEIN C++ sondern BASIC

moveto(xp,yp);
und
lineto(xp,yp);

werden eher funktionieren.
---------------------------------------------------

printf("Interpoliertes Moment zu Drehzahl %d lautet: %d\n", x, y);
und noch viele weitere davon...

%d = double 
%f = float
%i = int
%l = long
%c = char
%s = char[] + \0
%p = pointer

um nur einige zu nennen....
Das führt sonst schlimstenfalls sogar zum absturz...
ein Double ist 96bit lang. ein int nur 32...
-------------------------------------------------

Das sind jede Fehler die ich auf den ersten Blick gesehen hab... ich bin sicher wenn ich das nochjmal konzentriert durchguck das ich noch viele weitere finde.
 
Moin.
Danke, das hat schon geholfen.
Jetzt hab ich noch folgende Fehler:
-----------------------------------------
Code:
y = y[i-1] + ((y[i] + y[i-1])/((xmin+dx*i) + (xmin+(dx*(i-1)))));
  printf("Interpoliertes Moment zu Drehzahl %d lautet: %d\n", x, y);
  printf("\nWeiter mit beliebiger Taste...");
  getch();

bekomme ich dreimal diese Fehlermeldung hintereinander, der fehlerpfeil steht vor der ersten Zeile:

error C2109: Index benoetigt ein Feld oder einen Zeigertyp

-----------------------------------------------------------------------------------

Für moveto, lineto, cleardevice, detect. initgraph, closegraph bekomme ich jeweils den Fehler: nichtdeklarierter Bezeichner, womit ich gar nichts anfangen kann.

------------------------------------------------------------------------------------

Dann noch das hier:
fatal error C1004: Unerwartetes Dateiende gefunden

in der letzten Zeile


Danke schonmal und Gruss Matze
 
Zurück