المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ما هي فكرة برامج إلغاء التجزئة؟؟؟؟


Golden man
02-05-2008, 01:04 PM
السلام عليكم

بما أن هذا المنتدى خاص بالمواضيع البرمجية المتخصصة أحببت أن أطرح هذا السؤال على عقول المبرمجين الصافية لنحاول الإجابة عليه سوية بطرح الأفكار و تجربتها للوصول إلى أفضل فكرة للحل بإذن الله.

و السؤال اليوم يدور حول فكرة برامج إلغاء التجزئة و لكن بمحاكاتها بشكل آخر و بسيط.

حيث نقوم بتمثيل القرص الصلب على أنه مصفوفة أحادية البعد و فيها مجموعة نصوص مبعثرة بشكل عشوائي في هذه المصفوفة و يفصل بين كل مجموعة من الأحرف فراغات غير معروفة العدد و المطلوب هو تجميع جميع الأحرف المتشابهة مع بعضها البعض في مجموعات (حيث تمائل هذه المجموعات الملفات في العملية الحقيقية) و من ثم وضع النصوص بشكل متتالي في المصفوفة حيث يكون ترتيبهم ممائل لترتيب ورود أول جزء من كل نص في المصفوفة .

ملاحظة :
المجموعات هي إما أحرف أو أرقام .

مثال : (أرقام فقط)


11 5445 545 5 5 555 77 7754 22 111 1 55 5 5 53 3 221


تصبح بعد المعالجة :


111111155555555555555544447777222233


و يجب مراعاة إمكانية وجود أحرف مع الأرقام أيضا.


بانتظار الحلول و الأفكار ......

allmaida
02-05-2008, 03:56 PM
انشالله بنزل الرد قريبا

بس هلأ الفيجوال مو نازل عندي فانشالله بنزله وبشارك معك

واسمحلي اتشكرك على الموضوع الرائع

ويا ريت تكتر من هيك مواضيع لانو صراحة المنتدى شوي تانية مننسى انو الهدف

الاول منو هو الدراسة فجد انا بتمنى انو تكتر من هيك مواضيع

تقبل مروري

Bl@ck Angel
02-06-2008, 04:06 PM
السلام عليكم ..
شو شباب وين الحلول انا خلصة البرنامج بس عم أستنا حدا يحط حلو بالأول .
وياريت يلي بدو يحل الرنامج يضع الكود بالـ ++C و #C لطلاب السنة الثانية ..
منشان طلاب السنة الأولى يستفادوا من الموضوع بأكبر قدر ممكن .

SYR_SNIPER
02-09-2008, 09:49 AM
فكرة الحل برايي :
انو نعمل مصفوفة تمثل جميع الحروف والأرقام وحتى المسافات ونجعل البرنامج بحلقة يقوم بعدد العناصر الموجودة في المصفوفة الأولى ويضع عددها بجانب كل عنصر من عناصر مصفوفتنا الجديدة وفي النهاية يقوم البرنامج بطباعة عناصر المصفوفة الجديدة بتكرار يساو العدد المقابل له :)

مابعرف صح ولاخطأ بس موضوع حلو

allmaida
02-09-2008, 02:20 PM
وهي كمان حل الغاء التجزئة
كمان ما جربتو بس بظن انو صح
بتمنى من يللي بلاقي خطأ ما يبخل عليي

#include<iostream.h>
void main ()
{
cha arr[100];
cha g;
int n.s.f=-1,k,
while(g==y)
{
f++;
cin>>arr[f];
cout<<"if you want to continue pass y elss pass any key";
cin>>g;
}
for(n=0;n<f;n++)
if(arr[n]=='-')
{
for(s=n;s<=f;s++)
arr[s]=arr[s+1];
f--;
}
for(n=0;n<f;n++)
if(arr[n]!=arr[n+1])
for(s=n+1;s<f;s++)
if(arr[s]==arr[n])
for(k=s;k>n+1;k--)
arr[k]=arr[k-1];
arr[n+1]=arr[n];
cout<<'{';
for(n=0;n<f;n++)
cout<<arr[n];
cout<<'}';
}__________________

Bl@ck Angel
02-09-2008, 10:25 PM
السلام عليكم .....
أخ SYR_SNIPER الفكرة أكيد بتشتغل و يا ريت تكتب الكود وتنزلو على المنتدى
أما أنا فـ حليتو بطريق مختلفة :
تعتمد على البحث عن المحرف و إزاحته إلى المكان المطلوب عن طريق تابع إزاحة Shift الذي يمرر له المصفوفة و موقع المحرف في المصفوفة و موقع المراد الإزاحة إليه .(هي طريقة ++C)
أما طريقة ال C#.net فهي مختلفة :
تعتمد على وضع المحارف المطلوب في مصفوفة و المحارف الباقية في مصفوفة أخرى و تستمر الحلقة حتى يصبح طول المصفوفة الأخرى صفري فيكون جميع المحارف تم إلغء تجزئتها ...
( إعزروني على الإطالة )
++C :
#include<iostream.h>
void MoveSpace(char a[])// تابع إزاحة المسافات إلى أخر المصفوفة
{
int i,j;
for(i=0;a[i]!='\0';i++)
for(j=i;a[j+1]!='\0';j++)
if(a[j]==' ')
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
void Shift(char a[],int F,int T) // تابع يقوم بإزاحة محرف من مكان إلى أخر
{
int i,temp;
temp=a[F];
for(i=F;i>T;i--)
a[i]=a[i-1];
a[T]=temp;
}
void Scan(char a[]) // تابع يقوم بالبحث عن قيمة مشابهة للقيمة حالية و يقوم بـ إزاحتها بستخدام التابع السابق
{
MoveSpace(a);
int i,j;
for(i=0;a[i]!='\0';i++)
for(j=i+1;a[j]!='\0';j++)
if(a[i]==a[j])
Shift(a,j,i+1);
}
void main()
{
char a[100]="11 5445 545 5 5 555 77 7754 22 111 1 55 5 5 53 3 221 ";
cout<<a<<'\n';
Scan(a);
cout<<a<<endl;
}
C#.net



using System;
using System.Collections.Generic;
using System.Text;
namespace defrage
{
class Program
{
static string Scan(string str)
{
string str2="", str3="";
int i,j;
for (i = 0; str.Length >0; i++)
{
i = 0;
for (j = 0; j < str.Length; j++)
{
if (str[j] == ' ')
continue;
else
if (str[i] == str[j])
str2 += str[j];
else
str3 += str[j];
}
str = str3;
str3 = "";
}
return str2;
}
static void Main(string[] args)
{
string str="11 5445 545 5 5 555 77 7754 22 111 1 55 5 5 53 3 221 ";
Console.WriteLine(str);
str=Scan(str);
Console.WriteLine(str);
}
}

}