עבור לתוכן

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

Featured Replies

פורסם
  • מחבר

:xyxthumbs:

דרך אגב הקוד שהעלתי לפה נחשב לולאה 1 או 2?

עם 2 לולאות לימצוא תמיספר השני זה קל, אבל השאלה יתיחסה ללולאה אחת בילבד.

  • תגובות 96
  • צפיות 8.5k
  • נוצר
  • תגובה אחרונה
פורסם
  • מחבר

שאלה נחמדה .

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

דוגמא

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;
}

פורסם
  • מחבר

הקוד שלך "סופר יעיל".

לא שמתי לב :kopfpatsch:

(ידוע לי ההבדל)

                     

for (i=0;i<counter;++i){// in_count++; במקום ++i
in_count=i;
//in_count++;

פורסם
  • מחבר

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

קלוט 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.

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

פורסם
  • מחבר

אני עובד עכשיו עם שפת "c"

visual express 2008

איך אני משהה את מסך הפלט(איזו פקודה לירשום?)

תודה

פורסם
  • מחבר

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

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]);
}

ארכיון

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

דיונים חדשים