c/c++ תרגול קוד יעיל - עמוד 6 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

c/c++ תרגול קוד יעיל


007המקורי

Recommended Posts

  • תגובות 96
  • נוצר
  • תגובה אחרונה

שאלה נחמדה .

מכניסים מיספר(אחד) - שתואם לאות באלף בית האנגלי

דוגמא

3=C

2=B

1=A

וכך אלה...

לדוגמא : אם נקיש 3

האות A תופיע פעם אחת האות B פעמיים האות C שלוש פעמים

כך יראה הפלט:

ABBCCC

הקוד ניראה לי יעיל מאוד :yelclap:

  #include "stdafx.h"
#include <iostream>

using namespace std;

int main ()

{
char A=65;
int counter=0,i=0,in_count=0;
cout << "number ! "<< endl;
cin >> counter;



for (i=0;i<counter;i++){
in_count=i;
in_count++;
while (in_count >0){
cout << A ;

in_count--;
}
A++;
//

}
char f;
cin >> f;
return 0;





}

קישור לתוכן
שתף באתרים אחרים

הקוד עובד, אבל לא הצלחתי להבין בשביל מה צריך כל כךהרבה ++ -- בתוך הלולאה

דרך אגב, אתה יודע מה ההבדל בין ++i לבין i++?

שים לב מה יש בתוך הfor אצלך

יש הצבה התחלתית בin_counte

יש תנאי סיום

ויש הקטנה שלו ב1

ללי זה נשמע שצריך להיותשם for נוסף ולא while

בנוסף תמיד מומלץ לבצע בדיקת קלט. מה שאתה לא ביצעת כלל בתוכניות כאן

ככה אני הייתי בונה את התרגיל הזה

include <iostream>
using namespace std;

int main(){
int num=0,i=1,j;
char letter=65;
cout << "Enter num (1-26)"<<endl;
cin >> num;
if ((num<1) || (num >26)) return 1;// בדיקת חוקיות הקלט

do {
for (j=0;j<i;++j) cout << letter;//הדפסה
++letter;
} while (i++ < num);

cout <<endl;
return 0;
}

קישור לתוכן
שתף באתרים אחרים

אחרונה לבנתיים :)

קלוט 2 מישתנים והדפס מלבן כוכביות בהתאם.

דוגמא:עבור הקלט 3 , 6 הפלט יראה כך:

******

******

******

שני גירסאות לקוד.

1.

 #include "stdafx.h"
#include <iostream>

using namespace std;

int main ()

{
char star=42;
int lines=0,i=0,num=0,start=0;
cout << "number and lines! "<< endl;
cin >> num;
cin >> lines;

for(i=0;lines>i;i++){start = num;
while(start>0 ){cout << star ;

start--;
}
cout << "\n";


}
char f;
cin >> f;
return 0;





}

קישור לתוכן
שתף באתרים אחרים

גירסה 2

הקוד.

     #include "stdafx.h"
#include <iostream>

using namespace std;

int main ()

{
char star=42;
int lines=0,i=0,num=0,start=0,j=0;
cout << "number and lines! "<< endl;
cin >> num;
cin >> lines;

for(i=0;lines>i;i++){for (j=0;num>j;j++){cout << star;
}
cout << "\n";
}
char f;
cin >> f;
return 0;





}

קישור לתוכן
שתף באתרים אחרים

לא הבנתי למה אתה רושם 42 ולא פשוט '*'. בכל מקרה הגרסה השנייה יותר טובה - אין שום סיבה להשתמש ב-while איפה שמתאים for.

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

קישור לתוכן
שתף באתרים אחרים

בזמן הקימפול קיבלתי אזהרות.

1>c:\users\q\documents\visual studio 2008\projects\test2\test2.cpp(9) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : see declaration of 'scanf'

1>c:\users\q\documents\visual studio 2008\projects\test2\test2.cpp(14) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.

1> c:\program files\microsoft visual studio 9.0\vc\include\conio.h(145) : see declaration of 'getch'

זה באמת משנה(אני אמור לעבוד השמות החדשים?)

קישור לתוכן
שתף באתרים אחרים

מערכים

הגדר מערך בעל 10 איברים וקלוט לתוכו ציונים,הדפס תציונים מהסוף להתחלה.

(לא קשה)

הקוד

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


void main()

{

int grades[10],i=0;
printf(" enter 10 grades !\n");
for(i=0;i<10;i++)
scanf("%d",&grades[i]);
for (i=9;i>=0;i--)
printf("%d\n",grades[i]);


getch();









}

קישור לתוכן
שתף באתרים אחרים

:xyxthumbs:

רק הערה קטנה: אל תכתוב void main אלא int main, ובסוף הקוד ;return 0

לשאלתך הקודמת:

אין הבדל בין getch ו-getch_, זה רק השם. בעקרון זו לא פונקציה סטנדרטית ולא אמורים להשתמש בה, אבל רק לצורך תרגול זה בסדר (גם ככה אתה משתמש בזה רק כדי שהחלון לא יסגר בסוף התכנית).

לגבי scanf_s, שימוש ב-scanf על מנת לקלוט מחרוזות (כלומר קליטת "s%") הוא שימוש לא בטוח (חשוף לגלישת חוצץ) ולכן ממליצים להשתמש בגרסה יותר בטוחה שלה, scanf_s (שמגבילה את גודל המחרוזת שניתן לקרוא מהמשתמש, ולכן ניתן ככה למנוע גלישת חוצץ). אם אתה לא משתמש ב-scanf על מנת לקלוט מחרוזות (אלא רק מספרים, לדוגמה) אז אין בכלל בעיה. בכל מקרה כיוון שמדובר רק בתרגילים בסיסיים גם זה לא חשוב במיוחד כרגע.

קישור לתוכן
שתף באתרים אחרים

תודה רבה על הפירוט.

שאני כותב int main---return 0

אין לי השהיה של מסך הפלט

פה הם כותבים את זה בלי ה int וזה עובד

http://www.programmingsimplified.com/c/conio.h/getch

יש לך במיקרה "טריק" אחר ת שיעבוד גם עם int?

***************************************************

הגדר מערך בן 10 איברים וקלוט לתוכו ציונים ,והדפס ציונים שהם מעל 90.

הקוד

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

int main()
{
int grades [10],i=0;
printf ("enter 10 grades!");
for (i=0;i<10;i++)
scanf ("%d",&grades[i]);
for (i=0;i<10;i++)
if (grades[i]>90)
printf ("%d\n",grades[i]);

getch();


return 0;

}

קישור לתוכן
שתף באתרים אחרים

זה שאפשר לכתוב קוד כלשהו לא אומר שזה נכון.

התקן אומר שצריך int main.

אם אין לך השהיה של המסך זה אומר ששמת את ה-return 0 במקום הלא נכון. דווקא בקוד שהעלית עכשיו זה בסדר.

הקוד סבבה, אם כי כמו שאמרתי כבר קודם, כשיש לך for/if/while אז מומלץ תמיד לשים סוגריים מסולסלים, גם אם זו רק פקודה אחת. דהיינו:

for (i=0;i<10;i++) {
scanf ("%d",&grades[i]);
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...