
Belirsiz sayıdaki bir öğrenci grubu için çift yönlü bağlantılı liste yapısı oluşturunuz.Listede öğrencilerin adı, numarası, vizesi, finali ve ortalması mecuttur.
a)Listeye eleman ekleyen
b)Adın alfabetik sırasına göre araya ekleyen
c)Listenin ad ve ortalama kısmınıbir diziye aktarıp diziyi ortalaması yüksek olandan düşük olana doğru sıralayan
d)Listeyi görüntüleyen
e)Numaraya göre eleman silen
bir C++ programı yazınız.
#include<stdio.h> #include<stdlib.h> #include<string.h> struct dllist
{
int no,vize,final;
float gn;
char kelime[20];
struct dllist *on,*arka;
};
struct dllist2
{
float not;
char ad[20];
};
static dllist *bas,*son;
void elemanekle(struct dllist *ct)
{
struct dllist *p;
if(bas==NULL)
{
bas=ct;
ct->arka=NULL;
ct->on=NULL;
return;
}
else
for(p=bas;p->arka!=NULL;p=p->arka);
p->arka=ct;
ct->on=p;
ct->arka=NULL;
}
void listele()
{
struct dllist *p;
p=bas;int s=0;
do
{
s++;
printf("%d. eleman \n ad:%s \n",s,p->kelime);
printf(" no: %d \n",p->no);
printf(" vize: %d \n",p->vize);
printf(" final: %d \n",p->final);
printf(" ortalama: %f \n",p->gn);
p=p->arka;
}while(p!=NULL);
}
void notsirala()
{
struct dllist *q;
struct dllist2 not[50],noty;
int r=0,i,j;
for(q=bas;q!=NULL;q=q->arka)
{
r++;
strcpy(not[r].ad,q->kelime);
not[r].not=q->gn;
}
for(i=1;i<=r;i++)
for(j=i+1;j<=r;j++)
if(not[i].not<not[j].not)
{
noty=not[i];
not[i]=not[j];
not[j]=noty;
}
for(i=1;i<=r;i++)
{
printf("%d. eleman\n ad:%s\n",i,not[i].ad);
printf("not:%f",not[i].not);
}
}
void arayaekle(struct dllist *p)
{
struct dllist *q,*once;
if(bas==NULL)
{
bas=p;
p->arka=NULL;
p->on=NULL;
return;
}
for(q=bas;q!=NULL;q=q->arka)
if(strcmp(p->kelime,q->kelime)==-1)
{once=q->on;
break;
}
if(q->on!=NULL&&q->arka!=NULL)
{
p->on=once;
p->arka=q;
q->on=p;
once->arka=p;
return;
}
if(q->on==NULL)
{
q->on=p;
p->on=NULL;
p->arka=q;
bas=p;return;
}
if(q->arka==NULL)
{
q->arka=p;
p->arka=NULL;
p->on=son;
son=p;return;
}
}
void sil(int e)
{
struct dllist *ogr;
for(ogr=bas;ogr->arka==NULL;ogr=ogr->arka)
if(ogr->no==e)
break;
if(ogr->on==NULL)
bas=ogr->arka;
else if(ogr->arka==NULL)
ogr->on->arka=NULL;
else
{
ogr->on->arka=ogr->arka;
ogr->arka->on=ogr->on;
}
}
void main()
{
int sec,a;
float ort;
struct dllist *m;
do
{
printf("\n 1. eleman ekle");
printf("\n 2. listele");
printf("\n 3. ada göre sıralı ekle");
printf("\n 4. ortalamaya göre sırala");
printf("\n 5. Numaraya göre eleman silme");
printf("\n 6. ‡kŸ");
printf("\nseciminiz: ");
scanf("%d", &sec);
switch(sec)
{
case 1:
m=(struct dllist *)malloc(sizeof(dllist));
printf("ad giriniz: ");
scanf("%s",&m->kelime);
printf("no giriniz: ");
scanf("%d",&m->no);
printf("vize giriniz: ");
scanf("%d",&m->vize);
printf("final giriniz: ");
scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
m->gn=ort;
elemanekle(m);
break;
case 2:
listele();
break;
case 3:
m=(struct dllist *)malloc(sizeof(dllist));
printf("ad giriniz: ");
scanf("%s",&m->kelime);
printf("no giriniz: ");
scanf("%d",&m->no);
printf("vize giriniz: ");
scanf("%d",&m->vize);
printf("final giriniz: ");
scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
m->gn=ort;
arayaekle(m);
break;
case 4:
notsirala();
break;
case 5:
printf("\nKaydını silmek istediğiniz öğrencinin numarasını giriniz");
scanf("%d",&a);
sil(a);
case 6:exit(0);
}
}while(1);
}
Yorumlar10
programda not diye değişken tanımlanmış, not diye değişken tanımlanamaz.. başka da bi sıkıntı yok.. not kelimesini notu diye değiştirin çalışır...
Derleyici kaynaklı bir hata. Öğrenci arkadaşlarımıza yardımcı olsun diye hatayı düzeltip tekrar koyuyorum.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct dllist
{
int no,vize,final;
float gn;
char kelime[20];
struct dllist *on,*arka;
};
struct dllist2
{
float notu;
char ad[20];
};
static dllist *bas,*son;
void elemanekle(struct dllist *ct)
{
struct dllist *p;
if(bas==NULL)
{
bas=ct;
ct->arka=NULL;
ct->on=NULL;
return;
}
else
for(p=bas;p->arka!=NULL;p=p->arka);
p->arka=ct;
ct->on=p;
ct->arka=NULL;
}
void listele()
{
struct dllist *p;
p=bas;int s=0;
do
{
s++;
printf("%d. eleman \n ad:%s \n",s,p->kelime);
printf(" no: %d \n",p->no);
printf(" vize: %d \n",p->vize);
printf(" final: %d \n",p->final);
printf(" ortalama: %f \n",p->gn);
p=p->arka;
}while(p!=NULL);
}
void notsirala()
{
struct dllist *q;
struct dllist2 notu[50],noty;
int r=0,i,j;
for(q=bas;q!=NULL;q=q->arka)
{
r++;
strcpy(notu[r].ad,q->kelime);
notu[r].notu=q->gn;
}
for(i=1;i<=r;i++)
for(j=i+1;j<=r;j++)
if(notu[i].notu<notu[j].notu)
{
noty=notu[i];
notu[i]=notu[j];
notu[j]=noty;
}
for(i=1;i<=r;i++)
{
printf("%d. eleman\n ad:%s\n",i,notu[i].ad);
printf("notu:%f",notu[i].notu);
}
}
void arayaekle(struct dllist *p)
{
struct dllist *q,*once;
if(bas==NULL)
{
bas=p;
p->arka=NULL;
p->on=NULL;
return;
}
for(q=bas;q!=NULL;q=q->arka)
if(strcmp(p->kelime,q->kelime)==-1)
{once=q->on;
break;
}
if(q->on!=NULL&&q->arka!=NULL)
{
p->on=once;
p->arka=q;
q->on=p;
once->arka=p;
return;
}
if(q->on==NULL)
{
q->on=p;
p->on=NULL;
p->arka=q;
bas=p;return;
}
if(q->arka==NULL)
{
q->arka=p;
p->arka=NULL;
p->on=son;
son=p;return;
}
}
void sil(int e)
{
struct dllist *ogr;
for(ogr=bas;ogr->arka==NULL;ogr=ogr->arka)
if(ogr->no==e)
break;
if(ogr->on==NULL)
bas=ogr->arka;
else if(ogr->arka==NULL)
ogr->on->arka=NULL;
else
{
ogr->on->arka=ogr->arka;
ogr->arka->on=ogr->on;
}
}
int main()
{
int sec,a;
float ort;
struct dllist *m;
do
{
printf("\n 1. eleman ekle");
printf("\n 2. listele");
printf("\n 3. ada göre sıralı ekle");
printf("\n 4. ortalamaya göre sırala");
printf("\n 5. Numaraya göre eleman silme");
printf("\n 6. ‡?k?Ÿ");
printf("\nseciminiz: ");
scanf("%d", &sec);
switch(sec)
{
case 1:
m=(struct dllist *)malloc(sizeof(dllist));
printf("ad giriniz: ");
scanf("%s",&m->kelime);
printf("no giriniz: ");
scanf("%d",&m->no);
printf("vize giriniz: ");
scanf("%d",&m->vize);
printf("final giriniz: ");
scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
m->gn=ort;
elemanekle(m);
break;
case 2:
listele();
break;
case 3:
m=(struct dllist *)malloc(sizeof(dllist));
printf("ad giriniz: ");
scanf("%s",&m->kelime);
printf("no giriniz: ");
scanf("%d",&m->no);
printf("vize giriniz: ");
scanf("%d",&m->vize);
printf("final giriniz: ");
scanf("%d",&m->final);
ort=float(0.4*m->vize+0.6*m->final);
m->gn=ort;
arayaekle(m);
break;
case 4:
notsirala();
break;
case 5:
printf("\nKaydını silmek istediğiniz öğrencinin numarasını giriniz");
scanf("%d",&a);
sil(a);
case 6:exit(0);
}
}while(1);
}
hele o hata yok diyen kim allah için beri gelsin .. kardeş nasıl hata yok , her türlü derlemeye çalıştığımda hata veriyor , kullandığım derleyici dev c pp .. siz hangi derleyiciyi kullanıyorsunuz da hata almıyorsunuz ?
bkz. google/C/C++ complier mingw
mingw ile dosya uzantıalrını .cpp ve .hpp(veya .h) olarak bir klasöre kaydedersiniz ve indirdiğiniz mingw derleyici ile derleme işlemini (cmd - dos üzerinden) pekala yapabilirsiniz karşılaşacağınız en ağla problem de makefile dosyası hazırlamak olabilir...
bkz. google/ makefile dosyası oluşturma
bu kodlari .c uzantili nasil duzenleyip calistirabilirz
Kod hatasız çalışmaktadır.Eğer bir hata alıyorsanız bu büyük bir olasılıkla sizin derleyicinizden kaynaklanmaktadır.
Az önce kodları koplayalayıp yeni bir C++ source file ına yapıştırdım ve compile ettim gayet sorunsuz çalışıyor. Nasıl bir hata alıyorsunuz. Paylaşabilir misiniz?
bende hala hata veriyor
Uyardığınız için teşekkür ederim.Hatayı düzelttim.Artık sorunsuz çalışıyor...
teşekkür ederim ama kodları çalıştırmaya çalıştığımda hata veriyor.
Yorumlarınızı Bekliyoruz
Yorum Yazın