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

كيف اقوم بالمقارنة في قاعدة If بإستخدام الاسكي كود

مغلق
بدأه qweewq في 22 يناير 2008 · 24 رد · 1,790 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف اقوم بعمل متغير من نوع float ولا يقبل الحروف (ممكن عن طريق الاسكي كود?)

بحيث اعمل قاعدة if في ذلك...

اريد فقط كيف اقوم بالمقارنة في قاعدة if بإستخدام الاسكي كود (مثال إذا كان حرف يظهر رساله انه ادخل حرف)

واشكركم مقدماً... هيثم

تم تعديل هذه المشاركة بواسطة qweewq في 22 يناير 2008 في 17:39

#2

أصلا الـ float لا يقبل الحروف بطبيعة الحال

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#3

اشكرك اخي باسم

انا اقصد انه عندما يطلب منه البرنامج (فليكن مساحة مستطيل) إدخال رقم .... ثم يدخل المستخدم حرف ... تظهر له رساله تقول له "لا يمكنك ادخال حرف ... فضلاً ادخل اعداد"

#4

إذا يجب أن تأخذ مدخلات المستخدم على متغير من نوع char ثم تتأكد من إنه رقم و بعد كدة تحوله لرقم و تحطه فى ال float عن طريق atoi().

دا شرح عام, لو عايز تفصيل أكتر إسأل.

#5

الله يجزاااااااااااااك خير

ويوفقك في الدنيا والآخره

انا حاولت محاولة لكن للأسف ........ نصف فاشلة

المحاولة هي


#include <iostream>
#include <stdlib.h>
#include <iomanip>
using namespace std;

int main ()
{
const int numels = 1000;
char values[numels];
int number;

cout << "Enter the number:";
cin.get(values[0]);
// Convert from character to ascii code
number = values[0];
if ((number>=58) && (number<=126) || ((number>=0) && (number<=47)))
cout << "please enter a numbers only..!" << endl;
else
cout << "Good, your number is " << values[0] << endl;
return 0;
}

والمشكلة هي : انه عندما ادخل

مثلا 5

Good, your number is 5 يطبع

وعندما ادخل

مثلا 55

Good, your number is 5 يطبع

وعندما ادخل

H مثلا

please enter a numbers only..! يطبع

أي: عندما ادخل عدد يتكون من اكثر من خانة (كما في المثال السابق 55) فإنه يقول لي ان رقمك هو (ويأخذ الخانة الأولى منه ) وضحت المشكلة؟

فلو تعدل لي ع الكود السابق وتشرح لي شرح بسيط اكون شاكر لك .......... لأني مبتدئ في هذه اللغة

#6

السلام عليكم :

جرب هذا الكود

#include<iostream>

#include<string>

#include<ctype.h>

using namespace std;

int main()

{

string a;

cout<<"enter :";

bool t=true;

cin>>a;

for(int i=0 ;i<a.length();i++ )

if(!(isdigit(a))){t=false;break;}





if(t==true )

cout <<"Good, your number is "<<a<<endl;

else

cout<<"please enter a numbers only..!"<<endl;

}
tvquran_6.gif

#7

arabi2013

حلك جميل لكن نسيت النقطة (.) مثلا الرقم 12.3 سحدث خطأ عندك..

إقتراحي أن تقوم بالقحص مباشرة، خذ حرفاً حرفًا، كل حرف يفحص لحظة الضغط عليه.. اذا كان رقم يدخل إلى المصفوفة، وإلا يتم تجاهله، أو عرض رسالة (وإفراغ السلسة) وإذا كان نقطة يجب التأكد إذا كانت هذه أول نقطة يتم التمرير إذا تكررت النقطة يعاملها كحرف,.

لا وقت لدي لكتابة هذا الكود أعتذر

#8

شكرا لك اخي اسماعيل لم انتبه لذلك

الكود بعد التعديل:

#include<iostream>

#include<string>

#include<ctype.h>

using namespace std;

int main()

{

string a;

cout<<"enter :";

bool t=true;

cin>>a;

for(int i=0 ;i<a.length();i++ )

if(!(isdigit(a))&& a!='.'){t=false;break;}





if(t==true )

cout <<"Good, your number is "<<a<<endl;

else

cout<<"please enter a numbers only..!"<<endl;

}
tvquran_6.gif

#9

جميل أخي...

كتبت كود آخر يقوم بعمل تفحّص خلال العمل ولا يسمح إلا بالأرقام ونقطة واحدة... ولكم الخيار :)

