Variable 'SONUC' might not have been initialized

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
hich1shey
Üye
Mesajlar: 10
Kayıt: 31 Tem 2005 02:47
Konum: İstanbul

Variable 'SONUC' might not have been initialized

Mesaj gönderen hich1shey »

1 tane edit kullanarak olurşturulmuş bir hesap makinesinin HESAPLA foksiyonunda aşagıdaki problem ile karşılaştım. Bunun anlamı nedir?

Kod: Tümünü seç

Function HESAPLA:string; 
  var 
    SONUC:double; 
  begin 
    case ISARET of 
    1: SONUC:=(S1+S2); 
    2: SONUC:=(S1-S2); 
    3: SONUC:=(S1/S2); 
    4: SONUC:=(S1*S2); 
    end; 
  S1:=0; 
  S2:=0;   //bu satır için aşağıdaki hatayı verdi
  S1:=(SONUC);
  Result:=FloatToStr(SONUC); 
  end; 

// [Warning] Unit1.pas(102): Variable 'SONUC' might not have been initialized 
yardımcı olursanız sevinirim...
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

s1 in tipi nedir? o da double mı?
hem bence double yerine float kullan.
Kullanıcı avatarı
hich1shey
Üye
Mesajlar: 10
Kayıt: 31 Tem 2005 02:47
Konum: İstanbul

Mesaj gönderen hich1shey »

Kod: Tümünü seç

var
  Form1       : TForm1;
  S1,S2       : real;
  ISARET,DURUM: integer;
implementation
uses strutils;

{$R *.dfm}

Function HESAPLA:string;
  var
    SONUC:real;
  begin
    case ISARET of
    1: SONUC:=(S1+S2);
    2: SONUC:=(S1-S2);
    3: SONUC:=(S1/S2);
    4: SONUC:=(S1*S2);
    end;
  S1:=0;
  S2:=0;
  S1:=(SONUC);
  Result:=FloatToStr(SONUC);
  end;
bu kadarı çözüm için yeterli gelmezse tamamını yapıştırayım arkadaşlar,
ilginize teşekkürler...
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba


Kod: Tümünü seç


Function HESAPLA:string; 
  var 
    SONUC:currency; 
  begin 
    case ISARET of begin
    1: SONUC:=(S1+S2); 
    2: SONUC:=(S1-S2); 
    3: SONUC:=(S1/S2); 
    4: SONUC:=(S1*S2); 
    end; 
  S1:=0; 
  S2:=0;   
  S1:=(SONUC); 
  Result:=CurrToStr(SONUC); 
  end; 

Denemedim artık denersin :D

saygılar,
t-hex
Kıdemli Üye
Mesajlar: 531
Kayıt: 18 Mar 2005 02:45
Konum: İstanbul/Antalya
İletişim:

Mesaj gönderen t-hex »

[Warning] Unit1.pas(102): Variable 'SONUC' might not have been initialized
Bu bir hata değil sadece "SONUC değişkenine ilk değer atanmamış olabilir" anlamında bir uyarı. Çünkü SONUC değişkenine değer ataması case içinde yapılıyor ama ISARET dediğiniz değişkenin değeri 1 ile 4 arasında olmazsa SONUC değişkenine herhangi bir değer atanmayacak, onun uyarısını veriyor.

Bunu, fonksiyonun ilk satırına SONUC := 0 gibi bir ifade yazarak engelleyebilirsiniz.
Kullanıcı avatarı
hich1shey
Üye
Mesajlar: 10
Kayıt: 31 Tem 2005 02:47
Konum: İstanbul

t-hex, teşekkür edeirm;

Mesaj gönderen hich1shey »

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Math, Menus, ExtCtrls;

