Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
1
Cevap
146
Tıklama
0
Öne Çıkarma
Proje Ödevi Yardım
Y
7 yıl
Onbaşı
Konu Sahibi

Selamlar arkadaşlar proje ödevim için kalan tek şey elimdeki kodu istenen şekile uyarlamam lazım.Bizden istenen şey;
a) Sıralama tekniğinin algoritmasını ya da akış şemasını hazırlayınız.
b) Algoritmanın çalışma mantığını örnek bir dizi üzerinde açıklayınız.
c) b şıkkındaki algoritmayı C programlama dilinde sırala adlı bir fonksiyon olarak kodlayınız.
d) Daha sonra main(Ana) fonksiyonda sırala fonksiyonunu 3 farklı tipte (int, float, string) ve karışık sırada diziyi sıralatmak için çağırınız. Ana (main) fonksiyon dizilerin hem sırasız, hem de sıralı hallerini ekrana yazdırmalıdır.
e) Raporunuz hazırlarken kullandığınız KAYNAKLAR LİSTESİ raporunuza eklenmelidir.

Her şey tamam sadece d şıkkı kaldı.Onu da yaptım ama sadece int değerleri yazdırıyor =(

Benden istenen şey; main(Ana) fonksiyonda sırala fonksiyonunu 3 farklı tipte (int, float, string) ve karışık sırada diziyi sıralatmak için çağırınız. Ana (main) fonksiyon dizilerin hem sırasız, hem de sıralı hallerini ekrana yazdırmalıdır.


Arkadaşlar kod tamam ama benim kod sadece int değerleri yazdırıyor.İstenen şekilde nasıl yapabilirim.Bir türlü yapamadım =( kodum bu şekilde.


#include <stdio.h>
#include <stdlib.h>

void sirala(int *,int, int);

int main(){
int *array,i,size;
printf("Dizinin boyutunu giriniz: "); scanf("%d",&size);
array=(int *)malloc(size*sizeof(int));
for(i=0;i<size;i++){
printf("Dizinin %d. elemani :",i+1); scanf("%d",&array*i*);
}
printf("Dizinin baslangic durumu: ");
for(i=0;i<size;i++){
printf("%d ",array*i*);
}
sirala(array,0,size-1);
printf("

Dizinin son durumu: ");
for(i=0;i<size;i++){
printf("%d ",array*i*);
}
return 0;
}

void sirala(int *array,int first,int last){
int i; // İlk elemanı tutacak sayaç değişkeni
int j; // Son elemanı tutacak sayaç değişkeni
int pivot; // Pivot elemanı tutacak sayaç değişkeni
int tmp; // Yer değiştirme işlemi için kullanılacak değişken
pivot=first; // Pivot ilk eleman seçilir

// Burada yapılan işlem son eleman ilk elemandan büyükse, son eleman ilk elemandan büyük olduğu sürece baştan ve sondan pivottan büyük olan ve
// pivottan küçük olan bir eleman seçilip yer değiştirilir.
if(last>first){
pivot=first;
i=first;
j=last;
while (i<j){
while (array*i*<=array[pivot] && i<last && j>i){ // Baştan pivottan büyük olan bir eleman bulunur
i++;
}
while (array[j]>=array[pivot] && j>=first && j>=i){ // Sondan pivottan küçük olan bir eleman bulunur
j--;
}
if (j>i){ // Swap işlemi yapılır
tmp=array*i*;
array*i*=array[j];
array[j]=tmp;
}
}
// Yeniden pivot seçilir ve bölünen bağlı listenin diğer parçaları tekrar quick sort fonksiyonuna gönderilir
tmp=array[j];
array[j]=array[pivot];
array[pivot]=tmp;
sirala(array,first,j-1);
sirala(array,j+1,last);
}
}

NOT:****Bu arada nedense forumda köşeli parantez yazılmıyor anlamadım. Kodumun içindeki köşeli parantezleri forumdan dolayı yazmadığı için sizde hata verebilir. Ben o hata yerlerini su sekılde yapayım. *i* siz yıldız yerine köşeli parantez yazacaksınız.Bahsettiğim satırlar 11-15-20-39-46-47 ***

Şimdiden teşekkürler...





< Bu mesaj bu kişi tarafından değiştirildi YalnızBen -- 8 Mayıs 2018; 17:51:41 >

S
7 yıl
Yüzbaşı

tamplate fonk ile kolay bir şekilde hallediliyor. C++ ın özelliği, c de yer almıyor.

#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

template <typename T>
void sirala(T * array, int first, int last){// T tipi diziyi tutacaktir.
int i;
int j;
int pivot;
T tmp;
pivot=first;


if(last>first){;
pivot=first;
i=first;
j=last;
while (i<j){
while (array[i]<=array[pivot] && i<last && j>i){
i++;
}
while (array[j]>=array[pivot] && j>=first && j>=i){
j--;
}
if (j>i){
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
}
}

tmp=array[j];
array[j]=array[pivot];
array[pivot]=tmp;
sirala(array,first,j-1);
sirala(array,j+1,last);
}
}

int main(){
int *iarray,i,size, secim;
float *farray;
char *carray;
printf("Dizinin boyutunu giriniz: "); scanf("%d",&size);
do{
printf("
[1] Tamsayi
[2]ondalikli sayi
[3]Karakter
Siralamak istediginiz veri tipini secin:");
scanf("%d", &secim);
switch (secim){//kullanicidan hangi veri tipi icin islem yapacagi alinir
case 1 :{// tamsayi degiskeni için
iarray=(int *)malloc(size*sizeof(int));
for(i=0;i<size;i++){
printf("Dizinin %d. elemani :",i+1); scanf("%d",&iarray[i]); }//kullanıcıdan veri alinir
printf("Dizinin baslangic durumu: ");
for(i=0;i<size;i++){//dizinin sirasiz hali yazdirilir.
printf("%d ",iarray[i]);}
sirala(iarray,0,size-1);//Siralama icin fonk cagirilir
printf("

Dizinin son durumu: ");
for(i=0;i<size;i++){//dizinin sirali hali yazdirilir.
printf("%d ",iarray[i]);}
free(iarray);//Bellek serbest birakilir
break;
}
case 2:{//ondakil sayi degiskeni icin
farray=(float *)malloc(size*sizeof(float));
for(i=0;i<size;i++){
printf("Dizinin %d. elemani :",i+1); scanf("%f",&farray[i]);}//kullanıcıdan veri alinir
printf("Dizinin baslangic durumu: ");
for(i=0;i<size;i++){//dizinin sirasiz hali yazdirilir.
printf("%f ",farray[i]);}
sirala(farray,0,size-1);//Siralama icin fonk cagirilir
printf("

Dizinin son durumu: ");
for(i=0;i<size;i++){//dizinin sirali hali yazdirilir.
printf("%f ",farray[i]);
}
free(farray);//Bellek serbest birakilir
break;}

case 3:{//string degiskeni icin
carray=(char *)malloc((size)*sizeof(char));
printf("Karekter Dizisini Giriniz:"); getchar(); gets(carray);//kullanıcıdan veri alinir
printf("Dizinin baslangic durumu: %s", carray);//dizinin sirasiz hali yazdirilir.
sirala(carray,0,size-1);//Siralama icin fonk cagirilir
printf("

Dizinin son durumu: %s", carray);//dizinin sirali hali yazdirilir.
free(carray);//Bellek serbest birakilir
break;
}
}}while(secim!=1 || secim!=2 || secim!=3 );
return 0;
}










< Bu mesaj bu kişi tarafından değiştirildi silliusblack -- 12 Mayıs 2018; 0:36:41 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.