PDA

View Full Version : راهنمایی در چاپ جلو هم



sony1983
شنبه 12 فروردین 1391, 08:59 صبح
با درود و احترام
من برنامه ای نوشتم که باید با دریافت حروف اونها رو به صورت 5 سطر و ستون در خروجی نمایش دهد یعنی مثلا اگه حرفa وارد شد همون a رو بزرگ کنه و تو خروجی نمایش بده این برنامه باید در کنسول سی شارپ نوشته بشه من این کار رو کردم اما برای چاپ حروف کناره م بادستور رایت مشکل دارم یعنی مثلا وقتی کاربر دو تا a رو وارد میکنه برنامه میاد و دوتا a رو بزرگ زیر هم چاپ میکنه من میخوام دو تا a کنار هم چاپ بشه .چون برنامه رو برای دوشنبه میخوام ازتون خواهش میکنم راهنماییم بفرمایید.ممنونم

رافعی مهدی
شنبه 12 فروردین 1391, 11:05 صبح
درود بر شما
اگر اشتباه نکرده باشم شما در برنامه تون، از متد Console.WriteLine استفاده کردید. در مواردی که میخواهید حروف پشت سر هم تایپ بشوند، از متد Console.Write استفاده کنید تا سر خط نرود! (اگر حدسم درست نیست، تکه کد مربوطه رو هم در سایت بذارید تا بیشتر بشه راهنمایی کرد.)

sony1983
شنبه 12 فروردین 1391, 20:51 عصر
با درود و تشکر
مهندس جان متاسفانه جلو هم نمینویسه برنامه اینه:

