ورود

View Full Version : مبتدی: مشکل یا یک برنامه ی ساده در زبان c



Mr_Parham
یک شنبه 23 مهر 1391, 23:00 عصر
سلام

من چند وقتی هست که دوره های دانشگاه هاروارد رو شروع کردم برای Computer Science - رایگان برای هر کسی در دسترس هست-، توی این Course بهتون آموزش برنامه نویسی و طرز درست فکر کردن برای برنامه نویسی یاد داده میشه (تا اونجایی که من جلو رفتم حداقل)، حالا توی یکی از تمرین ها باید یک برنامه ایجاد کنم که یک عددی از کاربر بگیره در ابتدا که قرار است کلید Encryption برنامه باشه، بعد یک String بگیرم که کاربر میخواد به اصطلاح Encrypt کنه و بعد تمام Character ها رو دونه به دونه Encrypt کنم و نشون بدم، خوب تا اینجا به نظر مشکلی ندارم، مشکل وقتی ایجاد میشه که برای مثال من حرف Z رو میخوام 4 تا بهش اضافه کنم، این همونجوری که می دونید دیگه حرف معمولی حساب نمیشه :یی پس این مشکل اول هست، گفتند باید از % استفاده کنم ولی چجوری نمیدونم، مشکلی بعدی این هست که توی اون String اگر عددی وارد بشه و یا Space نباید Encrypt بشه، این کدی هست که من زدم تا اینجا و کار می کنه کاملا به غیر از مشکلات ذکر شده، کسی از دوستان میتونه کمک کنه؟

کد:
#include <stdio.h>
#include <cs50.h>
#include <string.h>

int
main (int argc, string argv[])
{
//Changing the string to integer (The key)
int key = atoi(argv[1]);
//Checking if the Key is valid
if (key<= 0)
{
printf("Please try entering the key again\n");
return 1;
}
//Asking user for uncrypted text
printf("Please enter the text you would like to encrypt: \n");
//Getting the uncrypted text
string PlaneText = GetString();
//Finding the length of the uncrypted text
int length = strlen(PlaneText);
do
{
for (int i = 0; i < length; i++)
{
printf("%c",PlaneText[i]+key);
}
}
printf("\n");
}


پ ن . اون فایل cs50.h توش تعریف شده که چجوری String بگیره و String رو هم اصلا برای همین تونستم استفاده کنم (تا جایی که میدونم String اصلا وجود نداره توی C)

Mr_Parham
دوشنبه 24 مهر 1391, 21:39 عصر
یعنی هیچکس اینجا نیست که بتونه به من کمک کنه؟

مسعود اقدسی فام
سه شنبه 25 مهر 1391, 10:11 صبح
اول: رمز به صورت چرخشی انجام می‌شه در این حالت. یعنی چهار تا بعد Z می‌شه D.

دوم: حرف به حرف که می‌خوای رمز تولید کنید چک کن که عدد یا فاصله نباشه! یا اگه بین A تا Z یا a تا z بود عملیات رو انجام بده.

Mr_Parham
سه شنبه 25 مهر 1391, 10:48 صبح
اول: رمز به صورت چرخشی انجام می‌شه در این حالت. یعنی چهار تا بعد Z می‌شه D.

باید به صورت چرخشی باشه ولی اینجا این اتفاق نمیوفته


دوم: حرف به حرف که می‌خوای رمز تولید کنید چک کن که عدد یا فاصله نباشه! یا اگه بین A تا Z یا a تا z بود عملیات رو انجام بده.
[/QUOTE]
اگر ممکنه هر دو تا رو بگید یاد بگیرم ولی دومی رو نیاز دارم :)

ممنون

مسعود اقدسی فام
سه شنبه 25 مهر 1391, 11:37 صبح
دومی که if هستش. باید چک کنید خارج از بازه نباشه.

اولی هم برای هر حرف باقیمانده جمع با ۴ بر تعداد کل حروف رو از اول حروف حساب می‌کنی:




c = ((p - 'A') + 4) % 26 + 'A'




اینجا p رو کد می‌کنه به c. برای حروف کوچیک هم به جای A مقدار a رو بذارید. البته اول باید چک بشه که ورودی حتما حروف الفباست. وگرنه اونطور که می‌گید کد کردن نمی‌خواد.


امیدوارم متوجه بشید. وگرنه دیگه می‌ره رو کد آماده که شرمنده می‌شم. چون به قول خودتون یه برنامه‌ی ساده هستش. :لبخندساده:

Mr_Parham
سه شنبه 25 مهر 1391, 13:40 عصر
دومی که if هستش. باید چک کنید خارج از بازه نباشه.
اولی هم برای هر حرف باقیمانده جمع با ۴ بر تعداد کل حروف رو از اول حروف حساب می‌کنی:


c = ((p - 'A') + 4) % 26 + 'A'


اینجا p رو کد می‌کنه به c. برای حروف کوچیک هم به جای A مقدار a رو بذارید. البته اول باید چک بشه که ورودی حتما حروف الفباست. وگرنه اونطور که می‌گید کد کردن نمی‌خواد.
امیدوارم متوجه بشید. وگرنه دیگه می‌ره رو کد آماده که شرمنده می‌شم. چون به قول خودتون یه برنامه‌ی ساده هستش. :لبخندساده:


در مورد if نمیدونستم چجوری باید بگم فقط یک Range خاصی که توی اون یک خط کدی نوشتید متوجه شدم چجوری هست، در مورد کد کردن هم اون خط کمک کرد و درستش کردم، این هم کد، تست کردم مشکلی نداره دیگه

#include <stdio.h>
#include <cs50.h>
#include <string.h>

int
main (int argc, string argv[])
{
//Changing the string to integer (The key)
int key = atoi(argv[1]);
//Checking if the Key is valid
if (key<= 0)
{
printf("Please try entering the key again\n");
return 1;
}
//Asking user for uncrypted text
printf("Please enter the text you would like to encrypt: \n");
//Getting the uncrypted text
string PlaneText = GetString();
//Finding the length of the uncrypted text
int length = strlen(PlaneText);
//Encrypting the string
for (int i = 0; i < length; i++)
{
//An integer to keep the encrypted character
char c;
//encrypting the capital letters
if (PlaneText[i] >= 'A' && PlaneText[i] <= 'Z')
c = ((PlaneText[i]-'A') + key) % 26 + 'A';
//encrypting the small letters
else if (PlaneText[i] >= 'a' && PlaneText[i] <= 'z')
c = ((PlaneText[i]-'a') + key) % 26 + 'a';
//not encryptiong anything else then letters
else
c = PlaneText[i];
//printing the encrypted character
printf("%c",c);
}
printf("\n");
return 0;
}


دست شما درد نکنه :)