sunu algo10

Post on 03-Jul-2015

180 Views

Category:

Business

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ALGORİTMA VE PROGRAMLAMA

Sıralama

SIRALAMA

Sıralama, bir dizideki sayısal elemanların

küçükten büyüğe veya büyükten küçüğe,

sayısal olmayan bir dizideki elemanların ise

A’ dan Z’ ye veya Z’ den A’ ya sıralama

işlemidir. Sıralama işlemi örnekler yardımıyla

açıklanacaktır.

En çok kullanılan sıralama algoritmalarından

biri “Seçimli Sıralama, Selection Sort”

algoritmasında, dizideki ilk elemandan

başlayarak, her bir eleman kendisinden

sonra gelen diğer elemanlarla karşılaştırılır

(1. eleman 2, 3, …, n. elamanlarla, 2. eleman

3, 4, …, n. elemanlarla).

Gerekiyorsa elemanların yerleri değiştirilir.

ÖRNEK: 5 ELEMANLı SAYıSAL BIR DIZININ KÜÇÜKTEN

BÜYÜĞE SıRALANMASı

Küçükten büyüğe doğru sıralanmak istenilen

dizi elemanları:

Eleman

no

1 2 3 4 5

Eleman 22 43 24 9 45

ADıM 1: DIZIDEKI EN KÜÇÜĞÜN BULUNUP DIZININ ILK

ELEMANı OLARAK BELIRLENMESI

iterasyon

Dizi Elemanları

1 2 3 4 5

1 22 43 24 9 45

2 22 43 24 9 45

3 22 43 24 9 45

4 9 43 24 22 45

5 9 43 24 22 45

1. adımda dizideki eleman sayısı kadar işlem

yapılarak dizideki en küçük eleman bulunarak ilk

sıraya alınmıştır.

İlk işlemde 22 ile 43 karşılaştırılmış, önceki sırada

olan sonrakinden küçük olduğundan değişim

yapılmamıştır. 3. işlemde dizinin 1. ile 4. elemanı

karşılaştırılmış, 9 daha küçük olduğundan 1 ile 4.

eleman yer değiştirmiştir.

ADıM 2: DIZIDEKI 2. EN KÜÇÜĞÜN BULUNUP DIZININ 2.

ELEMANı OLARAK BELIRLENMESI

iterasyon

Dizi Elemanları

1 2 3 4 5

1 9 43 24 22 45

2 9 24 43 22 45

3 9 22 43 24 45

4 9 22 43 24 45

ADıM 3: DIZIDEKI 3. EN KÜÇÜĞÜN BULUNUP DIZININ 3.

ELEMANı OLARAK BELIRLENMESI

iterasyon

Dizi Elemanları

1 2 3 4 5

1 9 22 43 24 45

2 9 22 24 43 45

3 9 22 24 43 45

ADıM 4: DIZIDEKI 4. EN KÜÇÜĞÜN BULUNUP DIZININ 4.

ELEMANı OLARAK BELIRLENMESI

İşlem no

Dizi

1 2 3 4 5

1 9 22 24 43 45

2 9 22 24 43 45

Sıralı dizi:Eleman

no

1 2 3 4 5

Eleman 9 22 24 43 45

YUKARıDAKI DIZININ SıRALANMASıNA AIT PROGRAM ŞU

ŞEKILDEDIR:

// siralamaSecmeli.cpp : main project file.

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

int dizi[] = {22, 43, 24, 9, 45};

int N = 5;

int i, j, gecici;

int main()

{

cout << "Siralanmamis dizi\n\n";

cout << "No Eleman\n";

cout << "-- ------\n";

for (i=0; i<N; i++)

cout << setw(2) << (i+1)

<< setw(6) << dizi[i]

<< endl;

for (i=0; i<N-1; i++)

for (j=i+1; j<N; j++)

if (dizi[i]>dizi[j])

{

gecici = dizi[i];

dizi[i] = dizi[j];

dizi[j] = gecici;

}

cout << "\nSirali dizi\n\n";

cout << "No Eleman\n";

cout << "-- ------\n";

for (i=0; i<N; i++)

cout << setw(2) << (i+1)

<< setw(6) << dizi[i]

<< endl;

getch();

return 0;

}

