Kleine Probleme beim Programmieren mit C++
-
Hallo, da ich demnächst eine EDV Arbeit schreibe wollte ich mich vorher genauestens über die Aufgaben, die eventuell drankommen können, informieren. Dabei merkte ich, dass es ein paar kleine Dinge gibt, die mir Probleme bereiten.
1. Beispiel:
Es soll ein Schachbrett mit Hilfe von StringGrid simuliert werden.
Hier mal ein Bild dazu, jedoch soll die vertikale Reihe nicht von 8-1 sondern von 1-8 laufen (von oben gesehen).
http://mypage.bluewin.ch/rolf.laemmli/Schachbrett.jpg
Auf den Feldern sollen jeweils die Koordinaten angegeben werden, also z.B A2, B3, D3 usw. (wie beim Schiffeversenken).Hier mein Versuch: Leider funktionierts nicht. Weiß jemand eine Lösung zu meinem Problem? Schon mal danke im Voraus.
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{AnsiString feld[8][8];
AnsiString feld2[8];feld2[0]="A";
feld2[1]="B";
feld2[2]="C";
feld2[3]="D";
feld2[4]="E";
feld2[5]="F";
feld2[6]="G";
feld2[7]="H";for(int i=0; i<=7; i++)
{
for (int j=0; j<=7; j++)
{
schach->Cells[j][i]=feld[j].IntToStr(i+1);}
}
}
//---------------2. Beispiel
Es sollen 6 Zufallszaheln zwischen 1 und 99 erzeugt werden. Von diesen soll die Summe und das Produkt (habe ich beides geschafft), die größte und kleinste Zahl ermittelt werden und jeweils in einem Edit Feld ausgegeben werden.
Außerdem soll in einem weiteren Editfeld das Ergebnis ausgegeben werden, was entsteht, wenn man Zahl1*Zahl2*Zahl3+Zahl4+Zahl5+Zahl6 rechnet. (hab ich alles nicht geschafft.Hier mein Versuch:
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
#include <stdlib.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;int zahlen[6];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
double Summe=0, Produkt=1;
AnsiString sdummy="";for(int i=0; i<=5; i++)
{
zahlen[i]=random(100);
sdummy=sdummy+IntToStr(zahlen[i])+"-";
Summe=Summe+zahlen[i];
Produkt=Produkt*zahlen[i];
}
Edit1->Text=sdummy;
Edit2->Text=FloatToStr(Summe);
Edit3->Text=FloatToStr(Produkt);
}
//----------------------Danke.
-
Aufgabe 2
txtMin->Text = "100"; txtMax->Text = "0"; int z[6]; for ( int i = 0; i < 6; i++ ) { z[i] = random(99) + 1; if ( z[i] < txtMin->Text.ToInt() ) txtMin->Text = z[i]; if ( z[i] > txtMin->Text.ToInt() ) txtMax->Text = z[i]; memZahlen->Lines->Add( AnsiString( z[i] ) ); }
So sollte es gehen
Kurz und Bündig!
-
P.S. Die lieblings Aufgabe alle """""EDV"""" Lehrer...
Jede Zahl darf nur einmal vorkommen... Auch nicht wirklich schwirieger aber...
-
Ok die zweite Aufgabe hab ich jetzt gelöst. Fehlt nur noch die erste.
Wie mache ich das, dass die Koordinaten in den 64 Feldern angezeigt werden (A1, B2 usw.)Als Fehler bekomme ich entweder diesen:
"Ungültige Strukturoperation"Wenn ich anstatt des + in dieser Zeile (schach->Cells[j][i]=feld[j]**+**IntToStr(i+1);) eine Leerstelle mache kommt dieser hier:
"Konvertierung von AnsiString nach AnsiString nicht möglich, In Anweisung fehlt;"und bei einem Punkt dieser hier:
"Auf linker Seite der Struktur ist . oder .* erforderlich"Kann jemand diese Aufgabe lösen?
-
Wenn Dein Programm noch so aussieht wie ganz oben, dann solltest Du
vielleicht statt "feld" "feld2" verwenden.schach->Cells[j][i]=feld2[j]+IntToStr(i+1);
Punkt und Leerzeichen ist Quatsch. Du solltest Dir vielleicht auch mal
anschauen, wofür der Punkt eigentlich gut ist (Grundlagenforschung).
Wofür ist eigentlich feld[8][8] gut?Gruß,
Alexander
-
Alexander Kempf schrieb:
Wenn Dein Programm noch so aussieht wie ganz oben, dann solltest Du
vielleicht statt "feld" "feld2" verwenden.schach->Cells[j][i]=feld2[j]+IntToStr(i+1);
Punkt und Leerzeichen ist Quatsch. Du solltest Dir vielleicht auch mal
anschauen, wofür der Punkt eigentlich gut ist (Grundlagenforschung).
Wofür ist eigentlich feld[8][8] gut?Gruß,
Alexander
Meins sieht jetzt so aus:
void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
AnsiString feld2[8];feld2[0]="A";
feld2[1]="B";
feld2[2]="C";
feld2[3]="D";
feld2[4]="E";
feld2[5]="F";
feld2[6]="G";
feld2[7]="H";for(int i=0; i<=7; i++)
{
for (int j=0; j<=7; j++)
{
schach->Cells[j][i]=feld2[j]+IntToStr(i+1);}
}
}
//-------------Jetzt schreibt er in alle Fehler entweder A,B,C,D,E,F,G oder H. Wie mache ich das, dass dann nachher in den Feldern A1, B1, D4 usw. steht? Ich verstehs irgendwie noch nicht so richtig...
-
void __fastcall TForm1::SpeedButton1Click(TObject *Sender) { for (int i=0 ; i<8 ; i++) { for(int j=0 ; j<8 ; j++) { schach->Cells[j][i] = AnsiString().sprintf("%c%d",'A'+j,i+1); } } }
Etwas C-Style-lastig, aber es funktioniert.
-
Cool, danke. Kann man das auch irgendwie auf die Weise lösen, wie ich das verucht habe oder geht das nur mit C-Style?
-
Hab hier noch ein Problem mit der Quersummenberechnung. Also es soll erstmal ganz normal die Quersumme berechnet werden (Beispiel: im Editfeld steht 123456, dann ist die Quersumme 21). Das funktioniert auch.
Wenn ein Komma zwischen den Zahlen steht, soll es nicht beachtet werden (funktioniert nicht).Hier mein Quelltext:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop#include "Unit1.h"
#include <vcl/dstring.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
double Quersumme=0;
AnsiString s="";
s=Edit1->Text;
int laenge=s.Length();
for(int i=1; i<=laenge; i++)
{
if(s!=",")
Quersumme=Quersumme+StrToInt(s[i]);
}Edit2->Text=FloatToStr(Quersumme);
}
-
Ich bin normalerweise eigentlich lockerer drauf, sag's jetzt aber trotzdem, weil ich gerade schlecht gelaunt bin:
1. ich habe nur aus Versehen hier reingeschaut. Eine Betreffzeile wie "ein kleines Problem mit dem Programmieren" sollte man ja schon aus Prinzip ignorieren;
2. der gute Player hat offensichtlich nicht den blassesten Schimmer, warum er da Punkte und Pfeile und so was reinschreiben muss. Das ist an sich nicht schlimm, aber
3. er macht nicht die geringsten Anstalten, es selber herauszufinden.
Wenn das Prüfungsvorbereitung ist, ist es eine verdammt schlechte. Sieht mehr nach Hausaufgaben aus.
Zum Schluss was Konstruktives für Player: setz' dich einfach mal mit deiner Aufgabe, einem C++-Buch (Suchfunktion!), zwei-drei Blatt Papier und einem Bleistift hin und denke nach.
-
Hallo
for(int i=1; i<=laenge; i++) { if(s!=",") Quersumme=Quersumme+StrToInt(s[i]); }
warum vergleichst du deinen Ausgangsstring mit dem Komma
Vergleich doch die einzelnen Teile des AnsiSTrings (Tip [i]Ansonsten rate ich dir DRINGEND zu einem durchackern eines C++Kurses (Buch)
zB. schau dir mal http://www.junix.ch/ an
bzw lese die FAQ genau durch uswMfG
Klaus
-
...und dann gäbs da noch ne kleine Regel zu beachten: "Pro Frage 1 Thread, pro Thread 1 Frage" Sonst macht man sich hier ganz schnell unbeliebt.
@Klaus: Der bessere Link hier wäre http://www.junix.ch/bcb/help Da der Rest der Seite in dem Zusammenhang uninteressant ist (o;
-junix
-
-
KlausB schrieb:
aber der Tip war doch nicht schlecht oder
Naja, hättest du die Faustregel mit den Fragen und Threads auch noch gleich erwähnt und den Link richtig angegeben, so wäre er wirklich perfekt gewesen (denn da hätte ich keine Arbeit mehr gehabt noch was ergänzendes zu tippen (o; ) Aber fürn Anfang, doch, akzeptabel
(o;
-junix