الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الأخطاء في كود التبديل للكلمات .. ?

بدأه Argile في 26 نوفمبر 2011 · 5 رد · 360 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

- إخواني ما هي الأخطاء الموجودة في هذا الكود ، كتبته رغم أني جديد على لغة السي ، لذا عذرا على أي أخطاء غبية ، الكود يقوم بفرز جميع الاحتمالات الممكنة (التبديلات ) لكلمة ما :

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

int fact(int n)
{
 if(n == 0 || n == 1)
  return 1 ;
 else
  return f(n - 1) * n ;   
}

int reverse(char st[])
 {
   int ct = 0 , i ;
   int t = f(strlen(st)) - 1 ;
   char nb[1] ;
   if(strlen(st) == 1)
    printf("%s" , st);
   else 
    for(i = 1 ; i < strlen(st) - 1 ; i++)
     {
           nb[1] = st ;
           st = st[i+1];
           st[i+1] = nb[1];
           printf("%s" , st); 
           ct = ct + 1  ;
            }
    if(ct < t)
      reverse(st) ;           
                 }

int main(int argc, char *argv[])
{
  reverse(abc);
  system("PAUSE");	
  return 0;
}

تم تعديل هذه المشاركة بواسطة Argile في 26 نوفمبر 2011 في 15:02

#2

السلام عليكم

هناك خطأ في استدعاء الدال(reverse(abc عوض عن ذلك يجب أن تكتب:("reverse("abc

#3

الدالة reverse() تستخدم خوارزمية غير صحيحة لإيجاد التبديلات الممكنة. ممكن توضح إيه هى الخوارزمية/الطريقة اللى إنت متبعها علشان تحسب التبديلات الممكنة؟

#4

بارك الله فيك أخي لقد تم حل المشكل ، الخوارزمية تعمل على الشكل التالي ، تأخذ حرفين متابعين تم تقوم بتبديلهما ، عن طريق حلقة نحصل على عدد محدد من التبديلات :

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

int j ;
char nb[3] ;
int n = 0 ;
char a[5] = "silva" ; 

int main(int argc, char *argv[])
{
  f(a);
  printf("%d \n" , n) ;
  system("PAUSE");	
  return 0;
}


int fact(int n)
   {
        if(n == 1 || n == 0)
          return 1 ;
        else 
         return fact(n - 1) * n ;
             }

int f(char *s)
  {
        for(j = 0 ; j < strlen(s) - 1; j++)
         {
            nb[2] = s[j] ;
            s[j] = s[j+1] ;
            s[j+1] = nb[2]  ;
            printf("%s \n" , s) ;
            n++ ;
              }
        if(n < fact(strlen(s)))
          f(s) ; 
        return 0 ;    
           }

islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
islva
ilsva
ilvsa
ilvas
livas
lvias
lvais
lvasi
vlasi
valsi
vasli
vasil
avsil
asvil
asivl
asilv
sailv
sialv
silav
silva
120

تم تعديل هذه المشاركة بواسطة Argile في 27 نوفمبر 2011 في 18:32

#5

ما زالت الخوارزمية خطأ، لاحظ إن كل التبديلات مكررة 6 مرات. حاول تكتب خطوات الخوازمية أمامك أولا و جربها على مثال يدوى بسيط، حرفين مثلا مما ينتج ٢ تبديلات محتملة.

*آسف حرفين يعطوا تبديلين محتملين فقط و ليس ٤

تم تعديل هذه المشاركة بواسطة Blueteeth في 28 نوفمبر 2011 في 00:21

1
#6

نعم أخي لاحظت ذلك ، بارك الله فيك، أنا أعمل على الحل الآن ، المشكل أنني جربت الطريقة على كلمت بتلات أحرف ، تم عممت دون التحقق ، في الحالة الأخيرة النتيجة تكون كالتالي :

abc
bac
bca
cba
cab
acb

بالمناسبة أخي هل هناك أي مراجع أو أوراق تتحدت عن Multidimensional array ?

مواضيع مشابهة