AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Array of String wird nicht als solches erkannt

Ein Thema von St0rmhunter · begonnen am 20. Aug 2011 · letzter Beitrag vom 21. Aug 2011
Antwort Antwort
St0rmhunter

Registriert seit: 20. Aug 2011
24 Beiträge
 
#1

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 15:33
Danke für eure antworten

@Fusel tut mir Leid deine Variante hat nicht funktioniert.

@USchuster Respekt man sieht du hast ahnung ^^ aber für mich war das etwas zu kompliziert hab noch nicht lange informatik kenne also noch nicht so viele Begriffe. Ich sag mal ich hab nur Bahnhof verstanden^^ trotzdem danke

@MondiBob Ich hab mein Array of String jetzt umbenannt in memText1 und jetzt funktionierts vielen Dank für die einfache Lösung
  Mit Zitat antworten Zitat
St0rmhunter

Registriert seit: 20. Aug 2011
24 Beiträge
 
#2

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 17:25
Als erstes ich denke mal mir hierbei zu helfen könnte schwer werden und lange dauern bis man überhaupt erstmal durchblickt :S (nur so kleiner Tipp). Bitte sagt mir nicht, dass ich ein paar Sachen hätte einfacher machen können, das sagen so viele zu mir

So da das Testprogramm lief habe ich die prozedur jetzt mit in meinen Cäsar-Coder eingebaut. Für die die es nicht wissen der Cäsar Code ist eine Möglichkeit Nachrichten zu verschlüsseln, indem man den Buchstaben neue Werte zuweist. Beispiel:
A bekommt den neuen Wert B zugewiesen -> verschiebung um 1 -> C wird um 1 verschoben, also wird C dann zu D.
Eine Nachricht wird immer einheitlich Verschoben ... nicht ein Buchstabe um 2 der andere um 15.

Ja jedenfalls habe ich 2 Memos zum, das eine zum Eintragen der Nachricht das andere zum Ausgeben der decodierten / codierten Variante.
Bei der Prozedur, in der PC selbst alle Verschiebungsmöglichkeiten durchgeht und sie alle ausgibt und man die Richtige raussuchen kann funktioniert nur nicht. Er gibt die Decodierte Variante des Textes aus aber nur mit der Verschiebung um 1, die Anderen Varianten zB mit der Verschiebung um 5 werden nicht angezeigt. Dann erscheint eine Fehlermeldung Acces Violation. keine Ahnung wo der Fehler liegt hier der Quellcode der Prozedur die eigentlich alle decodierten Möglichkeiten des eingegebenen Textes ausgeben soll, wenn die Verschiebung nicht bekannt ist.

Delphi-Quellcode:
var
  Form5: TForm5;
  memText1: Array of String;
  temp1,temp2: String;
  i,j,Zahl1,Zahl2,lauf: Integer;
  buchstabe: char;


procedure TForm5.Button1Click(Sender: TObject);
begin
for lauf:=1 to 51 do
begin
      setlength(memText1,(memo1.lines.count));
for i:=0 to memo1.lines.Count do
begin
  memText1[i]:=memo1.Lines[i];
  temp1:=memText1[i];
  temp2:='';
  for j := 0 to length(temp1) do
  begin
  buchstabe:=temp1[j];
  Zahl1:=Ord(buchstabe);
  if (Zahl1<65) or (Zahl1>122) or ((Zahl1>90)and(Zahl1<97)) then
  temp2:=temp2+temp1[j]
  else
  begin
  Zahl2:=Zahl1-lauf;
  if (Zahl2<65) then
  Zahl2:=Zahl2+58;
  if (Zahl2>90) and (Zahl2<97) then
  Zahl2:=Zahl2-6;
  temp2:=temp2+Chr(Zahl2);
  end;
  end;
  temp2[1]:=' ';
  memo2.lines.add(temp2);
end;
end;
memo2.lines.add('++++++++++++++++++++++++++');
memo2.lines.add('Verschiebung um ' + inttostr(lauf) + ' beendet');
memo2.lines.add('++++++++++++++++++++++++++');
end;
Bemerkung zum Verschieben Wandel ich die Buchstaben in Ascii-codes um Rechne + die Verschiebung und wandle sie zurück, dabei fange ich Sonderzeichen und alles andere was keine Buchstaben ab (funktioniert auch), sodass aus einem z kein , wird.

Hier das komplette Projekt für den der es haben will / sich ansehen will.Vorsicht es ist mit Lazarus geschrieben Der unterste Button im Hauptmenü (wenn ihr das Programm startet) führt euch zur Form mit den Problemen^^ ... Na gut bei den anderen Formen taucht auch der Acces Violation Fehler auf, ich hab halt nur die unterste genommen als Beispiel^^.

