PDA

View Full Version : یافتن تعداد رمز در سیگنال



tnt1374
جمعه 09 آبان 1393, 22:23 عصر
سلام .قصد دارم برنامه ای بنویسم که ابتدا طول رمز را از کاربر میگیرد و سپس یک رمز را به صورت دنباله ای از 0 و یک به صورت جداگانه و با یک Spaceکه حکم enter را دارد می گیرد.طول رمز از 16 کاراکتر بیشتر نیست.مثال:
0101
سپس طول سیگنال را ازکاربر می گیرد و سپس سیگنال را از کاربر می گیرد (شبیه همان رمز)مثال:
010100101
سپس با توجه به اینکه پشت سر سیگنال بی نهایت صفر وجود دارد تعداد تکرار رمز را در سیگنال پیدا کرده و چاپ میکند.

الگوریتمی که خود برای آن در نظر گرفته ام به اینگونه است که رمز را از کاربر میگیرد سپس به تعداد کاراکتر های رمز متغیر تعریف میکند که مقدار اولیه آن صفر است.مثلا
0 0 0 0 0 0 0
سپس با وارد کردن اولین عدد سیگنال متغیر سمت راست جای خود را به اولین کاراکتر میدهد .و متغیر های دیگر یکی به یکی به متغیر سمت چپی خود جابجا می شوند.حال رمز را الگوی ایجاد شده مقایسه می کند و اگر برابر بودند یکی به count اضافه می کند.و اگر برابر نبودند متغیر بعدی را می گیرد و جای اولین متغیر سمت راستی را می گیرد و دوباره تا آخر متغیر ها به متغیر سمت چپ خود منتقل می شوند.این متغیر گیری و جابجایی به تعداد کاراکتر های سیگنال انجام می گیرد.

جواب مثال من 2 خواهد بود
و حال سوال من این است این جابجایی و تعیین تعداد متغیر را چگونه می توان به صورت کدهای C نوشت؟؟؟؟.؟؟؟

آیا این الگوریتم مناسبی است!!!!

آیا الگوریتم بهتری سراغ دارید؟؟؟؟؟؟///

sa1378
جمعه 09 آبان 1393, 22:41 عصر
سلام .قصد دارم برنامه ای بنویسم که ابتدا طول رمز را از کاربر میگیرد و سپس یک رمز را به صورت دنباله ای از 0 و یک به صورت جداگانه و با یک Spaceکه حکم enter را دارد می گیرد.طول رمز از 16 کاراکتر بیشتر نیست.مثال:
0101
سپس طول سیگنال را ازکاربر می گیرد و سپس سیگنال را از کاربر می گیرد (شبیه همان رمز)مثال:
010100101
سپس با توجه به اینکه پشت سر سیگنال بی نهایت صفر وجود دارد تعداد تکرار رمز را در سیگنال پیدا کرده و چاپ میکند.

الگوریتمی که خود برای آن در نظر گرفته ام به اینگونه است که رمز را از کاربر میگیرد سپس به تعداد کاراکتر های رمز متغیر تعریف میکند که مقدار اولیه آن صفر است.مثلا
0 0 0 0 0 0 0
سپس با وارد کردن اولین عدد سیگنال متغیر سمت راست جای خود را به اولین کاراکتر میدهد .و متغیر های دیگر یکی به یکی به متغیر سمت چپی خود جابجا می شوند.حال رمز را الگوی ایجاد شده مقایسه می کند و اگر برابر بودند یکی به count اضافه می کند.و اگر برابر نبودند متغیر بعدی را می گیرد و جای اولین متغیر سمت راستی را می گیرد و دوباره تا آخر متغیر ها به متغیر سمت چپ خود منتقل می شوند.این متغیر گیری و جابجایی به تعداد کاراکتر های سیگنال انجام می گیرد.

جواب مثال من 2 خواهد بود
و حال سوال من این است این جابجایی و تعیین تعداد متغیر را چگونه می توان به صورت کدهای C نوشت؟؟؟؟.؟؟؟

آیا این الگوریتم مناسبی است!!!!

آیا الگوریتم بهتری سراغ دارید؟؟؟؟؟؟///

c++ بنویسم؟

Coder#
شنبه 10 آبان 1393, 05:30 صبح
از کُل حرفهای تو، فقط این قسمت رو فهمیدم: تعداد تکرار رمز را در سیگنال پیدا کرده و چاپ میکند.
به همین منظور، دو برنامه در این خصوص برات نوشتم.
ورودی های دو برنامه یکسانه، اما خروجی های اونها متفاوته: (نام متغیرها رو طبق سوالت انتخاب کردم)