#include "stdafx.h"
#include<ctype.h>
#include<conio.h>
#include <stdio.h>

int main() {
bool point=false; // true if we have Dot (.) in the string (to not allow another dot
char StrNum[10]; // the string that contain a "number"
char get=0;	 // One character that we'll Get
int i=0;	 //counter
while(i<9) //  9 digits
{
	get= _getch();	 // Get the charactar ('Enter' not necessary)
	if (get == ' ' ||  get == 27) continue; // if Space Or Escape - ignore and begin from the While.
	if(get == '\r') break; // if Enter = exit with results.

	if(isdigit(get)) // if digit
		{
			StrNum[i++]=get; // put the digit in strring and increase counter after that.
			_putch(get); // type the number on screen
		}
		else if (get=='.' && !point) // if not number but  '.' and point==false (no points)
		{	StrNum[i++]=get; // put the point in string
			_putch(get); // type it on screen
			point=true; // tell that we have a point (will not allow another point
} 
else // not number or point OR it's secund oint
  {
	printf("Just float Number please... your input Deleted.\n\r"); //error message
	i=0; point=false; // reset counter and reset point status
  }

} // End while

StrNum='\0'; // close the string
printf("\n\n\n\r\r\r OK! your number Is : %s",StrNum); // print the result
_getch();
}

تم التجريب على فيجيوال ستوديو 2005 ، إذا كانت مشكلة مع getch_ إحذف ال _ وكذلك كل putch_ ...

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 23 يناير 2008 في 00:25

#10

اشكر الأخ arabi2013 على الكود الأكثر من رائع

وأتمنى أن تشرح لي بعض الأسطر شرح مبسط .... ولك خالص شكري وتقديري

تم تعديل هذه المشاركة بواسطة qweewq في 23 يناير 2008 في 00:39

#11

طبعا كل هذا على اعتبار أن الرقم موجب :)

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#12

أخي عربي كودك ينقصه التأكد من وجود أكثر من نقطة :) يعني 12...51 سوف يمر على كودك :) أعذرني لكن لنتعلم :)

اقتباس
طبعا كل هذا على اعتبار أن الرقم موجب

بالفعل فاتتني... لكن بسيطة... نفحص أول ضغطة إذا كانت '-' نسمح لها وبعد ذلك تمنع.... سهلة أظن.

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 23 يناير 2008 في 00:31

#13

اشكرك اخي اسماعيل على الشرح الوافي لأسطر الكود

لكن هل لي بسؤال: من اي سطر يبدأ كود "الفحص خلال العمل"؟

وإذا ممكن تحول جميع اوامر الـ print إلى cout لأني مبتدئ ولم ندرس هذا الأمر :blush:

وشكرا لك استاذي

تم تعديل هذه المشاركة بواسطة qweewq في 23 يناير 2008 في 00:55

#14

هل جربت الكود؟

وكيف العمل؟ المقصود أنه يفحص حرف بحرف...

لا يوجد مكان محدد، عند ضغط الحرف،

get= _getch();

يقوم بنسخه إلى get ثم يفحص قيمة get

 if (get == ' ' ||  get == 27) continue;

يعني اسكيب أو فراغ يتم إعادة الحلقة من البداية ويتجاهل القيمة كونتينيو تعيد الحلقة من البداية

if(get == '\r') break;

اذا انتر ينهي الحلقة...

if(isdigit(get))
		{
			StrNum[i++]=get; .
			_putch(get);
}

اذا رقم يكتبه على الشاشة ويحفظه في السلسلة