ÖRNEK: GIRILEN 5 ADET ISMIN A’DAN Z’YE

SıRALANMASı

Sayısal olmayan bilgilerin sıralanmasında, dizi

elemanları karşılaştırılırken birbirine eşit,

birbirinden büyük veya küçük olmaları ==, > ve <

gibi semboller ile karşılaştırılamaz.

Yani

dizi[i] < dizi[j]

şeklinde bir ifade kullanılamaz.

Bunun yerine, sayısal olmayan bilgilerin

karşılaştırılmasında strcmp() fonksiyonu

kullanılması gerekmektedir.

strcmp( dizi[i], dizi[j])

strcmp( isim, aranan)

strcmp( isim, “Ali”)

strcmp() fonksiyonu iki değişkenin birbirine

eşit olup olmama, alfabetik olarak hangisinin

daha önce veya daha sonra geldiğine göre

farklı sayısal değerler üretir.

strcmp(isim, aranan) örneğine göre

isim değişkeninin değeri aranan

değişkeninin değerine eşitse strcmp()

fonksiyonu 0,

isim, aranan değişkenine göre alfabetik

olarak daha önce geliyorsa negatif bir sayı,

tersi durumda ise pozitif bir sayı üretir.

// siralaKarakter.cpp : main project file.

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

char Ad[5][15], Gecici[15];

int N = 5;

int i, j;

int main(array<System::String ^> ^args)

{

for (i=0; i<N; i++)

{

cout << (i+1) << ". kisi ismi: ";

cin >> Ad[i];

}

for (i=0; i<N-1; i++)

for (j=i+1; j<N; j++)

if (strcmp( Ad[i], Ad[j] ) > 0)

{

strcpy( Gecici, Ad[i] );

strcpy( Ad[i], Ad[j] );

strcpy( Ad[j], Gecici );

}

cout << "\nSirali dizi\n";

cout << "-----------\n";

for (i=0;i<N;i++)

cout << Ad[i]<<endl;

getch();

return 0;

}

ÖRNEK:

Günlük sıcaklık değerleri klavyeden

bilgisayara girildiğinde, sıcaklığa göre

büyükten küçüğe sıralı listeyi oluşturan bir

program yazınız?

/ sicaklik.cpp : main project file.

#include "stdafx.h"

#include <iostream>

#include <iomanip>

#include <conio.h>

using namespace std;

char Gun[7][15], B[15];

int Sicaklik[7], S;

int i,j;

int main()

{

for (i=0; i<7; i++)

{

cout << (i+1) << ". gun ";

cin>>Gun[i];

cout << "sicaklik degeri: ";

cin >> Sicaklik[i];

}

for (i=0; i<6; i++)

for (j=i+1; j<7; j++)

if (Sicaklik[i] < Sicaklik[j])

{

S = Sicaklik[i];

Sicaklik[i] = Sicaklik[j];

Sicaklik[j] = S;

strcpy( B, Gun[i] );

strcpy( Gun[i], Gun[j] );

strcpy( Gun[j], B );

}

cout << "\n\nGunler Sicaklik\n";

cout << "--------------- --------\n";

cout << setiosflags(ios::left); //sola dayali format

for (i=0;i<7;i++)

cout << setw(16) << Gun[i]

<< Sicaklik[i] << endl;

getch();

return 0;

}

ÖDEV: 10 öğrencinin bulunduğu bir

sınıfta, öğrenci adı, soyadı, vize ve

final notunu dizi veri tipine

kaydeden, vize ve finalin %50’sini

alarak başarı notunu hesap eden,

girilen verileri ve başarı notunu

listeleyen, isme göre arama yapan,

vize notuna göre küçükten büyüğe

sıralayan, başarı notu 50’nin üzerinde

olanları listeleyen bir program

yazınız?

top related