#include <stdio.h>
int twins (char*, char*);
int slen (char*, int);
int main ()
{
char signal[45] = "01011101010101101000010100101010101011100101";
char code[5] = "0101";
int i, count;

for (i = count = 0; signal[i] != '\0'; i++)
{
if (twins (signal+i, code) == 1)
count++;
}
printf ("%i\n", count);
return 0;
}

int twins (char *str1, char *str2)
{
while (*str2 != '\0')
{
if (*str1++ != *str2++)
return 0;
}
if (slen (str1, slen (str1, 0) - slen (str2, 0)) == slen (str2, 0))
return 1;
else
return 0;
}

int slen (char *s, int n)
{
int i;
for (i = 0; *s++ != '\0'; i++);
return i - n;
}



#include <stdio.h>
int twins (char*, char*);
int slen (char*, int);
int main ()
{
char signal[45] = "01011101010101101000010100101010101011100101";
char code[5] = "0101";
int i, count;

for (i = count = 0; signal[i] != '\0';)
{
if (twins (signal+i, code) == 1)
{
i += slen (code, 0);
count++;
}
else
i++;
}
printf ("%i\n", count);
return 0;
}

int twins (char *str1, char *str2)
{
while (*str2 != '\0')
{
if (*str1++ != *str2++)
return 0;
}
if (slen (str1, slen (str1, 0) - slen (str2, 0)) == slen (str2, 0))
return 1;
else
return 0;
}

int slen (char *s, int n)
{
int i;
for (i = 0; *s++ != '\0'; i++);
return i - n;
}

tnt1374
شنبه 10 آبان 1393, 12:03 عصر
خیر به زبان سی

Coder#
شنبه 10 آبان 1393, 16:26 عصر
چی شد بالاخره؟ همون چیزی بود که می خواستی؟

sa1378
شنبه 10 آبان 1393, 17:35 عصر
شما که خیلی رمزنگاری دوست داری الان داره یه مسابقه رمزنگاری توی CodeForces برگزار میشه
تا ساعت 10:30 ادامه داره
خواستی شرکت کن
http://codeforces.com/gym/100514

حمیدرضاصادقیان
شنبه 24 آبان 1393, 18:12 عصر
سلام.
واقعا متاسفم که هر از چند گاهی باید من یا یکی از مدیران وقتمون رو بذاریم به جای پاسخگویی به سوالات کاربران ، بشیم ناظم مدرسه، و یکی رو تنبیه کنیم یکی رو اخراج کنیم با یکی برخورد کنیم تا رفتار بقیه درست بشه؟
واقعا این رفتار در شان شماست؟
واقعا اینطور رفتار کردن رو در شان و شخصیت خودتون می بینید؟
ما مشکلی نداریم.
من یک بار تذکر دادم و یک ماه به صورت اعلان بالای سایت بود.با اینکه خیلی از دوستانم گفتن خیلی تند گفتی ولی ظاهرا هیچ اثری در بعضی از دوستان نکرده.
نیازی نیست بیاین به خاطر رفتار کودکانه خودتون به بزرگان یک دین توهین کنید یا بخواهید باکس دیگه ای مقایسه کنید یا شخصیت خودتون رو به رخ بکشید.
شخصیت شما از تک تک کلماتی که در جوابهاتون به کار می برید ، زمانی که در پاسخگویی به کاربران صرف می کنید کاملا معلومه و نیازی نیست اینقدر علنی بیاید اونو در سایت به رخ دیگران بکشید.
دانش شما هم خیلی راحت از صحبتهایی که می کنید مشخصه .پس لزومی نداره بیایم روی یک سری از افراد برچسب کودن رو بچسبونیم.
مگر کسی از شما نظر خواست اومدین اینجا نظر میدین که هرکی بره کودنه؟
مگه کسی گفت شما بیاین برین شرکت کنید؟

میتونید د راین سایت فعالیت کنید و سرتون به کار خودتون باشه و درمورد کارهای دیگران تاقبل از اینکه از شما نظری بخوان ، نظری ندین؟؟؟؟؟؟؟؟؟؟


اگر میتونید ادامه فعالیت بدین. اگر نمیتونید تاقبل از اینکه باهاتون برخوردی بشه لطفا سایت رو ترک کنید.درغیراینصورت با کوچکترین بحثی شخصا شمارو از سایت اخراج میکنم و کل اکانتتون رو حذف میکنم.

امیدوارم این رفتارهای بچگانه رو بذارید کنار و واقعا مثل افراد حرفه ای عمل کنید.

ایام به کام./