CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Wskaźnik

Wskaźnik

dział ogólny

Wskaźnik

Nowy postprzez Frytek18 » środa, 30 maja 2012, 13:35

Mam problem jak zrobić funkcje która przyjmuje jako parametr zmienna dynamiczna no wskaźnik
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
float *a = new float;
float *b = new float;
float *wynik = new float;
float mnoz (float *a, float *b){
Pointer liczba = *a;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
try {
        *a = Edit1->Text.ToDouble();
        *b = Edit2->Text.ToDouble();
} catch (...) {
        MessageBox(NULL,"Upewnij sie czy aby napewno wpisałes liczbe!!!",NULL,MB_ICONWARNING);
}

*wynik = *a + *b;
Edit3->Text = *wynik;
delete a,b,wynik;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try {
        *a = Edit1->Text.ToDouble();
        *b = Edit2->Text.ToDouble();
} catch (...) {
        MessageBox(NULL,"Upewnij sie czy aby napewno wpisałes liczbe!!!",NULL,MB_ICONWARNING);
}

*wynik = *a - *b;
Edit3->Text = *wynik;
delete a,b,wynik;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
//mnoz(Edit1->Text.ToDouble(), Edit2->Text.ToDouble());
}
//---------------------------------------------------------------------------
 
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Frytek18 » środa, 30 maja 2012, 13:40

Bo trzeba mi zrobic kalkulator który bedzie mnożył i dzielił za pomocą funkcji
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Cyfrowy Baron » czwartek, 31 maja 2012, 08:09

Nie rozumiem pytania. :roll:
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Frytek18 » czwartek, 31 maja 2012, 09:56

Jak zrobic funkcje która bedzie brac jako parametr zmienna dynamiczną? no Bo potrzebuje zeby mnożenie i dzielenie było jako funkcja która ma parametr zmienna dynamiczna wskaźnik
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez polymorphism » czwartek, 31 maja 2012, 10:23

Może opisz konkretniej, o co Tobie chodzi, bo piszesz tak niezrozumiale, że nie wiadomo, w czym rzecz.

KOD cpp:     UKRYJ  
float *a = new float;
float *b = new float;
float *wynik = new float;

Dlaczego na stercie tworzysz te zmienne? Nie wystarczy zwykłe:
KOD cpp:     UKRYJ  
float a, b, wynik;

:?:

--- dodane ---

A może Tobie chodzi o to, że to wywołanie:
KOD cpp:     UKRYJ  
mnoz(Edit1->Text.ToDouble(), Edit2->Text.ToDouble());

nie chce się skompilować? No tu akurat sprawa jest oczywista, ponieważ mnoz oczekuje dwóch wskaźników, a Ty podajesz dwie wartości, które w dodatku nie są l-value, zatem nie możesz pobrać ich adresu. Pytanie, po co te wskaźniki w ogóle?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Cyfrowy Baron » czwartek, 31 maja 2012, 11:39

Frytek18 napisał(a):
KOD cpp:     UKRYJ  
float mnoz (float *a, float *b){
Pointer liczba = *a;
}


Jaki sens ma ta funkcja? Niczego nie robi i niczego nie zwraca!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Frytek18 » czwartek, 31 maja 2012, 14:36

Chodzi o to ze ta funkcja ma przyjmować jako parametry zmienne dynamiczne. Ten kalkulator ma właśnie być na wskaźnikach zmiennych dynamicznych. Nie wiem własnie jak to zrobic zeby funkcja przyjmowała jako parametr zmiene dynamiczne a potem wywołać je i do parametrów przypisać liczby z Editów.
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Frytek18 » czwartek, 31 maja 2012, 14:37

Cyfrowy Baron napisał(a):
Frytek18 napisał(a):
KOD cpp:     UKRYJ  
float mnoz (float *a, float *b){
Pointer liczba = *a;
}


Jaki sens ma ta funkcja? Niczego nie robi i niczego nie zwraca!

Oj bo tak wrzuciłem chodzi o to zeby ta funkcja mnożyła 2 zmienne dynamiczne w zwracała wynik
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Android » czwartek, 31 maja 2012, 19:41

Rozwiązaniem na to co napisałeś jest zwykła funkcja
Kod: Zaznacz cały
float mnoz(float * a, float * b)
{
return (*a) * (*b);
}


Sadze, ze nie ma to głębszego sensu - równie dobrze możesz mieć funkcje
Kod: Zaznacz cały
float mnoz(float a, float b)
{
return a*b;
}

i wywoływać ją podając wyłuskane zawartości zmiennych dynamicznych
Kod: Zaznacz cały
float wynik = mnoz(*a,*b);


Druga interpretacją Twojego pytania może być funkcja, która przyjmuje poza zmiennymi a i b również wskaźnik do innej funkcji - pozwala zmienic operacje, np. jedna funkcja to dzialanie() z 3 argumentami a do niej poza a i b podajesz wskaznik do funkcji co powoduje wywołanie konkretnego działania.
Poszukaj informacji o wskaźnikach do funkcji np. na tej stronie masz opishttp://www.egrafik.pl/kurs-c-plus-plus/8.3.php
Avatar użytkownika
Android
Bladawiec
Bladawiec
 
Posty: 46
Dołączył(a): poniedziałek, 5 kwietnia 2010, 16:51
Podziękował : 16
Otrzymał podziękowań: 2
System operacyjny: Windows 7 Pro x64
Kompilator: C++ Builder XE2
Gadu Gadu: 0
    Windows 7Firefox

Re: Wskaźnik

Nowy postprzez Frytek18 » czwartek, 31 maja 2012, 21:51

Ale ja chce podać juz w programie mnoz(Edit1->Text.ToDouble(),Edit2->Text.ToDouble()); czy nie da sie tak?
Avatar użytkownika
Frytek18
Homos antropiczny
Homos antropiczny
 
Posty: 60
Dołączył(a): czwartek, 17 maja 2012, 19:05
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: WIN XP 32 bit
Kompilator: Embarcadero RAD Studio 2010 C++
Gadu Gadu: 5032466
    Windows XPFirefox

Re: Wskaźnik

Nowy postprzez Cyfrowy Baron » czwartek, 31 maja 2012, 23:11

Frytek18 napisał(a):czy nie da sie tak?


Jak najbardziej da się o ile funkcja będzie miała taką postać:

KOD cpp:     UKRYJ  
float mnoz (float a, float b){
Pointer liczba = a;
}


Z tym dynamicznym przekazywaniem to możesz to zrobić co najwyżej tak:

KOD cpp:     UKRYJ  
float mnoz (TEdit *a, TEdit *b)
{
 float liczba1 = a->Text.ToDouble();
 float liczba2 = b->Text.ToDouble();

 return liczba1 * liczba2;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button7Click(TObject *Sender)
{
 Edit3->Text = (String)mnoz( Edit1, Edit2 );
}


Poczytaj jeszcze sobie o funkcjach ogólnych, może to będzie bardziej pasowało do tego co próbujesz zrobić: Funkcje ogólne
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 9 gości