static void Main(string[] args)
{
char[] c = new char[4];
for (int i = 0; i < 4; i++)
{
c[i] = Convert.ToChar( Console.Read());

}
Console.ReadLine();

for(int i=0;i<4;i++)
{
switch(c[i])
{
case 'a':
Console.WriteLine(" a ");
Console.WriteLine(" a a");
Console.WriteLine(" a aaa a");
Console.WriteLine(" a a");
Console.WriteLine(" a a");
break;
case'b':
Console.WriteLine("bbbbb ");
Console.WriteLine("b b");
Console.WriteLine("bbbb");
Console.WriteLine("b b");
Console.WriteLine("bbbb ");
Console.WriteLine();
Console.WriteLine();

break;
case'c':
Console.WriteLine("cccccc");
Console.WriteLine("c ");
Console.WriteLine("c ");
Console.WriteLine("c ");
Console.WriteLine("c ");
Console.WriteLine("cccccc ");
break;
case'e':
Console.WriteLine("eeeeee");
Console.WriteLine("c ");
Console.WriteLine("ceeee");
Console.WriteLine("c");
Console.WriteLine("ceeeee");
break;

مثلا ababaکه وارد بشه باید جلو هم و بزرگ به 5 ستون نوشته بشه .ممنون میشم راهنمایی بفرمایید

vof.ir
یک شنبه 13 فروردین 1391, 01:08 صبح
سلام دوست عزیز
یک نکته، اینکه می دانیم عرض صفحه نمایش به اندازه 80 کاراکتر هست
پس وقتی که می خواهیم چند حرف را به صورت بزرگ یعنی در 5سطر و 5ستون نمایش دهیم، ممکن هست که با محدودیت روبه رو شویم
نکته دوم، بنابر نکته اول، چه با دستور Write و چه با دستور WriteLine بالاخره به پایان سطر می رسیم
پس، زمانیکه من اولین کاراکتر را در اولین خط به عناون نقطه شروع نمایش کاراکتر مثلا A به صورت بزرگ شده، چاپ می کنیم، و به خط بعد می روم، دیگر نمی توانم برگردم و اولین کاراکتر را به عنوان نقطه شروع کاراکتر دوم مثلا حرف B چاپ کنم
پس، باید چی کار کرد؟؟؟
باید بیاییم بررسی کنیم، ببینیم که برای چاپ هر حرف، در یک کادر 5x5 در چه جایگاه هایی باید کاراکتر را چاپ کنیم،
بعید بیاییم، زمانی که میخواهیم در سطر اول شروع به کار کنیم، دقت کنیم که چه حروفی باید چاپ شوند
می تونید از یک کاغذ رسم شطرنجی برای تمرین بهره ببرید، دارم فکر میکنم که چه طوری ساختار برنامه را بنویسید
فکرکنم، همین دستور سوئیچ کیس را برای تمام حروف الفبا بنویسید، منتهی با این فرق که ، گردش در حلقه ای که بیانگر سطر ها هست، با یک حلقه دیگر، کاراکتر به کاراکتر، بررسی صورت بگیرد.
امیدوارم که تونسته باشم کمک کرده باشم!! :-)

رافعی مهدی
یک شنبه 13 فروردین 1391, 13:20 عصر
خب، اینطور که پیداست شما میخواهید حروف رو به صورت شبه گرافیکی با ترکیبی از خودشون به نمایش در بیارید. برای این کار نباید برنامه رو به این صورت بنویسید، بلکه لازمه به ازای هر حرف یک عرض مشخصه یا برای همه اونها یک عرض ثابت رو در نظر بگیرید. مثلاً در شکل زیر عرض همه حروف A,B,C، هفت کاراکتر هست:


//1 " a "
//2 " a a "
//3 " aaa "
//4 " a a "
//5 "a a"
// 1234567

//1 "bbbbbb "
//2 "b b "
//3 "bbbbbb "
//4 "b b"
//5 "bbbbbbb"
// 1234567

//1 " cccccc"
//2 "c "
//3 "c "
//4 "c "
//5 " cccccc"
// 1234567

مسئله دوم، تعیین ارتفاع هر حرف هست که برای تمام حروف باید یک ارتفاع حداکثری تعیین بشه. همانطور که در شکل فوق دیده میشه، ارتفاع این سه حرف 5 سطر هست. حالا نوبت به طراحی یه ساختار مناسب برای این کار میرسه.
فرض کنید که هر حرف به صورت یک آرایه []string باشد؛ هر یک از درایه های این آرایه نماینده یکی از سطرهای تشکیل دهنده آن حرف میباشد. به طور مثال این آرایه برای حرف A به شکل زیر خواهد بود:


private static string[] A = new string[] { " a ",
" a a ",
" aaa ",
" a a ",
"a a" };

حالا نوبت به چاپ این حروف میرسه. متد Depict یک رشته رو میگیره و اون رو به شکل شبه گرافیکی چاپ میکنه:


private static string[] A = new string[] { " a ",
" a a ",
" aaa ",
" a a ",
"a a" };
private static string[] B = new string[] { "bbbbbb ",
"b b ",
"bbbbbb ",
"b b",
"bbbbbbb" };
private static string[] C = new string[] { " cccccc",
"c ",
"c ",
"c ",
" cccccc" };

private const int LetterMaxRowCount = 5;

static void Main(string[] args)
{
Depict("CAB");

Console.ReadKey();
}

private static void Depict(string phrase)
{
Console.Clear();
Console.WriteLine(phrase + ":");

for (int rowIndex = 0; rowIndex < LetterMaxRowCount; rowIndex++)
{
foreach (char c in phrase)
{
switch (c)
{
case 'A': Console.Write(A[rowIndex]); break;
case 'B': Console.Write(B[rowIndex]); break;
case 'C': Console.Write(C[rowIndex]); break;

default:
throw new NotImplementedException();
}
Console.Write(" ");
}
Console.WriteLine();
}
}


در ضمن برای رفع مشکل عرض کم صفحه کنسول، روی CaptionBar این پنجره راست کلیک کرده و گزینه Defaults رو انتخاب کنید و از اونجا همه خصوصیات پیش فرض صفحه رو اعم از اندازه بافر، عرض صفحه، رنگ بندی و ... رو مشخص کنید.

vof.ir
یک شنبه 13 فروردین 1391, 18:07 عصر
excellent
دقیقا،
یکی از دوستان میخواست نمودار رسم کنه، منتهی نمیتونست به صورت عمودی رسم کنه
بدین ترتیب، مشکل رسم نمودار هم میشه حل کرد

sony1983
جمعه 18 فروردین 1391, 22:48 عصر
با درود و احترام

مهندس جان این مدلی که نوشتین خیلی یشرفتست ما هنوز اول کاریم و فقط کلاس ها رو داریم میخونیم من با آرایه یه مقداریشو نوشتم اما مشکل میگیره میشه بررسی و اظهار نظر بفرمایید و سئوالی هم داشتم اینکه تو دستور رایت لاین میشه مطالب رو فرستاد به خط بالا تر برای چاپ مثلا بهش بگیم از مکان نمای آخرین دستور چاپ ، چاپ را انجام بده؟

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace prom2
{
class Program
{
static void Main(string[] args)
{

string[] c1 = new string[6];
string[] c2 = new string[6];
c1[1] = (" a ");
c1[2] = (" a a");
c1[3] = (" aaaaaaa");
c1[4] = (" a a");
c1[5] = ("a a");
c2[1] = (" bbbbb");
c2[2] = (" b b ");
c2[3] = (" bbbbb");
c2[4] = (" b b");
c2[5] = (" bbbbb");


string[] c = new string[4];
for (int i = 0; i < 4; i++)
{
c[i] = Convert.ToString(Console.Read());

}
for (int i = 0; i < 4; i++)
{

char[] c4 = new char[5];
for (int j = 0; j < 4; j++)
{
c4[i] = Convert.ToChar(c[i]);
}
switch (c4[i])
{
case 'a':
Console.Write(c[1]);
break;
case 'b':
Console.Write(c[2]);
break;

}


Console.ReadLine();
}

}
}
}

ممنونم از راهنماییتون

رافعی مهدی
شنبه 19 فروردین 1391, 06:58 صبح
درود بر شما

حقیقتاً منظور شما رو از پیشرفته بودن متوجه نشدم! من کد رو یک بار دیگه ساده میکنم، با کد خودتون مقایسه کنید، همه چیز مشخصه.



static void Main(string[] args)
{
int LetterMaxRowCount = 5;

string[] A = new string[LetterMaxRowCount];
string[] B = new string[LetterMaxRowCount];
string[] C = new string[LetterMaxRowCount];

A[0] = " a ";
A[1] = " a a ";
A[2] = " aaa ";
A[3] = " a a ";
A[4] = "a a";

B[0] = "bbbbbb ";
B[1] = "b b ";
B[2] = "bbbbbb ";
B[3] = "b b";
B[4] = "bbbbbbb";

C[0] = " cccccc";
C[1] = "c ";
C[2] = "c ";
C[3] = "c ";
C[4] = " cccccc";

string phrase = "CAB";
Console.WriteLine(phrase + ":");

for (int rowIndex = 0; rowIndex < LetterMaxRowCount; rowIndex++)
{
for (int cIndex = 0; cIndex < phrase.Length; cIndex++)
{
switch (phrase[cIndex])
{
case 'A': Console.Write(A[rowIndex]); break;
case 'B': Console.Write(B[rowIndex]); break;
case 'C': Console.Write(C[rowIndex]); break;
}
Console.Write(" ");
}
Console.WriteLine();
}

Console.ReadLine();
}

sony1983
چهارشنبه 23 فروردین 1391, 21:20 عصر
آخرش نتونستم بنویسم و استادمون آخرش خودش نوشت :ولی دمش گرم اونهمه روش فکر کردیم آخرش سه سوت نوشت


میذارم واسه دوستان شاید به دردشون بخوره :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace session0601
{
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();

/////////////////////////
string[] A = {
" A ",
" A A ",
" A A ",
" AAAAAAA ",
"A A"
};
string[] B = {
"BBB ",
"B B",
"BBB ",
"B B",
"BBB "
};
string[] C = {
" CCC",
"C ",
"C ",
"C ",
" CCC"
};
string [][] font = {A, B, C};
int[] charLen = {9, 4, 4 };
//////////////////////////
int curChar = 0;
int sum, charCnt;
char c;
int i, j;
while (curChar < input.Length)
{
charCnt = 0;
sum = 0;
c = input[curChar];
while (curChar + charCnt < input.Length && sum + charLen[c - 'A'] + 1 <= 25)
{
sum += charLen[c - 'A'] + 1;
charCnt++;
if (charCnt + curChar < input.Length)
c = input[curChar + charCnt];
}

for (i = 0; i < 5; i++)
{
for (j = curChar; j < curChar + charCnt; ++j)
{
Console.Write(font[input[j] - 'A'][i]);
Console.Write(' ');
}
Console.WriteLine();
}
Console.WriteLine();
curChar += charCnt;
}
}
}
}