2016-04-05 11 views
1

İyi akşamlar, İçinde bir kare mesajla dinamik bir Rhombus oluşturmakla görevlendirildim. Şimdi birkaç saatliğine bunu yapmak için bir yol arıyorum, ama dürüstçe fikrimi kaybetmeye başlıyorum.Çerçeveli bir mesajla bir Rhombus oluşturma

Düzeyimin oldukça basit olduğunu unutmayın, bu nedenle kodum karmaşık malzemeler içermez.

Rhombus'un üst yarısını oluşturmayı başardım, ancak mesajın tam olarak ortasında nasıl yer aldığını bilmiyorum.

Kullanıcı, çerçeve için bir dize, bir boyut ve bir karakter girebilmelidir. f.ex:

kullanıcı girişi geçerli:

5, $, Merhaba:

$ 
    $ $ 
    $ $ 
$  $ 
$ Hello $ 
$  $ 
    $ $ 
    $ $ 
    $ 

Kodum şu ana kadar (birkaç başvurulmayan değişkenler, onları görmezden):

 void framedMessage() 
{ 
    int size = 6, i, sp, sym, a, b; 
    char rSymbol = '$', str[100] = { "Hello" }; 
    //while ((strlen(str) % 2) == 0) 
    //{ 
    // puts("Please Enter a string (even number of letters will be denied):"); 
    // gets(str); 
    //} 
    //puts("Please enter a char for the rhombus(NOTE that the letters 'C','M','S','P','E' will return as small chars and not capital:"); 
    //rSymbol = charInput(); 
    //size = numericalInput(strlen(str) + 2, 999); 
    for (a = 0;a <= size;a++) 
    { 
     for (sp = 1;sp <= size;sp++) 
     { 
      if (sp == size && a == 0) 
       printf("%c", rSymbol); 
      if ((sp == size - a && a != 0)) 
      { 
       printf("%c", rSymbol); 
       for (;sp < size + a;sp++) 
       { 
        printf(" "); 
        if (sp == size + a -2) 
         printf("%c", rSymbol); 
       } 
      } 
      printf(" "); 
     } 
     puts(""); 
    } 

} 

Rhombus'un en üst yarısı o kadar da zor değildi, ama şimdi mesajın uzaya mükemmel şekilde uyacak şekilde nasıl yerleştirileceğine dair hiçbir fikrim yok (dizenin eşit miktarda karaktere sahip olamayacağını aklınızdan çıkarmayın). rhombus'u mahveder).

Bu konuda herhangi bir yardım için minnettarım. kodun kendisiyle ilgili yapıcı yazılar (neyi geliştirmeye çalışmalıyım, kullanmamaya çalışmalıyım vs) büyük ölçüde alınacaktır.

Çok teşekkürler.

+1

Belki bunu elle, ızgara kağıt üzerinde yapmalısınız. Ardından, mantıksal düşünce sürecinizi aynı şekilde program koduna dönüştürün. Bunu yapmayı öğrenmek, her şeyden önce, görevinizin bütün amacıdır. – hyde

+0

Ekranınızı kapatın. Bir kâğıt parçası alın ve mesaj uzunluğunu ve satır numarasını alarak ve yıldız/boşluk sayısını döndürerek * formül * yazın. Ardından ekranı açınız ve programlayınız. –

+0

Teşekkürler, bu benim profesörün bana söylediği şey tam olarak budur. Onun talimatlarını daha sık dinlemeye başlamalıyım. Sanırım tembelliğim benden daha iyi oldu. Kesinlikle tavsiyeni dinler ve kağıda yazarım. Çok teşekkürler. Bunu kendi başıma yapmak için bu tür bir cesarete ihtiyacım vardı. – Blai

cevap

0

Bu örnekte, 6'yı boyut olarak kullandınız. İki '$' arasında sonraki satırdaki boşlukların toplamı 11 olacaktır. Yani değişken büyüklüğün -1 değerini ikiye katlayın. Böylece dizenin uzunluğunu alırsınız ve ortadaki dizeyi elde etmek için aşağıdaki mantığı kullanırsınız. durumda x

len = strlen(str); 
x = ((size*2-1) - len)/2 

boşlukların Resim önce ve str sonra gerekli olan 3 x olacaktır.