Dizideki En küçük Sayıyı bulma Programı

Başlatan 94220039, 16 Ocak 2014, 17:56:31

94220039

Bir cihazın programında kullanmak üzere 10 elemanlı bir dizideki en küçük sayıyı ve bu sayının kaçıncı sırada olduğunu bulmam gerekti. Dizideki sayıların Word olarak işlenmesi gerekiyordu. Fakat uygun program kodunu yazamadım. Word tipindeki sayıları Byte formatına dönüştürüp ( Tüm sayıları 8'e bölüp yeni bir dizi elde ettim ) o şekilde sonuca ulaştım.

Word tipinde ve assembly dilinde yazabilecek var mı?

pic18f serisi kullanıyorum.

Teşekkürler.

Not : Word tipindeki sayıları 8'e böldüğüm için normalde eşit olmayan sayılar birbirine eşit olmuş oldu. Yani buradan başa dönemiyorum.

RaMu

Eğer 2 word sayıdan hangisi daha küçük sorusunu cevaplayabiliyorsan gerisi basit,
asmdede yapılır elbet bu iş,
misal sayı basamakları ABCD  olsun
AB kısmı bir değişkende CD kısmı başka değişkende saklanır,
1. sayının AB kısmı eksi 2. sayının AB kısmı dersin
eper burada eşitlik yoksa işlem tamamdır küçük sayıyı buldun demektir bu açık zaten,
baktın AB kısımları eşit çıktı o zaman CD kısımlarına bakarsın,
şimdi sıra geldi 10 sayı için ne yapacağız,

öncelikle ilk sayının en küçük sayı olduğunu kabul edelim,
ve kaçıncı=0 diyelim, sayaç=sayaç+1 diyelim ilk sayının sıra numarası 0 kabul edildi,
ve 0. sayı eksi 1. sayı işlemini yukarıdaki anlatımdaki gibi yapalım,
eğer 0. sayı daha küçükse kaçıncı değişkeniyle hiç oynamayalım,
eğer yeni işleme konan sayı (yani burada 1. sayı) saha küçükse kaçıncı = sayaç diyelim,
sayaç =9 olana kadar olaya devam edelim bu kadar.
artık kaçıncı içinde hangi değer varsa o sayı en küçük sayıdır.

Bu işlemin c kodu şeklindeki hali;
http://www.programmingsimplified.com/c/source-code/c-program-find-minimum-element-in-array
dan alıntıdır;
#include <stdio.h>
 
int main() 
{
    int array[100], *minimum, size, c, location = 1;
 
    printf("Enter the number of elements in array\n");
    scanf("%d",&size);
 
    printf("Enter %d integers\n", size);
 
    for ( c = 0 ; c < size ; c++ )
        scanf("%d", &array[c]);
 
    minimum = array;
    *minimum = *array;
 
    for ( c = 1 ; c < size ; c++ ) 
    {
        if ( *(array+c) < *minimum ) 
        {
           *minimum = *(array+c);
           location = c+1;
        }
    } 
 
    printf("Minimum element found at location %d and it's value is %d.\n", location, *minimum);
    return 0;
}




Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

z

Word tipindeki sayilar hafizada 2 byte yer kaplar. Islemcin 8 bit olsun. Sayilar da isaretsiz olsun.

Veriler hafizada pespese yazilmis ise, once high 8 mi yoksa once low 8 mi geliyor buna dikkat etmek kaydiyla;

L1 1.sayinin alt 8 biti
H1 1.sayinin ust 8 biti olsun

L=L1-L2  ve H=H1-H2 - Cary islemini yaparsin. (Buradaki Cary, L1-L2 islemi sonucunda olusan cary dir.)

Eger H1-H2 islemi sonucunda Cary olustu ise 1. sayi 2. sayidan kucuktur.

Aksi takdirde (Cary=0 ise);

L=0 H=0 ise iki sayi birbirine esittir. Aksi takdirde 1. sayi 2.sayidan buyuktur.

Kullandigin islemcide C=1 durumu ters olabilir buna dikkat et. (Bazi islemcilerde C=0 Barrow anlamina gelebilir.)

Karsilastirma rutinini bu kurala gore yazarsan gerisini getirirsin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr
https://creativecommons.org/licenses/by/4.0/deed.tr "CC BY"