C++ İle Değişik Bir Matris (Soru)
-
arkadaşlar kendime göre bir şey oluşturmaya çalışıyorum, bunun için diziler işimi görmüyor. mesela küçük küplerden oluşmuş büyük bir küp gibi düşünün. küçük küplerin koordinatlarını girince içerisindeki verilere erişip değiştirebilmeliyim. örneğin 2,3,1 konumunda bulunan küpün içinde ad,soyad,telefon isimli üç adet değişken olacak. ben üç boyutlu dizi kullanınca haliyle olmuyor.
bunun için bir sınıf tanımlayap her küçük küpü bir nesne yapayım dedim fakat her nesneye referans nasıl vereceğim bilemedim.
şöyle ki en başta büyük küpün boyutlarını kullanıcı girecek, mesela 5,5,5 girdi. böyle olunca 5*5*5=125 tane küçük küp olacak. iç içe for döngüleriyle oluştuğum sınıfın türünde nesneler oluşturabiliyorum fakat sonra bunlara nasıl ulaşacağım.
bunu da şöyle düşündüm, dedim ki benim büyük küpün boyutlarında işaretçi dizisi yapayım. yani *isaretci[5][5][5] diye, bu küçük küpler for döngüsünün içinde oluşturulurken aynı koordinatlardaki işaretçilere de bu küçük küplerin adresleri verilsin. sonra işaretçilerle bu küçük küplere ulaşırım.
küp küp dedim olay karıştı sanırım iyice, c++ bilgim de o kadar iyi değil. ben aşağıdaki programı yazabildim fakat yazdığımla kaldım derleyemiyorum, bilgim de çok olmadığı için verdiği hataları anlayamadım. bi yardım edebilirseniz sevinirim. kolay gelsin.
[code]
#include <cstdlib>
#include <iostream>
using namespace std;
class kup
{
public:
int x,y,z;
string ad,soyad,sehir;
kup(int a, int b, int c) {
x=a;
y=b;
z=c;};
void bilgiler(string ad1, string soyad1, string sehir1){
ad=ad1;
soyad=soyad1;
sehir=sehir1;};
};
int main(int argc, char *argv[])
{
int a,b,c,k,l,m;
string ad2,soyad2,sehir2;
cin >> k,l,m;
kup *isaret[k][l][m] = new kup[k][l][m];
for (a=0; a<k; a++) {
for (b=0; b<l; b++) {
for (c=0; c<m; c++) {
new kup(a,b,c);
isaret[a][b][c]=&kup[a][b][c];
}
}
}
cout << "koordinatlari girin" << endl;
cin >> a,b,c;
cout << endl << "ad soyad sehir girin" << endl;
cin >> ad2,soyad2,sehir2;
*isaret[a][b][c].ad=deneme;
system("PAUSE");
return EXIT_SUCCESS;
}[/code]
-
kodu biraz değiştirdim bu sefer çalıştı, işaretçilerin gösterdiği adresleri ekrana yazdırabiliyorum fakat hala oluşturulan nesnelere ulaşıp içlerine veri yazamıyorum ?
#include #include using namespace std; class kup { public: int x,y,z; string ad,soyad,sehir; void koordinat(int a, int b, int c) { x=a; y=b; z=c;}; void bilgiler(string ad1, string soyad1, string sehir1){ ad=ad1; soyad=soyad1; sehir=sehir1;}; }; int main(int argc, char *argv[]) { int a,b,c; int k,l,m; string ad2,soyad2,sehir2; cin >> k; cin >> l; cin >> m; kup *isaret[k*l*m]; for (a=0; a> a,b,c; cout << endl << "ad soyad sehir girin" << endl; cin >> ad2,soyad2,sehir2; //*isaret[c-1)*(a*b)+(b-1)*a+a].ad="deneme"; system("PAUSE"); return EXIT_SUCCESS; } -
Bu kodu yazmaktaki amacını tam olarak anlamadım fakat,ad, soyad, telefon isimli üç adet üç boyutlu matris de oluşturabilirsin... Böylellikle istediğin konumdan her i,j,k dan veri okuaybilirsin..
-
Nesneyi çağırmazsan bi işe yaramaz o nesne
#include <cstdlib>
#include <iostream>
using namespace std;
class kup
{
public:
int x,y,z;
string ad,soyad,sehir;
kup(int a, int b, int c) {
x=a;
y=b;
z=c;};
void bilgiler(string ad1, string soyad1, string sehir1){
ad=ad1;
soyad=soyad1;
sehir=sehir1;};
}kupnesne;int main(int argc, char *argv[])
{
kupnesne.bilgiler(ad123,soyad123,sehir123);
system("PAUSE");
return EXIT_SUCCESS;
}Bi Böyle dene bakalım
-
önerileriniz için teşkkür ederim
@ltcelik, 3 adet 3 boyutlu matris de işe yarar fakat çok karmaşa oluyor
@SinusX, yazdığınız kodda bir adet nesne oluşturulup (kupnesne) o çağrılıyor, benim sonurum o nesneden kaç tane üretileceğini kullanıcının girmesiydi. yani ben tanımlamayacağım kullanıcı 5 girerse 5 tane nesne kup nesnesinden oluşacaktı ve ben bunları nasıl çağıracağımı bilememiştim referanslarını kendim belirlemediğim için.
sorunum çözüldü kodun son hali aşağıdaki gibidir. özel mesajla yardım eden hocama da tekrar teşekkür ederim
#include <cstdlib> #include <iostream> using namespace std; class konum { public: int x,y,z; void gir(int a, int b, int c) { x=a; y=b; z=c; } }; class bilgi { public: string ad,soyad,sehir; void gir (string a, string b, string c) { ad=a; soyad=b; sehir=c; } }; class kup { public: konum koordinat; bilgi bilgiler; }; int main(int argc, char *argv[]) { int x,y,z; string ad,soyad,sehir; cout << "Sistemin boyutlarını girin"; cout << endl << "x: "; cin >> x; cout << endl << "y: "; cin >> y; cout << endl << "z: "; cin >> z; kup kupdizi[x][y][z]; cout << "icerigini degistirmek istediginiz kupun koordinatlarini girin" << endl; cin >> x >> y >> z; cout << "ad soyad sehir girin" << endl; cin >> ad >> soyad >> sehir; kupdizi[x][y][z].koordinat.gir(x,y,z); kupdizi[x][y][z].bilgiler.gir(ad,soyad,sehir); cout << "kup " << x << "," << y << "," << z << endl; cout << kupdizi[x][y][z].bilgiler.ad << endl; cout << kupdizi[x][y][z].bilgiler.soyad << endl; cout << kupdizi[x][y][z].bilgiler.sehir << endl; system("PAUSE"); return EXIT_SUCCESS; } -
Sınır koordinatlarda hatra veriyor örneğin 2,2,2 boyutlu matriste 2,2,2 yi editlediğimizde hata veriyor
-
evet o kontrolleri yapmadım henüz. boyutları 2,2,2 verince örneğin listenin x değeri 0 ve 1 oluyor, yani sınırı 1 eksiği
-
#include "stdafx.h" #include <conio.h> #include <string> #include <iostream> using namespace std; class kup { public: int x,y,z; string ad, soyad, sehir; kup():x(0),y(0),z(0),ad("sifir"),soyad("sifir"),sehir("sifir") {} kup(int a, int b, int c):ad("sifir"),soyad("sifir"),sehir("sifir") { x=a; y=b; z=c; } void bilgiler(string ad1, string soyad1, string sehir1) { ad=ad1; soyad=soyad1; sehir=sehir1; } void yazdir(void) { cout << "Merhaba su an kusuyorum..." << endl; cout << "X:" << x << endl << "Y:" << y << endl << "Z:" << z << endl << "Ad: Soyad: Sehir:" << endl <<ad << endl <<soyad << endl << sehir << endl; } }; typedef kup KUP; int main(int argc, char *argv[]) { int a,b,c,k,l,m; string ad2,soyad2,sehir2; cin >> k >> l >> m; KUP*** Xkor;// KUP sınıfı göstericisinin göstericisi (gösterenin göstericisi) KUP** Ykor;//KUP sınıfı göstericisinin göstericisi (gösterenin göstericisi) KUP* Zkor;//KUP sınıfı göstericisi Xkor = new KUP**[k]; for(a=0; a<k; a++) { Ykor = new KUP*[l]; Xkor[a] = &Ykor[0]; for(b=0; b<l; b++) { Zkor = new KUP[m]; Ykor[b] = &Zkor[0]; } } /*int* gosterci = new int[30]; gosterci[0] = 2; cout << gosterci[0]; int** gosterci2 = new int*[2]; gosterci2[0] = &gosterci[0]; gosterci2[0][0] = 3; cout << gosterci[0];*/ cout << "koordinatlari girin" << endl; cin >> a >> b >> c; cout << endl << "ad soyad sehir girin" << endl; cin >> ad2 >>soyad2 >>sehir2; Xkor[a][b][c].bilgiler(ad2,soyad2,sehir2); Xkor[a][b][c].yazdir(); getch(); return 0; }/* Hadi ben sorunluyum aksam aksam bunu çözmek için uğraştım siz niye kasıyonuz yaaaaa. Ben kafayı yedim bari siz kurtulun defolun sokaklara gezin eğlenin...
Hayrını gör
Ayrıca bu konuda biraz sıkıntılıdır. C++ da çok boyutlu dizileri pointerlarda göstermen için illaki dönkü kullanman lazım. Pointerların pointerlarını iyi kavraman lazım. Kolay gelsin.*/
