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.
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 >
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 >
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 >