C dilinde bir dizinin içindeki ardışık terimleri bulma

0 beğenilme 0 beğenilmeme
36 kez görüntülendi
Önceden belirlenmiş bir dizinin içinde ardışık sıralanmış elemanları bulan bir program yazmaya çalışıyorum.Örneğin dizi[ ]={1,2,3,4,5,6,7,8,9} olsun.Bu program 1,2 yazınca çalışacak "VAR" fakat 2 ,3 ,5 yazınca "YOK" sonucunu üretecek. Kodu yazdım fakat yanlış sonuçlar üretiyor
işte kod
#include <stdio.h>
#include <conio.h>
int main(){
int array1[]={2,3,5,7,9,11,13,17,23} ,i,j,k,amount,array2[j],a,found=0;
printf("how many number do you enter="); scanf("%d",&amount);
    for(k=0;k<amount;k++){
printf("enter %i.number =\n",k+1); 
scanf("%d",&array2[k]);}
for(j=0;j<9;j++){
if(array1[j]=array2[0]){
goto flag;
}
 flag:
for(a=1;a<=amount;a++){
if(array1[j+a]=array2[a]){ 
}
}
}
if(found=1){printf("EXIST");
}
else printf("DOES NOT EXIST");
getch();
}
hata nerde olabilir acaba?
27, Nisan, 27 Uygulamalı Bilgisayar Bilimi kategorisinde emre iriş (38 puan) tarafından  soruldu
Var - Yok kismindan anladigim:

Liste sirali olsun, degilse artan siraya gore yazmak zor degil.
a[i+1]-a[i] farklarindan biri 1e esit degilse yok yazdiracaksin eger hepsi oyleyse var.

`ardışık sıralanmış elemanları bulan' dediginden sanki 2,3,5 listesinden 2,3'u bulmayi anliyorum.

Ben dediğini python'da yazdım.Bakmak istersen 

####################

Dizi = input("Dizi : ")

Dizi = Dizi.split(",")

Dizi = [int(i) for i in Dizi]

ardışık = list()



for i in Dizi:

    if i == Dizi[len(Dizi)-1]:

        break

    else:

        if i not in ardışık:

            saved_index_i = Dizi.index(i)

            index_i = Dizi.index(i)


                

            while (Dizi[index_i+1]) == (Dizi[index_i]+1):

                if ((index_i)==(len(Dizi)-1)):

                    break


                else:

                    if Dizi[saved_index_i] not in ardışık:

                        ardışık.append(Dizi[saved_index_i])

                        

                    ardışık.append(Dizi[index_i+1])


                    if Dizi[index_i]+1 != Dizi[len(Dizi)-1]:

                        index_i += 1  

                    else:

                        

                        break

        else:

            continue





print(ardışık)

input()

####################

Biraz karmaşık yazmışım.En son ekrana ardışık elemanların listesini döndürür.



Var olma durumunda ardisik farklar 1 olur. Ve bu farklarin toplami (1 lerin toplami) test ettigin alt diznin uzunlugundan bir eksik olur. 


Ben Mathematica ile soyle yaptim. Difference fonksiyonu ardisik farklari bulur. SubsetQ ise verilen dizinin alt dizi olup olmadigini test eder. Eger ikiside dogru ise Var yazar, aksi halde Yok yazar. && isareri Ve demektir.


varYok[test_, dizi_] :=If[SubsetQ[dizi,test] && (Total[Differences@test] == Length@test - 1),
Print["Var"], Print["Yok"]]


image

...