Danke schonmal an die geduldigen, hilfsbereiten Leute die sich mit dem nicht leicht zu lösenden Problem von mir befassen.
Angehängte Dateien
Dateityp: rar Schule -1- Cäsar Code.rar (2,75 MB, 0x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.477 Beiträge
 
Delphi 12 Athens
 
#3

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 18:40
Wie schon erwähnt: Warum sind alle Variablen global deklariert?

Hätte man sie lokal deklariert, dann häte es nichtmal ein Problem mit Text gegeben, da immer das genommen wird, was "näher" deklariert ist und Global ist ganz, ganz, wirklich ganz weit weg.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Aug 2011 um 18:56 Uhr)
  Mit Zitat antworten Zitat
St0rmhunter

Registriert seit: 20. Aug 2011
24 Beiträge
 
#4

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 19:16
Danke für den Tipp, hab alle mal lokal deklariert hat, aber nichts gebracht

Ich deklariere Variablen fast immer Global, da mein Informatiklehrer großen Wert darauf legt global zu deklarieren, lokal dürfen wir nur in Ausnahmen.

Nochmal danke für den Tipp
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 19:17
Bin kein Informatiker!
Aber der Lehrer sollte nochmal in die Lehre gehn.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.477 Beiträge
 
Delphi 12 Athens
 
#6

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 19:28
In Delphi gibt es in den Projektoptionen eine eine Option für eine Bereichsprüfung.
Ich hoffe/vermute mal, aß Lazarus dieses auch besitzt und wenn ja, dann aktiviere diese mal.

{$R+} bzw. {$RANGECHECKS ON}

for j := 0 to length(temp1) do .
String-Indize beginnen bei 1 und enden bei Length.

Array-Indize (dynamischer Arrays) beginnen bei 0, bzw. Low und enden bei Length-1, bzw. High.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (20. Aug 2011 um 19:31 Uhr)
  Mit Zitat antworten Zitat
St0rmhunter

Registriert seit: 20. Aug 2011
24 Beiträge
 
#7

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 21:17
@EWeiss Ja bin ich auch dafür ... wenn man ihn fragt ob er ne Idee hat was im Programm fürn Fehler sein könnte sagt er immer da ist wohl ein Fehler im Quelltext und meint man schafft das schon selbst -.-

@himitsu hab das "for j:=0 to length(temp1) do" jetzt durch "for j:=0 to (length(temp1)-1) do" ersetzt und jetzt klappts =) danke für den Hinweis mit den Arrays. =)

Im Anhang jetzt der funktionierende Cäsar-Coder v1.0, die exe und alle Projektdateien.
Angehängte Dateien
Dateityp: rar Cäsar Coder v1.0.rar (2,75 MB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.477 Beiträge
 
Delphi 12 Athens
 
#8

AW: Array of String wird nicht als solches erkannt

  Alt 20. Aug 2011, 21:23
Temp1 ist ein String.

Lies also nochmal genau nach.
PS: Genau solche Fehler könnte man über eine Indexprüfung entdecken.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
USchuster

Registriert seit: 12. Sep 2010
Ort: L.E.
120 Beiträge
 
Delphi XE3 Professional
 
#9

AW: Array of String wird nicht als solches erkannt

  Alt 21. Aug 2011, 13:21
@USchuster Respekt man sieht du hast ahnung ^^ aber für mich war das etwas zu kompliziert hab noch nicht lange informatik kenne also noch nicht so viele Begriffe. Ich sag mal ich hab nur Bahnhof verstanden^^ trotzdem danke
Bzgl. dem Bahnhof meinst Du bestimmt Scopeproblem. Es wurde im Prinzip schon erklärt und bedeutet das es einen Namenskonflikt gibt - der Compiler nimmt einen anderen Bezeichner als vom Programmierer beabsichtigt. Für Bezeichner gibt es verschiedene Gültigkeitsbereiche und sofern man die Bezeichner nicht genauer definiert/qualifiziert, dann wird jeweils der, wie von himitsu geschrieben, "nähere" Bezeichner verwendet.

Das folgendes Beispiel erklärt das vielleicht auch
Delphi-Quellcode:
program ScopeDemo;

{$APPTYPE CONSOLE}

uses
  Controls;

var
  Text: string = 'Globale Variable Text';

type
  TFoo = class(TControl)
  public
    procedure Test;
  end;

{ TFoo }

procedure TFoo.Test;
var
  Text: string;
begin
  WriteLn(Self.Text);
  Text := 'Variable Text in TFoo.Test';
  WriteLn(Text);
  WriteLn(ScopeDemo.Text);
end;

var
  Foo: TFoo;
begin
  Foo := TFoo.Create(nil);
  try
    Foo.Text := 'Property TControl.Text';
    Foo.Test;
  finally
    Foo.Free;
  end;
  ReadLn;
end.
Das sollte folgenden Output erzeugen
Code:
Property TControl.Text
Variable Text in TFoo.Test
Globale Variable Text
Vielleicht hilft auch dieser Link weiter Deklarationen und Anweisungen (Delphi) | Namenskonflikte.
  Mit Zitat antworten Zitat
St0rmhunter

Registriert seit: 20. Aug 2011
24 Beiträge
 
#10

AW: Array of String wird nicht als solches erkannt

  Alt 21. Aug 2011, 13:44
Ok denke mal habs jetzt verstanden

@DeddyH danke für den Tipp , werds mir merken.
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz