מציאת ספרת ביקורת של מספר ת.ז.

Panther

New member
מציאת ספרת ביקורת של מספר ת.ז.

מישהו יודע איך מוצאים את מספר הביקורת ממספר ת.ז? פעם ידעתי, אני רק צריך רענון. ניסיתי לעשות תוכנית שמוצאת את זה, ואז נזכרתי שיש שלב שאני לא זוכר. תודה
 

WarLord

New member
גם אני אשמח לדעת

אם אתה נזכר אז יהיה נחמד אם תפרסם בפורום ידעתי פעם ואני זוכר משהו לגבי משלים ל-10 וחיבור ספרות של מספרים ...
 

stac

New member
לפני המון זמן......

בפורום iol ז"ל היה דיון על זה וגם היו מלא פתרונות וגם אולגריתמים
 

Panther

New member
נזכרתי

ועשיתי תוכנית בVisual C++ שמחשבת את זה. אני אסביר איך עושים את זה: לוקחים את המספר בלי הספרת ביקורת 12345678 ואז מכפילים כל ספרה לחוד ב2 או 1. את הספרה הראשונה משמאל ב2, את הבאה אחריה ב1 וכך הלאה. אם יוצא מספר גדול מתשע מחברים את הספרות שלו. 22641658 מחברים את כל הספרות עד שמגיעים לספרה אחת. 2+2+6+4+1+6+5+8. מקבלים בסוף שבע וזוהי ספרת הביקורת.
 

Panther

New member
אני מצרף קוד ואת התוכנית

עשיתי את זה בויז´ואל סי++.
 

WarLord

New member
כמעט נכון

שככחת את המשלים ל-10. הקוד שלך ריק מתוכן. קובץ ההרצה נותן תשובות שגויות. לוקחים את המספר בעל 8 ספרות (להוסיף אפסים מובילים במידת הצורך). מכפילים ספרה ספרה משמאל לימין ב 1 (ראשונה משמאל) 2 (שניה משמאל) 1 2 1 2 1 2 אם יוצא מספר גדול מ 10 באחת ההכפלות אז מחברים את ספרותיו. לוקחים את כל התוצאות ומחברים. ספרת הביקורת היא המשלים ל-10 של ספרת האחדרות. דוגמא: 1 2 3 4 5 6 7 8 1 2 1 2 1 2 1 2 ---------------------- 1 4 3 8 5 12 7 16 1 +4 +3 +8 +5 +3 +7 +7 = 38 -> 10-8=2 ספרת הביקורת 2 (יש לקרוא מימין לשמאל - הכל יצא הפוך - ת.ז. 12345678)
 

WarLord

New member
לא שלי ../images/Emo9.gif

התוכנית לא שלי - מצאתי אותה בפורום IOL זו נראת פונקציה ב גאוה סקריפט או ASP אני לא ממש יודע אבל זה די מסביר את עצמו. תקרא את ההודעה שפרסמתי ("יש שיטה מתמטית") בשביל להבין מה עושה ה %. חוץ מזה זה כמו ב C (פחות או יותר). אם עדיין יש שאלות אני אשמח לענות.
 

Panther

New member
הנה עכשיו זה גמור

עכשיו זמרתי את זה וזה עובד על בטוח, תודה על העזרה.
void CIDDlg::OnAnalyze() { // TODO: Add your control notification handler code here UpdateData(TRUE); if ((m_iID>99999999) || (m_iID<1)) MessageBox("Please enter a valid ID number", "Error"); else { m_iBikoret=getbik(m_iID); UpdateData(FALSE); } } int CIDDlg::getbik(int id) { int sum=0, temp=0, index=8-intlength(id), i=0; int ar[8]={1, 2, 1, 2, 1, 2, 1, 2}; for (i=1 ; i<=intlength(id); i++) { temp=ar[index+i-1]*sifra(id,i); if (temp>9) temp=temp-9; sum=sum+temp; } return(10-(sum%10)); } int CIDDlg::intlength(int num) { int i=0; for (i=1 ; num>9; i++) { num=num/10; } return i; } //DEL int CIDDlg::sifra(int num) //DEL { //DEL int numlen; //DEL numlen=intlength(num); //DEL //DEL } int CIDDlg::sifra(int num, int sif) //returns the specific digit in the int num { int numlen=intlength(num), i=0, res=0; for (i=1; i<=(numlen-sif); i++) num=num/10; res=num%10; return res; }​
יש תקלה זמנית בנענע, אז לא הצלחתי להעלות את הקובץ Exe, אבל הפונקציות עובדות.
 
למעלה