type
  TForm1 = class(TForm)
    btnKapat: TButton;
    Panel1: TPanel;
    Edit: TEdit;
    btnCE: TButton;
    btnSil: TButton;
    btnBack: TButton;
    btnIsareti: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button10: TButton;
    btnvirgul: TButton;
    btnbol: TButton;
    btncarp: TButton;
    btncikar: TButton;
    btntopla: TButton;
    btnesittir: TButton;
    btnKaresi: TButton;
    btnYuzdesi: TButton;
    btnKarekoku: TButton;
    MainMenu1: TMainMenu;
    Dosya1: TMenuItem;
    k1: TMenuItem;
    Dzen1: TMenuItem;
    Kes1: TMenuItem;
    Kopyala1: TMenuItem;
    Yaptr1: TMenuItem;
    N1: TMenuItem;
    Temizle1: TMenuItem;
    Seenekler1: TMenuItem;
    Yardm1: TMenuItem;
    Yalnzca4ilem1: TMenuItem;
    YardmKonular1: TMenuItem;
    HesapMakinesiHakknda1: TMenuItem;
    lem1: TMenuItem;
    opla1: TMenuItem;
    kar1: TMenuItem;
    Bl1: TMenuItem;
    arp1: TMenuItem;
    N2: TMenuItem;
    Karesi1: TMenuItem;
    KareKk1: TMenuItem;
    Yzde1: TMenuItem;
    N3: TMenuItem;
    Eittir1: TMenuItem;
    N4: TMenuItem;
    zelletir1: TMenuItem;
    Label1: TLabel;
    Button11: TButton;
    Button12: TButton;
    procedure EditKeyPress(Sender: TObject; var Key: Char);
    procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Button7Click(Sender: TObject);
    procedure btnbolClick(Sender: TObject);
    procedure btnKaresiClick(Sender: TObject);
    procedure btnKarekokuClick(Sender: TObject);
    procedure btnesittirClick(Sender: TObject);
    procedure btnBackClick(Sender: TObject);
    procedure btnSilClick(Sender: TObject);
    procedure btnKapatClick(Sender: TObject);
    procedure EditKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure Button11Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button12Click(Sender: TObject);
  private
    { Private declarations }

  public
    { Public declarations }
  end;

var
  Form1       : TForm1;
  S1,S2       : real;
  ISARET,DURUM: integer;
implementation
uses strutils, Unit2;

{$R *.dfm}

Function HESAPLA():string;
  var
    SONUC:currency;
  begin
    SONUC:=0;
    case ISARET of
    1: SONUC:=(S1+S2);
    2: SONUC:=(S1-S2);
    3: SONUC:=(S1/S2);
    4: SONUC:=(S1*S2);
    end;
  S1:=0;
  S2:=0;
  S1:=(SONUC);
  Result:=FloatToStr(SONUC);
  end;

Procedure ISLEM();
  begin
    if (S1<>0) and (S2<>0) then
      begin
        Form1.Edit.Text:=HESAPLA();
      end
    else
      begin
        if S1=0 then S1:=StrToFloat(Form1.Edit.Text)
        else
          begin
            if S2=0 then
              begin
                S2:=StrToFloat(Form1.Edit.Text);
                Form1.Edit.Text:=HESAPLA;
              end;
          end;
      end;
  end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
  begin
  if (pos(',',TEdit(Sender).Text)>0) and (Key=',') then Key := #0; 
  if (Key<'0') or (Key>'9') then Key:=#0;
  end;

procedure TForm1.EditKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
  var
    a     :word;
    DEGER :string;

  begin

    if Key=VK_Back then
      begin
        DEGER:=Edit.Text;
        a:=length(DEGER);
        Delete(DEGER,a,1);
        Edit.Text:=DEGER;
        Edit.SelStart:=a;
      end;

    if DURUM=1 then
      begin
        DURUM:=0;
        Edit.Text:='';
      end;

    DEGER:=Edit.Text;

    if key=VK_ADD then
      begin
        DURUM:=1;
        ISARET:=1;
        ISLEM();
      end;
    if Key=VK_SUBTRACT then
      begin
        DURUM:=1;
        ISARET:=2;
        ISLEM();
      end;
    if key=VK_DIVIDE then
      begin
        DURUM:=1;
        ISARET:=3;
        ISLEM();
      end;
    if key=VK_MULTIPLY then
      begin
        DURUM:=1;
        ISARET:=4;
        ISLEM();
      end;

    if Key=VK_DELETE then
      begin
        Edit.Text:='';
        S1:=0;
        S2:=0;
      end;

  end;

