PDA

Tam Sürümünü Görmek İçin : array ile ilgili bir sorun "Başlangıç düzeyinde"


crzy
28/04/2008, 02:59
Merhaba 2 gündür basit bir kodla uğraşıyorum yeni öğrenmeye çalıştığım için artık pes etme noktasına geldim.



#include <iostream.h>
#include <string.h>
void emre(int Hamza[4], char ad[4][10])
{
Hamza[0]=1;
Hamza[1]=2;
Hamza[2]=3;
Hamza[3]=4;
}
void main()
{
int Osman[4]={0};
char ad[4][10] = {"J", "A", "L", "E"};
emre (Osman,ad);
int i, j, p;
for (i = 0;i <1; i++) //birden 4 e kadar sayiyor Osman icin
{
for (p = 0;p <4; p++)
cout << Osman[p] << " " ;
cout << endl;
}
}



kodum bu
1 2 3 4 şeklinde istediğim gibi bir çıktı alabiliyorum.. Yapmak istediğim şey ise şu şekilde çıkta alabilmek

J A L E
1 2 3 4


şimdilik bunu çözersem kodumu geliştirebileceğim.. ileriye dönük olarak hazırlamaya çalıştığım için Kod biraz saçma gelebilir.. Bunu nasıl yapabileceğim hakkında bilgi rica edecektim.

Ayrıyetten bir başka sorumda bir array a cin << şeklinde nasıl veri yerleştirebilirim yapmak istediğim aslında şöyle birşey yukarıdaki 1 2 3 4 öğrencilerin numaraları j,a,l,e ise öğrenci isimlerinin baş harfleri... 1 numara j adlı öğrenciyi 2 numara a, 3 numara l ve 4 numarada e adlı öğrencileri ifade etmekte.. program açıldığında bir menu gelecek ve tüm öğrenci isimlerini sorgulayacak mesela j isimli öğrenci burdamı evet veya hayır .. ve sırayla tüm öğrencileri sorgulayıp yukardaki kodu geliştirdiğimde. aşağıdaki gibi bir ekranla karşılaşmayı umut ediyorum. toplam 5 seferlik bir döngü olucak yani 5 günlük yoklama gibi.

- +- -
- +- -
++- -
++-+
++-+
3502
1234

formdan gelen hayırlar (-)öğrenci o gün gelmemiş.evetler ise (+) ifade etmekte.. örneğe göre 1 numaralı öğrenci iki gün gelmemiş.3 numaralı öğrencide hiç gelmemiş. en alttaki 1234 öğrencileri bir üstündeki satırda kaç gün geldiklerini ifade etmekte.. bu yüzden nasıl array a veri gireleceğini sordum...

Yardım ve değerli fikirleriniz için şimdiden teşekkürlerimi sunarım.


acehreli
28/04/2008, 03:39
Baslik icin su fonksiyondan yararlanabilirsin:


void baslik_yaz(char adlar[4][10])
{
for (int i = 0; i != 4; ++i)
{
cout << adlar[i][0] << ' ';
}

cout << endl;
}


Ayni sekilde not yazdiran bir fonksiyon da yazarsan, sonra main'den onlari su sirada cagirirsin:


baslik_yaz(ad);
not_yaz(Osman);


Ayrica notlar:

1) Kullandigin kaynak cok eski. C++'ta <iostream.h> diye deneysel bir baslik vardi ama artik yok. Onu kullanan kaynaklardan uzak dur, cunku cok eski ve standart disi seyler ogreniyor olabilirsin. Onun yerine simdilik su iki satiri kullan:

#include <iostream>
/* diger standart basliklar... */
using namespace std;

2) main'in dOnUs tUrU int'tir. 'void main' yazan kaynaklara da supheyle yaklas.

Ali

crzy
29/04/2008, 00:20
ali hocam mesajın için tşk dediğin şekilde yapmaya çalıştım.. fakat ikinci fonksiyonu çalıştıramadım.. yeni kodum şu şekilde..


#include <iostream>
#include <string>
using namespace std;
void not_yaz(int Hamza[4], char ad[4][10])
{
for (int i = 0; i != 4; ++i)

cout << Hamza[i] << ' ';


cout << endl;
}

void baslik_yaz(char ad[4][10])
{
for (int i = 0; i != 4; ++i)
{
cout << ad[i][0] << ' ';
}

cout << endl;
}
void main()
{
// int Osman[4]={0};
char ad[4][10] = {"J", "A", "L", "E"};
int Hamza[4][4] = {1,2,3,4};
baslik_yaz(ad);
not_yaz(Hamza);
}



error C2660: 'not_yaz' : function does not take 1 parameters


hatası alıyorum.. fakat
void not_yaz(int Hamza[4], char ad[4][10])
şeklinde yapmazsam hamza ile ad ı nasıl ilişkilendiricem.. fikirleriniz için tşk

acehreli
29/04/2008, 02:01
Benim anladigim kadariyla, ikisi arasindaki iliski bir tamsayidan olusuyor. Notlar dizisinin birinci elemani ile adlar dizisinin birinci elemani birbiriyle iliskili, vs.

Boyle ayri diziler tutmak yerine, ilgili bilgileri bir yapida (struct) toplayip, o yapi dizisiyle ilgilenmek daha uygun olur:


struct Ogrenci
{
char ad[20];
int not;
/* baska bilgiler */
};


Sonra,

Ogrenci ogrenciler[4];

gibi... Ama o 10, 4 gibi sabitler sonradan sorun cikartacaklar. Onun icin ya dinamik nesneler kullanacaksin, ya da zaten C++ yazdigin icin en iyisi:


#include <string>
/* ... */
struct Ogrenci
{
string ad;
int not;
/* ... */
};


Simdi bir Ogrenci vector'u kullanabilirsin:


#include <vector>
/* ... */
vector<Ogrenci> ogrenciler;
/* ... */
cout << ogrenci[0].ad; // vs.


Eger zaten bilmiyorsan hemen vector'u ve string'i ogrenmeni oneririm.

Ali

crzy
29/04/2008, 19:02
örneğin için çok teşekkürler Ali hocam fakat bu bir ödev olduğu için hocanın istediği şekilde yapmam gerekiyor zamanımda kısıtlandı iyice kalıcaz bu gidişle :( yarım yamalak ingilizcesiyle bulgar adamı ingiliz okuluna hoca yaparlarsa böyle oluyor tabi tam olarak öğrenemiyoruz