والتالي يحتاج تركيز :

  else if (get=='.' && !point) /
		{	StrNum[i++]=get; 
			_putch(get);
			point=true;

اذا كان نقطة و لا يوجد نقط سابقا، يقوم:

1- بإضافة النقطة إلى السلسة

2- يكتب النقطة داخل السلسلة

3- يغير بوينت من فالس إلى ترو ، لكي لا تتكرر عملية إضافة النقطة.. ففي المرة القادمة عندما نضغط نقطة، يفحص المتغير بويتن فيكون ترو فلا يتحقق الشرط أعلاه....

مفهوم؟

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 23 يناير 2008 في 01:02

#15

السلام عليكم ,,

ماشاء الله حلول من كل حدب و صوب :clapping:

و لكن لي سؤال حقيقة, هل يوجد في مكتبات ++C أو C دوال للـ Unbuffered I/O كما عرضت أخي اسماعيل :hmm:

لأني بحثت و لم أجد إلا الـ Buffered يعني الـ streams فقط, لا أدري إن كانت الدالة getch موجودة كـ Standard أم لا,

إضافة إلى ذلك هناك دالة ()cin.get لا أدري إن كانت مشابهة لـ getch ,,

تحياتي ,,

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 23 يناير 2008 في 01:11

#16

انا جربت البرنامج (من قبل)

وعرفت كيف يعمل (الأن)

اقتباس
كود

if (get == ' ' || get == 27) continue;

يعني اسكيب أو فراغ يتم إعادة الحلقة من البداية ويتجاهل القيمة كونتينيو تعيد الحلقة من البداي

هذا الذي كنت اقصده في السؤال الأول

ولكن ماذا عن السؤال الثاني؟

#17

qweewq

لكل دالة Function خصائصها، أنا متعود على أسلوب سي.. لكنcout وcin لها نفس وظيفة printf و scanf لكن لكل طريقته في العمل ومميزاته..

تحياتي أخ خالد ...

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 23 يناير 2008 في 01:57

#18

السلام عليكم ,,

يبدو أن معلوماتي قديمة :blush:

getch();
_getch();

الأولى غير قياسية و الثانية هي القياسية!

تحياتي ,,

#19

حذفت ردي هذا لأنه لا داعي له

تم تعديل هذه المشاركة بواسطة إسماعيل ابراهيم في 23 يناير 2008 في 02:00

#20
اقتباس
على ذمة ميكو

:resentful:

:haha:

#21
اقتباس
من وجود أكثر من نقطة يعني 12...51 سوف يمر على كودك أعذرني لكن لنتعلم

صحيح لكن دائما التعديل جاهز:

#include<iostream>
#include<string>
#include<ctype.h>
using namespace std;
int main()
{
string a;
cout<<"enter :";
bool t=true;
int b=0;
cin>>a;
if( (a[0]!='-') && !(isdigit(a[0]))) t=false;
for(int i=1 ;i< a.length();i++ )
{
if(!(isdigit(a))&& a!='.' ){t=false;break;}
if(a=='.') b++;
}
if(b>1) t=false;
if(t==true )
cout <<"Good, your number is "<<a<<endl;
else
cout<<"please enter a numbers only..!"<<endl;
}
tvquran_6.gif

#22

اشكرك اخي arabi2013 على الكود الرائع

وعلى فكرة ترى انا من مكة ايضا

انا راح اعتمد على الله ثم على كودك في مشروعي

مع إضافة بعض الأفكار الجميله من كود اخونا اسماعيل

اشكركم جزيل الشكر ....... واي خدمة اخواني اسماعيل و arabi2013 تراني حاااضر

:ty:

#23

عفواً اخي arabi2013 ممكن تعمل لي شرح مبسط لأسطر الكود

وجزاك الله خير

#24

السلام عليكم:

#include<iostream>
#include<string>
#include<ctype.h>
using namespace std;
int main()
{
string a;  /*المتغير المدخل*/
cout<<"enter :";
bool t=true;  /*المتغير صح اذا كان المخل عدد*/
int b=0;     /*عداد لمعرفة عدد البوينت*/ 
cin>>a;

     /*هذا الشرط يتاكد من اول مدخل من اليساراذا كان ليس اشارة سالب ولا عدد يجعل القيمة المنطقيه خطاء وهذا يعن ان المدخل ليس عدد*/
if( (a[0]!='-') && !(isdigit(a[0]))) t=false;

/*هذا لوب ياخذ النص حرف حرف */
for(int i=1 ;i< a.length();i++ )
{
/*هنا شرط اذا كان المخل ليس رقم وليس نقطة يجعل القيمة المنطقية خطاء*/
if(!(isdigit(a))&& a!='.' ){t=false;break;}

/*هنا عداد يزيد كل ما وجد نقطة*/
if(a=='.') b++;
}
/*اذا كان عدد النقط اكثر من نقطة يجعل القيمة المنطقية خطاء*/
if(b>1) t=false;

/*الشرط النهائي اذا كانت القيمة المنطقيه صحيحة المدخل عدد واذا كانت خطاء فهو ليس عدد*/
if(t==true )
cout <<"Good, your number is "<<a<<endl;
else
cout<<"please enter a numbers only..!"<<endl;
}

ارجو ان تكون استفدت ان شاء الله

وبالتوفيق

tvquran_6.gif

#25

بصراحة ما اعرف كيف اشكرك اخي arabi2013

وفقك الله حيثما كنت

اشكرك من اعماق قلبي

تم تعديل هذه المشاركة بواسطة qweewq في 24 يناير 2008 في 02:39

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…