PDA

View Full Version : چاپ این شکل در خروجی



ICEMAN
سه شنبه 07 اسفند 1386, 11:15 صبح
سلام ...
نمیدونستم عنوان مناسب سوالم چیه !
چطور میشه شکل زیر و در خروجی چاپ کرد
از این رشته


abcdefghijklmnopqrstuvwxyz{



a
bcb
cdedc
defgfed
efghihgfe
fghijkjihgf
ghijklmlkjihg
hijklmnonmlkjih
ijklmnopqponmlkji
jklmnopqrsrqponmlkj
klmnopqrstutsrqponmlk
lmnopqrstuvwvutsrqponml
mnopqrstuvwxyxwvutsrqponm
nopqrstuvwxyz{zyxwvutsrqpon

حتما هم نیازی به کد نیست الگوریتم و بدونم کافیه
تشکر

PC2st
سه شنبه 07 اسفند 1386, 23:49 عصر
اگه مراحل نمایش حروف به شکل زیر ثبت بشه:
خط 1: حروف 1 تا 1 چاپ میشه.(1 = 1 - 2 * 1)
خط 2: حروف 2 تا 3 چاپ میشه.(3 = 1 - 2 * 2)
خط 3: حروف 3 تا 5 چاپ میشه.(5 = 1 - 2 * 3)
خط 4: حروف 4 تا 7 چاپ میشه. (7 = 1 - 2 * 4)
خط ... ....................................(x * 2 - 1 = y)
خط 14: حروف 14 تا 27 چاپ میشه. (27 = 1 - 2 * 14)

من چنین کدهایی به ذهنم رسید، احتمالا میشه بهتر از این نوشت:


#include <iostream>

// define preprocessor MSDOS_WAIT const.
#define MSDOS_WAIT system( "pause > nul" )

using namespace std;

// Defines the entry point for the console application.
int wmain( int argc, wchar_t *argv[] )
{
const char *data = " abcdefghijklmnopqrstuvwxyz{"; // attention that first character is empty!
const int length = 28; // length of upside string.
const int loopCount = length / 2; // how many step is required?
int outputCount; // how many character will be printed at one step?

// main counter loop statement.
for( int i = 1; i <= loopCount; i++ )
{
// output spaces for better appearance.
for( int j = 1; j <= loopCount - i; j++)
{
cout << " ";
}

outputCount = 2 * i - 1;

// output first characters mirror.
for( int j = i; j < outputCount; j++ )
{
cout << data[ j ];
}
// output second characters mirror.
for( int j = outputCount; j >= i; j-- )
{
cout << data[ j ];
}

// end one step off loop.
cout << endl;
}

MSDOS_WAIT; // pause
return 0; // finish program.
}

ICEMAN
چهارشنبه 08 اسفند 1386, 09:17 صبح
سلام .. ممنون از جوابت
ولی چند تا سوال چرا wmain()



#define MSDOS_WAIT system( "pause > nul" )

MSDOS_WAIT;

هم یه توضیح مختصری بده

PC2st
چهارشنبه 08 اسفند 1386, 18:10 عصر
تابع wmain مثل main هست با این تفاوت که پارامتر argv میتونه رشته های unicode (از نوع wchar_t) رو دریافت کنه ولی تابع main فقط رشته های ascii رو دریافت میکنه. (نمیدونم توی c++ standard چنین تابعی (wmain) هست یا نه...)

MSDOS_WAIT هم یک ثابت پیش پردازنده است که در حین کامپایل عبارت زیر باهاش جایگزین میشه:


system( "pause > nul" )


چون دستور pause > nul فکر کنم فقط در محیط dos کار کنه و اگر بعدا این کدها رو مثلا توسط ابزار g++ توی لینوکس کامپایل و اجرا کنیم، ممکنه به مشکل بر بخوره، پس دستور فوق رو بصورت یک ثابت پیش پردازنده تعریف کردم که اگه (هر وقت) به مشکل برخورد، فقط با تغییر این یک قسمت از کد و کامپایل مجددش، براحتی توی لینوکس هم کار کنه. بهتر بود که از standard library برای توقف برنامه استفاده میکردم ولی متاسفانه بلد نبودم ;-)

MEHR4N
یک شنبه 12 اسفند 1386, 02:00 صبح
منم این یکیو نوشتم دیدم کار کرد.:لبخند:
نمی دونم روندش چقدر با قبلی فرق داره، ولی این برنامه یه بایت کاراکتر می گیره به جای رشته.


#include "stdafx.h" // should be eliminated if you're using Turbo C
#include "iostream" // should be written "iostream.h" for Turbo C
using std::cout;
using std::cin;
using std::endl;
#include "conio.h"


int _tmain(int argc, _TCHAR* argv[]) // int main()
{
char ch = 'a' ;
int i = 0 , j;
int len = 14 ;

for( i ; i < len ; i ++ ) {

j = len ;

while( j - i ){ // necessary to be displayed like a symmetric triangle
cout << " " ;
j -- ;
}

for( j = 0 ; j < i ; j ++ )
cout << ch ++;

cout << ch ;

for( j ; j < 2 * i ; j ++ )
cout << -- ch;

cout << endl;

ch ++ ;
} // end of for

getch();
return 0;
}