procedure TForm1.Button7Click(Sender: TObject);
  begin
    if DURUM=1 then
      begin
        DURUM:=0;
        Edit.Text:='';
      end;
    Edit.Text:=Edit.Text + (Sender As TButton).Caption;
    Edit.SetFocus;
  end;

procedure TForm1.btnbolClick(Sender: TObject);
  begin
    if (Sender As TButton).Caption='+' then ISARET:=1;
    if (Sender As TButton).Caption='-' then ISARET:=2;
    if (Sender As TButton).Caption='/' then ISARET:=3;
    if (Sender As TButton).Caption='*' then ISARET:=4;
    Edit.Text:='';
  end;

procedure TForm1.btnKaresiClick(Sender: TObject);
  var
    x,y:real;
  begin
    y:=StrtoFloat(Edit.Text);
    x:=sqr(y);
    Edit.Text:=FloatToStr(x);
  end;


procedure TForm1.btnKarekokuClick(Sender: TObject);
  var
    x,y:real;
  begin
    y:=StrtoFloat(Edit.Text);
    x:=sqrt(y);
    Edit.Text:=FloatToStr(x);
  end;

procedure TForm1.btnesittirClick(Sender: TObject);
  begin
    if S1=0 then S1:=StrToFloat(Edit.Text) else
       S2:=StrToFloat(Edit.Text);
    if (S1<>0) and (S2<>0) then Edit.Text:=HESAPLA();
  end;

procedure TForm1.btnBackClick(Sender: TObject);
  var
    DEGER :string;
    a     :integer;
  begin
    DEGER:=Edit.Text;
    a:=Length(DEGER);
    Delete(DEGER,a,1);
    Edit.Text:=DEGER;
    Edit.SelStart:=a;
  end;

procedure TForm1.btnSilClick(Sender: TObject);
  begin
    Edit.Text:='';
    S1:=0;
    S2:=0;
  end;

procedure TForm1.btnKapatClick(Sender: TObject);
begin
MessageBeep(word(-1));
close;
end;

procedure TForm1.EditKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
 //1'den fazla virgül girilmesini engelle
  var
    i       :integer;
    text    :string;
    kontrol :string;
    kontrolsayac:integer;
  begin
    text:=Edit.text;
    kontrolsayac:=0;
      if Length(text) >= 1 then
      begin
      for i:=0 to Length(text) do
        begin
         kontrol:=Edit.Text[i];
         if kontrol = ',' then
            begin
              kontrolsayac:=kontrolsayac+1;
              if kontrolsayac>=1 then
                 begin
                  ShowMessage('Fazla virgül var; silinecek...');
                  text:=copy(Edit.Text,1,Length(text)-1);
                  Edit.Text:=text;
                 end;
            end;
        end;
      end;
  end;



procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := true;
//formu görünmez yapma
//Brush.Style:=bsClear;

//formun başlığını kaldırmak
//SetWindowLong(Form1.Handle,GWL_STYLE,GetWindowLong(Handle,GWL_STYLE) and not WS_CAPTION);
//Height := ClientHeight;

//Görev Çubuğundaki butonunu gizleme
//SetWindowLong(Application.Handle,GWL_EXSTYLE, WS_EX_TOOLWINDOW);

end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
//ESC ile kapatma
KeyPreview := true;
if Key = #27 then halt;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
//taskbar'a minimize
Application.Minimize;
CloseWindow(handle);
WindowState:=wsMinimized;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//Alt+F4 ile programın kapanmaması için:
//if ((ssAlt in Shift) and (Key = VK_F4)) then
//MessageBeep(word(-1));
//Key:=0;

end;

procedure TForm1.Button12Click(Sender: TObject);
begin
form2.Show;
end;

end.
1.sayıyı yazıyorum ve sonra artı'ya
2.sayıyı girip eşittir'e bastığımda tepki yok!..

zamanı olan bir arkadaş varsa ve inceleyebilirse çok sevinecem..
Cevapla