Şimdi Ara

c++ sorusu yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
12
Cevap
0
Favori
647
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • klavyeden girilen bir stringi spiral MATRİX şekilde nasıl ekrana bastırabiliriz.
    örneğin

    ABCDEFGHIJKLMNOPQRSTWUVY

    kullanıcı şöyle bişey girsin

    çıktı:

    W U V Y Z
    T G H I J
    S F A B K
    R E D C L
    Q P O N M


    array ve string fonkisyonu kullanılmayacak.
    stringi okumak için sadece bir char arrayi kullanabilirsiniz.



    < Bu mesaj bu kişi tarafından değiştirildi hannibal1903 -- 17 Ekim 2011; 1:22:10 >



  • Biraz(!) dikkatli baktığın zaman görebileceğin bir düzen var buradaki sistemde.

    Örneğin:
    - string'in uzunluğu 1'den büyük ise sütun sayısı 2;
    - string'in uzunluğu 4'ten büyük ise sütun sayısı 3;
    - string'in uzunluğu 9'dan büyük ise sütun sayısı 4;
    - string'in uzunluğu 16'dan büyük ise sütun sayısı 5;
    - string'in uzunluğu 25'ten büyük ise sütun sayısı 6;
    ...
    (Fark 2 artarak gidiyor)

    Benzer şekilde:
    - string'in uzunluğu 2'den büyük ise satır sayısı 2;
    - string'in uzunluğu 6'dan büyük ise satır sayısı 3;
    - string'in uzunluğu 12'den büyük ise satır sayısı 4;
    - string'in uzunluğu 20'den büyük ise satır sayısı 5;
    - string'in uzunluğu 30'dan büyük ise satır sayısı 6;
    ...
    (Fark 2 artarak gidiyor)

    Ekrana bastıracağın matrisin satır ve sütun sayısını bulduk.

    Daha sonrasında en içten başlayıp farkı yine artıracak şekilde for döngüleri ile sırasıyla bir sağa bir aşağı bir sola bir yukarı gidip stringi tek tek doldurabilirsin matrisin içerisine.

    Burada takılırsan tekrar yardımcı olurum.

    İyi günler.


    Değişiklik : satır ve sütunu karıştırmışım



    < Bu mesaj bu kişi tarafından değiştirildi qamyoncu -- 17 Ekim 2011; 14:24:58 >




  • tam olarak anlayamadım spiral matrisi array kullnmadan nasıl ekrana bastırabiliriz.matris dediğiniz array mi oluyo
  • quote:

    Orijinalden alıntı: hannibal1903

    tam olarak anlayamadım spiral matrisi array kullnmadan nasıl ekrana bastırabiliriz.matris dediğiniz array mi oluyo

    özetle sana for döngü yaparak bu işlemleri yapabilirsin diyor. Bunda anlaşılmayacak bir şey yok gayet güzelce anlatmış. Anlatıma göre de kodlamasını yap.
  • for döngüleri ile sırasıyla bir sağa bir aşağı bir sola bir yukarı nasıl gidecez array kullanmadan orasını anlayamadım yanii
  • quote:

    Orijinalden alıntı: hannibal1903

    for döngüleri ile sırasıyla bir sağa bir aşağı bir sola bir yukarı nasıl gidecez array kullanmadan orasını anlayamadım yanii




    burdaki video işini görür gibime geldi.

    http://www.youtube.com/watch?v=ocWu9sp9KyY
  • Sayın arkadaşlar küçük bir detayı kaçırıyorsunuz sanırım. Adam array kullanılmayacak diyor. Ve array (şuna dizi desek) kullanmadan sağa sola vs. gitmek zor olacak gibi.

    quote:


    burdaki video işini görür gibime geldi.

    http://www.youtube.com/watch?v=ocWu9sp9KyY

    Bu adam aşmış ya yok böyle bişey.
  • yardım edecek kimse yok mu
  • Kısıtlamalarda SetConsoleCursorPosition() fonksiyonunun kullanılamayacağı yok gibi
  • Aşağıda yazmış olduğum kod sadece yol göstermek için.

    Kullanicidan almış olduğun karakter katarını 1B'lu char[] dizisine atıp ,2B'lu MxM şeklinde göstermek için.

    Sarmalama kısmını da sana bırakıyorum.





     
    #include <iostream>
    #include<iomanip>
    #include <cmath>


    using namespace std;


    int main()
    {
    const int N=51;
    int n,indeks;
    int sayac=0;
    char dizi[N]={0};


    cout<<"Lutfen karakter dizisini giriniz(max:50 karakter)"<<endl;
    cout<<flush;
    cin.getline(dizi,N);

    n=strlen(dizi);

    indeks=sqrt((double)n);

    if((pow((double)indeks,2))<n)
    indeks++;

    for(int i=0;i<indeks;i++)
    {
    cout<<endl;

    for(int j=0;j<indeks;j++)

    {
    if(sayac>n)
    break;

    cout<<setw(2)<<dizi[j+i*indeks];
    sayac++;


    }

    }

    cout<<endl;

    system("pause");

    return 0;
    }




    < Bu mesaj bu kişi tarafından değiştirildi fenasi44 -- 20 Ekim 2011; 8:47:15 >




  • iş zaten sarmalama kısmında bide matematik fonksiyonu falan kullanmak yk



    < Bu mesaj bu kişi tarafından değiştirildi hannibal1903 -- 20 Ekim 2011; 19:03:24 >
  • quote:

    Orijinalden alıntı: hannibal1903

    iş zaten sarmalama kısmında bide matematik fonksiyonu falan kullanmak yk

    Tamam işte sana fikir vermesi için o örneği yazdım.


    Yapacagin ufak tefek modifiye.Hem spiral'i hesaplamada, hem de ekrana göstermede kullanabilirsin.
    Matematik fonksiyonlari halledilir,zaten spiral hesaplaması için değil,ekrana göstermek içindi.

    Aşağıdaki kod'da matematik fonskiyonu kullanmadan,tek bir char[] kullanarak, MXM matrix şeklinde ekranda göstermek için yazilmiş hali.



     

    #include<iostream>
    #include<iomanip>


    #define ASAGI 0
    #define SOL 1
    #define YUKARI 2
    #define SAG 3

    using namespace std;

    void spiralMatrix(char dizi[],int i)
    {

    //dolduralacak kisim




    }

    void goster(char dizi[],int boyut)
    {

    int sayac=0;
    int k=0;

    while( (k*k)<boyut)
    {
    k++;
    }

    if((k*k)<boyut)
    k++;


    for(int i=0;i<k;i++)
    {
    cout<<endl;

    for(int j=0;j<k;j++)

    {
    if(sayac>boyut)
    break;

    cout<<setw(2)<<dizi[j+i*k];
    sayac++;
    }
    }
    }



    int main()
    {


    const int N=51;

    int n;
    char dizi[N]={0};


    cout<<"Lutfen karakter dizisini giriniz(max:50 karakter)"<<endl;
    cout<<flush;

    cin.getline(dizi,N);
    n=strlen(dizi);

    spiralMatrix(dizi,n);
    goster(dizi,n);

    cout<<endl;

    system("pause");
    return 0;
    }







    Aşağıdaki kodu incele(http://www.hackchina.com/en/r/171822/shexing.cpp__html) adresinden alıntı.

    Kullanicidan 1<n<20 arasi matrix boytunu alip,saat yönünde tamsayilari sarmalıyor..



     

    #include<iostream>
    #include<iomanip>

    using namespace std;;


    #define DOWN 0
    #define LEFT 1
    #define UP 2
    #define RIGHT 3

    //
    #define N 20

    void printMatrix(int *a[], int n)
    {
    int i, j;
    for (i = 0;i<n; i++)
    {
    for (j=0; j<n;j++)
    {
    cout<<setw(4)<<a[i][j];
    }
    cout<<endl<<endl;
    }
    }

    void spiralMatrix(int *a[], int n)
    {
    int i, j;
    int count;
    int direct;
    i=0;
    j=--n;
    count=0;
    direct=DOWN;
    while(n>0)
    {
    for(int k=0;k<n;k++){
    a[i][j]=count++;
    switch(direct){
    case DOWN:
    i++;
    break;
    case LEFT:
    j--;
    break;
    case UP:
    i--;
    break;
    case RIGHT:
    j++;
    break;
    }
    }

    if (direct==RIGHT)
    {
    i++;
    j--;
    n-=2;
    }

    direct=(direct+1)%4;
    }
    if(n==0)
    a[i][j]=count;
    }

    void main(void) {
    int m[N][N]={0};
    int *a[N];
    for(int i=0;i<N;i++)
    a[i]=m[i];
    cout<<"nxn matrix girin(1<n<20)n="<<endl;
    int n;
    cin>>n;
    if(n>19||n<2)
    {
    cout<<"bye!";
    exit(0);
    }
    spiralMatrix(a, n);
    printMatrix(a, n);

    system("pause");
    }






    < Bu mesaj bu kişi tarafından değiştirildi fenasi44 -- 21 Ekim 2011; 1:04:12 >




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.