Arama butonu
Bu konudaki kullanıcılar: 1 misafir
11
Cevap
647
Tıklama
0
Öne Çıkarma
c++ sorusu yardım
H
13 yıl
Teğmen
Konu Sahibi

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 >

Q
13 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
H
13 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
B
13 yıl
Çavuş

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.


Bu mesaja 1 cevap geldi.
H
13 yıl
Teğmen
Konu Sahibi

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


Bu mesaja 1 cevap geldi.
B
13 yıl
Çavuş

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


Bu mesaja 1 cevap geldi.
G
13 yıl
Yarbay

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.


Bu mesaja 1 cevap geldi.
H
13 yıl
Teğmen
Konu Sahibi

Q
13 yıl
Yüzbaşı

Kısıtlamalarda SetConsoleCursorPosition() fonksiyonunun kullanılamayacağı yok gibi



F
13 yıl
Yüzbaşı

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 >
Bu mesaja 1 cevap geldi.
H
13 yıl
Teğmen
Konu Sahibi

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 >
Bu mesaja 1 cevap geldi.
F
13 yıl
Yüzbaşı

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 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.