+ Cevap Yaz
Toplam 3 sayfadan 1. sayfa
1 2 3 En SonEn Son
27 sonuçtan 1 ile 10 arası gösteriliyor

Konu: Dizi yazdırma sorunları

  1. #1
    Üye
    Üyelik Tarihi
    01/2010
    Mesaj
    48

    Dizi yazdırma sorunları

    2 örnek yapmaya çalıştım ancak derleyemedim bir türlü,2 örnekte de derleyici aynı uyarıyı verdi,ufak bir hata yapıyorum sanırım ama anlayamadım

    Kod:
    #include <stdio.h>
    int main();
    {
        int gir;
        KONTROL:
        printf("bir sayi giriniz");
        scanf("%d" ,&gir);
        int c;
        c=getch();
        if((c>=0)&&(c<=9))
        goto KONTROL;
        int dizi[10] = gir;
        /*
        while(gir<10)
        printf("basamaklar %d %d %d" ,dizi[0],dizi[1],dizi[2]); // ilk 3 basamağını yazdırıyorum
        */
        for(int i=0;i<10;i++){
        printf("basamaklar %d %d %d" ,dizi[0],dizi[1],dizi[2]); // ilk 3 basamağını yazdırıyorum
        }
    
    getchar();
    return 0;
    
    }
    
    Yukarıda mantık hatası varsa onu da söylerseniz sevinirim.


    Kod:
    /*örnekte 4 basamaklı bir sayı alıyorum,son 3 basamağını yazdırmaya çalışıyorum.*/
    #include <stdio.h>
    int main();
    {
        int sayi,
        int dizi[10];
        KONTROL:
        printf("4 haneli bir sayi gir");
        scanf("%d" ,&sayi);
        if((sayi > dizi[4])&&(sayi < dizi[4]))
        goto KONTROL;
        while(sayi<9999){
        dizi[10]=sayi
        if(sayi==dizi[0])
        continue;
        }
    
    getchar();
    return 0;
    
    }
    
    Son örnekle ilgili şunu da sorayım,dizilerin son karakterleri \0 yani NULL du sanırım,ama bu karakter dizileri yani metinler için de sayılar içinde geçerliydi sanırım.Ama tam olarak bir girş olunca yani metin veya sayılar dizi boyutu ile aynı olunca dizinin boyutu ile aynı olabiliyordu sanırım.

  2. #2
    Üye
    Üyelik Tarihi
    02/2008
    Mesaj
    234

    Şu an pek detaylı yazamıyorum ama,

    1) int sayi[10]; 10 tane tam sayı tipinde değişken ve index 0 dan başlıyor, yani maksimum sayi[9] u kullanabilirsin.

    2)
    mesela bir sayımız olsun 1234 diye
    sayi[3] = 1234 yaptığında.

    sayı[0] = 1;
    sayı[1] = 2;
    sayı[2] = 3;
    sayı[3] = 4; değildir.

    sen int tipinde tanımladığın için sayı[3] = 1234; tür.

    yani sayi[0] = 0; sayi[1] = 0; sayi[2] = 0; sayi[3] = 1234; ......


    3) goto ifadesine gerek yok, do while ile işini çözebilirsin.

    4) daha yeni bir sınav sorusu sorulmuştu sayıları basamaklarına ayırmak ile ilgili, ona
    forum da bir bak

    5) bir karakter dizisi olarak girişi okursan, o zaman tek tek basamaklara daha kolay ulaşabilirsin, gets, fgets vs..

    6) isdigit fonksiyonuna internetten bir bak.

    Kolay Gelsin.
    Bekir.

  3. #3
    Üye
    Üyelik Tarihi
    01/2010
    Mesaj
    48

    Bir sayıyı veya kelimeyi diziye nasıl aktarırız?Şu iki yoldan hangisi doğru?

    a. int dizi= gir; //sadece dizinin ismini kullanarak
    b. int dizi={gir}

    Ben tek boyutlu dizileri bildiğimi sanıyordum ama çok eksiğim varmış

    do while hiç aklıma gelmemişti iyi oldu söylediğin Sanırım ileriye dönük olarak goto ya alışmamam için söylüyorsun

    isdigit ve buna benzer fonksiyonlar için bir sorum olacak: Bunlar ya 0 döndürüyor ya da farklı bir değer.Benim bunları kullanmam için argumanı gönderdiğim yerden gelen parametreleri yeni bir değişkene aktarıp oradan if(x==0) gibi bir mekanizma ile mi kontrol etmem gerekecek?(0 ise şöyle yap değilse printf ile sayı değildir yeniden gir gibi bir mesaj.)
    mesela(özetle)
    scanf ile "sayi_gir" olsun,
    fonk(sayi_gir);
    int kontrol_sonucu = fonk(sayi_gir);

    fonk(kontrol)
    kontrol=isdigit
    if(kontrol==0)
    return
    gibi bir yapı mı olacak?

    Bu arada ben yukarıda sorduğum 2 örneği derleyemiyorum bir türlü,başka bir nedenden dolayı hata veriyor sürekli,bi yerde önemli bir hata yapıyorum.

  4. #4
    Yaşar İsmail Aktaş shurzan Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2005
    Yer
    İstabul
    Mesaj
    131

    Merhaba,

    Evet dostum mantık hataları çokca yapılmış, tabikide yapacaktın bu yadırganacak durum değil.

    Birinci öneği ele alırsak.

    scanf("%d" ,&gir);
    int c;
    c=getch();
    if((c>=0)&&(c<=9))
    goto KONTROL;

    Burada kontrol edilmesi gereken ikinci kez klavyeden karakter aldığın c değil gir olmalıydı.
    Kullanıcı hem gir için hemde c için karakter girmiş olacak, gir için karakter girildiğinde c için karakter girimesi gerektiğinden kullanıcının haberi olmayacak.

    int dizi[10] = gir;

    Bu satırda hatalı; dizi yaratıldığı yerde ilk değer ataması ya ilk elemanına ,
    int dizi[10] = {0}; sınıfır atıyarak ilkleme yapılır ya da tüm elemenına ilk değerleri atılarak int dizi[10]={1,2,3,4,5,6,7,8,9,10}; şekinde yapılır, burada 10 elemanlı dizi yaratıyorsun ama hangi elamnına bunu yaparak int dizi[10] = gir; değer girmiş olacaksın?

    mümkünse hiç goto kullanma!, sadece C'nin yapılsallığını bozduğu için değil programın akışını değiştirmeside başlı başına sorundur ayrıca yerine kullanabileceğin döngüler zaten var.

    Diğer bir sorun ise 10 elamanlı diziye sadece 10 girdi yapabilirsin bunu kullanıcı bilmediğinden 10 dan fazla girdi yapılabilir bu durumda ne olacak taşma, bu kullanıcının bilgi dahilinde olsa bile kontrol kullanıcıya bırakılamaz 10. girdiden sonra program girdi almayacak şeklinde kontrol yapısı olmalı.

    dizi elanlarını görüntülerken de sorun var
    Kod:
        printf("basamaklar %d %d %d" ,dizi[0],dizi[1],dizi[2]);
    
    bu satırla zaten belirttiğin gibi ilk üçü elemanı görüntülemeye çalışmışsın ama bunu döngü ile 10 kere görüntülüyorsun yani; sen zaten dizi elemanlarını tektek görüntülemiyorsun o zaman döngü kullanman gereksiz.

    Umarım yardımcı olmuşumdur.
    Başarılar YAŞAR
    Bilgi,insanı kuşkudan
    iyilik, acı çekmekten
    kararlı olmak da korkudan kurtarır. (Konfüçyus)

  5. #5
    Üye
    Üyelik Tarihi
    10/2009
    Mesaj
    43

    1. kodda:
    1)
    PHP Kodu:
    int dizi[10] = gir 
    derleyici bu tanımlamaya hata verecektir.çünkü bir diziye değer verirken eğer verdiğin değer başka bir dizi değilse {} işaretleri arasında değer vermelisin.yani;
    PHP Kodu:
    int dizi[10] = {gir
    2)
    PHP Kodu:
    int dizi[10] = {gir
    gibi bir eşitleme yaptığın zaman dizinin [0] indeksli elemanı gir'e eşit olur.
    daha sonra
    PHP Kodu:
     printf("basamaklar %d %d %d" ,dizi[0],dizi[1],dizi[2]); // ilk 3 basamağını yazdırıyorum 
    ifadesinde çıktı "basamaklar [Girilen Sayı] 0 0" olacaktır.

    daha hatalar var.

    şu kod sorunsuz çalışıyor:
    PHP Kodu:
    #include "stdafx.h"
    #include <iostream>
    #include <conio.h>
    #include <locale>
    #include <string>

    using namespace std;

    int _tmain(int argc_TCHARargv[])
    {
        
    setlocale(LC_ALL,"Turkish");
        
        
    string Sayi "";

        
    cout << "Dört basamaklı bir sayı girin.\n";
        
    cin >> Sayi;

        
    cout << "\n\nGirdiğiniz sayının ilk üç basamağı : " << Sayi.substr(0,3);
        
        
    _getch();
        return 
    0;


  6. #6
    Üye
    Üyelik Tarihi
    01/2010
    Mesaj
    48

    Demekki gets ve puts kelime(strings) alırken işlev görüyor, scanf ve printf ise sayı alırken doğru mu?

    Kod:
    //Bu kod başarıyla derleniyor
    
    #include<stdio.h>
    int main( )
    {
        char kelime[10];
        printf( "kelime gir ");
        scanf( "%s", kelime );
        printf( "%s\n", kelime );
        return 0;
    }
    
    Kod:
    //Bu kod derlenmiyor
    
    #include<stdio.h>
    int main( )
    {
        char kelime[11];
        printf( "kelime gir ");//kelime[11] = { 'k', 'e', 'l', 'i', 'm','e','\n','g','i',r','\0' }; 
                           // gibi bir yapı oluşması lazım benim mantığıma göre
    
        scanf( "%s", kelime );
        printf( "%s\n", kelime[3] );//i basmasını bekliyorum(ama olmuyor)
        return 0;
    }
    
    int dizi[10] = {gir}
    CrimeCoder aslında dizinin bütün elemanları {gir} e eşit olmaz mı?
    int dizi[ 3 ] = { 0 }; // int dizi[ 3 ] = { 0, 0, 0 } oluyor benim bildiğim
    Ayrıca ,dizinin indisli elemanını değişkene aktarırken {} olmadan aktarılıyor ve de fonksiyonlara aktarırken gene sadece isimle aktarılıyor bildiğim kadarıyla.Bi de en altta verdiğin kodu hiç anlayamadım açıkçası.Biraz araştırdım sanırım substr php fonksiyonu
    shurzan verdiğin bilgiler çok faydalı oldu ve de önemli 2 hatamı tespit ettim sayende ama dizilerin değişkenlere aktarımı ve istediğim karakterleri ekrana yazdırma konusunda zorluk çekiyorum.

  7. #7
    Üye
    Üyelik Tarihi
    10/2009
    Mesaj
    43

    substring , string sınıfının bir fonksiyonudur.
    PHP Kodu:
    int dizi[10] = {gir
    benim derleyicim Visual Studio 2010 C++ Express ve bu komutta sadece dizi[0]'ı gir'e eşitliyor.

    dizilere atama yapılırken {} kullanılması gerek ama sadece belirli indeksli elemanına atama yaparken [] işaretleri arasında elemanı belirtip atama yapılabilir:

    PHP Kodu:
    int dizi[10];
    dizi[0] = 37
    dizi
    [1] = 47 
    yazdığım kodu açıklayayım:

    PHP Kodu:
    #include "stdafx.h" 
    #include <iostream> // IO kütüphanesi(cout ve cin için)
    #include <conio.h>  // getch() fonksiyonu için
    #include <locale>   // bu olmasada olur; Türkçe harflerin doğru çıkması için
    #include <string>   // string sınıfı için

    using namespace std// std isim alanı

    int _tmain(int argc_TCHARargv[]) // main fonksiyonu
    {
        
    setlocale(LC_ALL,"Turkish"); // Türkçe harflerin doğru çıkması için
        
        
    string Sayi ""// Sayi adlı değişkenimizi string türünden tanımlayıp ilk  değerini veriyoruz

        
    cout << "Dört basamaklı bir sayı girin.\n"// dört basamaklı bir sayı girilmesini istiyoruz
        
    cin >> Sayi// girilen sayıyı Sayi değişkenine kopyalıyoruz

        
    cout << "\n\nGirdiğiniz sayının ilk üç basamağı : " << Sayi.substr(0,3); // Girilen sayının ilk üç basamağını  göstermek  için  Sayi değişkenindeki ilk 3 karakteri kopyalıyoruz.
        
        
    _getch(); // herangi bir tuşa basılmasını istiyoruz
        
    return 0// programı sonlandırıyoruz

    programda sayının 4 basamaktan küçük olup olmadığı,içinde rakam dışında karakter olup olmadığı gibi kontroller eklenmesi gerekir.ben örnek olarak koydum.gerekli eklemeleri yaparsınız.

  8. #8
    Yaşar İsmail Aktaş shurzan Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2005
    Yer
    İstabul
    Mesaj
    131

    Bu yeni olduğundan yoksa diziler ile çalışma zor değildir.
    Birden fazla bilgiyi barındıran dizi, C++ ta konteynerler var vs. bunlara bilgiler tekrarlı işlem gören kod çalışması yapılır; döngü yapıları veya özyinelemeli fonkson.

    Basitçe;
    Kod:
    int dizi[] ={0};
     
    for(int i=0; i<=(10-1);++i)
    {
     dizi[i] = i;
    }
    
    böyle bir döngü ile dizi elemanlarına i değikeninin değeri atanıyor dizi elemanları bilgi ile dolduruluyor. şimdi bu bilgileri okuyalım. sonraki satırlarda her elemanı ekrana yazdıabilmek için dizi elemnları kadar tekaralama yapalım.

    Kod:
     
    //eğer dizi boyutunu bilmiyor isen basit bir hesaplama yaparsın (sizeof(dizi) / sizeof(dizi[0]) - 1) biliyorsan doğrudan boyutunu yazabilirsin.
    // for(int=0; i<=(10 - 1); ++i) bu 10 kez tekrarlama 
    //yaparak 10 değeri aralarında bir boşlu bırakarak ekrana yazar
     
    for(int=0; i<=(sizeof(dizi) / sizeof(dizi[0]) - 1); ++i)
    {
    prinf("%d ", dizi[i]);
    }
    
    Başarılar
    Bilgi,insanı kuşkudan
    iyilik, acı çekmekten
    kararlı olmak da korkudan kurtarır. (Konfüçyus)

  9. #9
    Üye
    Üyelik Tarihi
    01/2010
    Mesaj
    48

    Malesef ne kadar araştırdıysam "değişkenlerin dizilere" ve "dizilerin değişkenlere aktarılmasını" tam kavrayamıyorum,dizileri fonksiyonlara aktarınca sadece dizi ismi yeterli oluyor,değişkenlere aktarılırken niçin yeterli olmuyor onu anlamadım.Ben bu konuyu biliyorum zannediyordum ama meğer anlamamışım ve yanlış kavradığım için doğrusunu anlamakta zorlanıyorum.Ben şöyle bir kod yazdım çalışmadı

    Kod:
    #include<stdio.h>
    int main()
    {
        int dizi[10];
        int sayi;
        printf("sayi gir");
        scanf("%d",&sayi);
        dizi=sayi //ayrıca ben dizi[2] yenince 3.elemanına ulaşmak istiyorum 
        int i;
        for(i=0;i<11;i++;){
        printf("girdiginiz sayi %d dir,dizi[i]);
        }
        
    return 0;
    }
    
    Dizilerin değişkenlere aktarılmasını
    Değişkenlerin dizilere aktarılmasını(ve de eklenmesini)
    zamanı olan bir arkadaş kısaca açıklarsa çok memnun olurum.

  10. #10
    Yaşar İsmail Aktaş shurzan Adlı Üyenin Profil Grafiği
    Üyelik Tarihi
    06/2005
    Yer
    İstabul
    Mesaj
    131

    int dizi[10]; olarak tanımladığında,
    bellekte, 10 adet ardışık duran int değişken tanımlıyorsun.
    Şekillendirmek gerekirse

    [0][1][2][3][4][5][6][7][8][9]

    Bu hücrelerin her biri birer integer değişkenlerdir her biri bellekte Windows işletim sisteminde 4 bayt yer kaplar.

    ve bu dizinin bellekte bulunduğu konum (adres) bir göstericiye atanımıştır. C de dizinin adı bu elemanların bellekteki konumunun başladığı adrese sahip bir göstericidir yani dizi[0].

    dizinin bu göstericisi consttır yani sabittir her zaman bu hücrelerin olduğu yeri gösterir ve bu gösterici başka bir yeri gösterecek şekilde değiştirilemez.

    böyle bir atama göstericinin adrsini değiştirmeye teşebbüstür ve hatadır. Göstericinin gösterdiği adres sabittir, değiştirilemez.
    dizi = sayi; sayi değişkeninde olan değeri bir adres bilgisi gibi ismi dizi olan göstericiye atanmaya çalışıyorsun.

    ancak senin yapmak istediğin başka dizi elemanlarına girdi yapmak istiyorsan her elemanı indisi ile belirtmelisin

    elemanlara değeri indisleyerek atayacaksın. köşeli parantezler kullanacak ve parantezler içindeki değer tam sayı değerine sahip bir deyim olmalı. yada bu deyimi ifade eden değişken olmalı. verdiğim örnekte i değişkeni dizinin deyimidir.
    0, 1, 2, ... 255 vs.

    dizi[i] = i;

    Bu 10 tane integer değişkene değeri ya böyle

    dizi[0] = 0;
    dizi[1] = 1;
    dizi[2] = 2;
    ....
    ....
    dizi[9] = 9;

    ya da bir tekrarlama (döngü) ile

    for(int i=0; i<=(10-1);++i)
    {
    dizi[i] = i;
    }

    umarım anlamışsındır dizi ile dizinin herhangi bir elemanı aynı şey değildir dizinin adı diziyi gösteren göstericidir. elamanı iste dizinin adresi değildir

    dizi = 1; atama yapılamaz!
    dizi[0] = 1; atama yapılabilir.

    kolay gelsin
    Bilgi,insanı kuşkudan
    iyilik, acı çekmekten
    kararlı olmak da korkudan kurtarır. (Konfüçyus)

+ Cevap Yaz

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

     

Bookmarks

Mesaj Yazma Hakları

  • Yeni mesajgöndermezsiniz
  • Cevap yazamazsınız
  • Dosya ekleyemezsiniz
  • Mesajınızı düzenleyemezsiniz