سئوالات و مشکلات برنامه نویسی به زبان C و ++C

vahid.kardinal

عضو جدید
نه همینطوری زدم زیست رشتم نفت

این سورس برنامه ای که نوشتم درستم باید باشه ولی کامپایلرم اجرا نمی کنه البته از devc++ استفاده می کنم گویا مهندسای نرم افزار می گن کامپایلرام عشقین!!!

این سورس رو شما اساتید ببنید مشکلی داره آیا؟؟؟؟


#include <iostream>
#include <conio.h>
#include<string.h>
using namespace std;
class book {
public:
char bookname[10];
char namewriter [20];
int date;
char subject[10];
void getinfo(book st[],int n);
void search(book st[],char key[],int n);
void sort (book st[],int n);
void printinfo(book st[],int n);
void sortbyname (book st[],int n);
};

void book :: search(book st[],char key[],int n)
{
int i;
for (i=0;i<n;i++)
if(st.bookname==key)
cout<<"found in "<<i;
else if (i==n-1)
cout<<"not found";
}

void book :: sortbyname(book st[],int n)
{
int i,j;
book temp;
for (i=n-1;i>=0;i--)
for(j=0;j<i;j++)
if(strcmp(st[j].namewriter,st[j+1].namewriter)>0)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st.namewriter;
}
}
void book :: getinfo (book st[],int n)
{
int i;
for (i=0;i<n;i++)
{
cout<<"\n";
cout<<"enter bookname["<<i+1<<"]: ";
cin>>st.bookname;
cout<<"enter namewriter ["<<i+1<<"]: ";
cin>>st.namewriter;
cout<<"enter date["<<i+1<<"]: ";
cin>>st.date;
cout<<"enter subject["<<i+1<<"]: ";
cin>>st.subject;
cout<<"\n";
}
}
void book :: sort(book st[],int n)
{
int i,j;
book temp;
for(i=n-1;i>0;i--)
{
for(j=0;j<i;j++)
if (st[j].date<st[j+1].date)
{
temp= st[j];
st[j]=st[j+1];
st[j+1]=temp;

cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st.date;
}

}
}
void book :: printinfo(book st[], int n)
{
int i;
cout<<"\n";
cout<<"bookname namewriter date subject\n\n";
for(i=0;i<n;i++)
{
cout<<"\n";

cout<<st.bookname<<"\t";
cout<<st.namewriter <<"\t";
cout<<st.date<<"\t";
cout<<st.subject<<"\t";
cout<<endl;
cout<<"\n";
}
}


int main()
{
book st[2],s;
int n;
n=sizeof (st)/sizeof(book);



int menu();
int m;

while (1)
{

m = menu();
switch (m)
{
case 1:s.getinfo(st,n);
break;
case 2:s.printinfo(st,n);
break;
case 3:s.sort(st,n);
break;
case 4:s.sortbyname(st,n);
break;
case 5:s.search(st,n);
break;
case 6:return 0;
default:
cout<<"\n";
cout<< "yek adad az 1 ta 4 vared konid \n";
cout<<"\n";
getch();
}
}
}
int menu()
{
int x;
cout<<"\n";
cout<<"1-vared kardan moshakhasat\n";
cout<<"2-namayesh moshakhasat\n";
cout<<"3-sort \n";
cout<<"4-sort by name \n";
cout<<"5-search \n";
cout<<"6-exit\n\n";
cout<<"yeki az adad x(1.2.3.4.5) vared konid = ";
cin>>x;
cout<<"\n";
return x;
}

این کامپایلر تو خط 127 ارور میده!!!
 

vahid.kardinal

عضو جدید
دوستان اون خط رو حذف کردم کار کرد البته با کمی تغییرات کوچیک دیگه اما بازم احساس می کنم نسبت به چیزی می خوام کمی متفاوت مثلا دسته بندی موضوعی رو درست انجام ندادم حس می کنم!!!

این سورس جدید

#include <iostream>
#include <conio.h>
#include<string.h>
using namespace std;
class book {
public:
char bookname[10];
char namewriter [20];
int date;
char subject[10];
void getinfo(book st[],int n);
void search(book st[],char key[],int n);
void sort (book st[],int n);
void printinfo(book st[],int n);
void sortbyname (book st[],int n);
};

void book :: search(book st[],char key[],int n)
{
int i;
for (i=0;i<n;i++)
if(st.bookname==key)
cout<<"found in "<<i;
else if (i==n-1)
cout<<"not found";
}

void book :: sortbyname(book st[],int n)
{
int i,j;
book temp;
for (i=n-1;i>=0;i--)
for(j=0;j<i;j++)
if(strcmp(st[j].namewriter,st[j+1].namewriter)>0)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st.namewriter;
}
}
void book :: getinfo (book st[],int n)
{
int i;
for (i=0;i<n;i++)
{
cout<<"\n";
cout<<"enter bookname["<<i+1<<"]: ";
cin>>st.bookname;
cout<<"enter namewriter ["<<i+1<<"]: ";
cin>>st.namewriter;
cout<<"enter date["<<i+1<<"]: ";
cin>>st.date;
cout<<"enter subject["<<i+1<<"]: ";
cin>>st.subject;
cout<<"\n";
}
}
void book :: sort(book st[],int n)
{
int i,j;
book temp;
for(i=n-1;i>0;i--)
{
for(j=0;j<i;j++)
if (st[j].date<st[j+1].date)
{
temp= st[j];
st[j]=st[j+1];
st[j+1]=temp;

cout<<"\n sort is :";
for(i=0;i<n;i++)

cout<<"\t"<<st.date;
}

}
}
void book :: printinfo(book st[], int n)
{
int i;
cout<<"\n";
cout<<"bookname namewriter date subject\n\n";
for(i=0;i<n;i++)
{
cout<<"\n";

cout<<st.bookname<<"\t";
cout<<st.namewriter <<"\t";
cout<<st.date<<"\t";
cout<<st.subject<<"\t";
cout<<endl;
cout<<"\n";
}
}


int main()
{
book st[2],s;
int n;
n=sizeof (st)/sizeof(book);



int menu();
int m;

while (1)
{

m = menu();
switch (m)
{
case 1:s.getinfo(st,n);
break;
case 2:s.printinfo(st,n);
break;
case 3:s.sort(st,n);
break;
case 4:s.sortbyname(st,n);
break;


case 5:return 0;
default:
cout<<"\n";
cout<< "yek adad az 1 ta 4 vared konid \n";
cout<<"\n";
getch();
}
}
}
int menu()
{
int x;
cout<<"\n";
cout<<"1-name ketab\n";
cout<<"2-namayeshe moshakhasat nevisande\n";
cout<<"3-moratab kardan \n";
cout<<"4-namayeshe mozooie \n";
cout<<"5-search \n";
cout<<"6-exit\n\n";
cout<<"yeki az adad x(1.2.3.4.5) vared konid = ";
cin>>x;
cout<<"\n";
return x;
}
 

yosoufe

متخصص خودرو
کاربر ممتاز
سلام. در برنامه ای از تابعی به شکل زیر شروع شده (در محیط برنامه نویسی آردوینو)
کد:
void getField(char* buffer, int index){
 int sentencePos = 0;
  int fieldPos = 0;
  int commaCount = 0;
  while (sentencePos < sentenceSize){
    if (sentence[sentencePos] == ','){
      commaCount ++;
      sentencePos ++;
    }
    if (commaCount == index){
      buffer[fieldPos] = sentence[sentencePos];
      fieldPos ++;
    }
    sentencePos ++;
  }
  buffer[fieldPos] = '\0';
}


حالا می خوام بدونم آیا char* buffer یه نشانگر باید باشه؟ آیا جای ستاره نباید چسبیده به buffer باشه تا چسبیده به char؟

اگر پوینتره، چرا در طول برنامه هنگام متغیر دادن به تابع، یک متغیر معمولی داده شده :

در طول برنامه از این تابع به شکل زیر استفاده شده است:

کد:
 char field[20];
  getField(field, 0);
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
سلام. در برنامه ای از تابعی به شکل زیر شروع شده (در محیط برنامه نویسی آردوینو)
کد:
void getField(char* buffer, int index){
 int sentencePos = 0;
  int fieldPos = 0;
  int commaCount = 0;
  while (sentencePos < sentenceSize){
    if (sentence[sentencePos] == ','){
      commaCount ++;
      sentencePos ++;
    }
    if (commaCount == index){
      buffer[fieldPos] = sentence[sentencePos];
      fieldPos ++;
    }
    sentencePos ++;
  }
  buffer[fieldPos] = '\0';
}


حالا می خوام بدونم آیا char* buffer یه نشانگر باید باشه؟ آیا جای ستاره نباید چسبیده به buffer باشه تا چسبیده به char؟

اگر پوینتره، چرا در طول برنامه هنگام متغیر دادن به تابع، یک متغیر معمولی داده شده :

در طول برنامه از این تابع به شکل زیر استفاده شده است:

کد:
 char field[20];
  getField(field, 0);
با هر دوتاش کار می کنه چسبیده به متغیر هم می شه
در واقع شما یه آرایه رو پاس دادی نه متغیر معمولی که این روش برای ساختارهای نامشخص به راحتی سازگاره
 

yosoufe

متخصص خودرو
کاربر ممتاز
با هر دوتاش کار می کنه چسبیده به متغیر هم می شه
در واقع شما یه آرایه رو پاس دادی نه متغیر معمولی که این روش برای ساختارهای نامشخص به راحتی سازگاره
می شه بگید char* buffer با char buffer چه فرقی می کنه؟ چون اگه ستاره شو بردارم، کامپایلر ارور می ده

ممنون
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
می شه بگید char* buffer با char buffer چه فرقی می کنه؟ چون اگه ستاره شو بردارم، کامپایلر ارور می ده

ممنون
اون حالت برای یه متغیر با تعداد نامشخص کاربرد داره
وقتی ستاره رو نذاری یک متغیر معمولی است که نمی تونه با آرایه همسان بشه
توی سی شارپ معمولا ستاره رو نزدیک به اعلان نوع متغیر می ذاریم...ولی توی سی ++ تفاوت خاصی نداره
 

leila.alizadeh

عضو جدید
gotoxy با goto كاملا فرق داره .
استاد شما كاملا درست گفتن... اين تابع براي قرار دادن مكان نما در مكان مورد نظر است در حالت گرافيكي...
gotoxy(x,y);

از کدوم تابع میتونم استفاده کنم تا بعد از یه زمان مشخص توپ ها تک تک بیفتن ؟؟؟؟؟
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
تابع kbhit رو تو visual 2012 نمیشناسه چی بنویسم ؟؟؟؟؟؟
kbhit مربوط به تشخیص زدن یک دکمه از صفحه کلید است و ربطی به زمان نداره
برای زمان از توابعی مثل Sleep , Delay یا روش بهتر از شی Timer می شه استفاده کرد....نمی دونم نسخه 2012 هنوز از این تابع ها استفاده می کنه یا نه!
 

faghihneja

عضو جدید
سلام يه سايت در زمينه سانترال طراحي كردم يه جائيش كدهاي مربوط به سانترال رو توي سايت تو ديتا بيس دارم مي خونم اما به مشكل خوردم دوستان اگه كسي لطف كنه و نگاهي بندازه ممنون مي شم
مرسي
 

Ali1n

عضو جدید
سلام دوستان
میخوام بدونم که دو زبان ++C و C در مفاهیم و دستورات اولیه باهم تفاوت دارند؟
نه در سطح متوسط یا پیشرفته فقط من در حد مقدماتی میخوام
ممنون
 

mohsen100

عضو جدید
سلام دوستان
میخوام بدونم که دو زبان ++C و C در مفاهیم و دستورات اولیه باهم تفاوت دارند؟
نه در سطح متوسط یا پیشرفته فقط من در حد مقدماتی میخوام
ممنون

شاکله سی ++, زبان سی هست.
از تمام دستورات سی میشه در سی ++ استفاده کرد.
 

chipset

عضو جدید
سلام دوستان و اساتید.
واسه برنامه نویسی C++ نرم افزار اصلیش چیه ؟ Borland C یا Turbo c ؟
از کجا میتونم دانلود کنم ؟
سپاس
 

tick.kick

عضو جدید
سلام بچه ها...
واقعااااا به کمکتون نیاز دارم
من 27 ، یعنی پس فردا مبانی و برنامه نویسی مقدماتی دارم
چنتا سوال برنامه نویسی رو میخوام برام حل کنین لطفا
چون واقعا نفهمیدم چجوری حل میشه، سوالاشم اینه:
(راستی زبان c++ استادمون تدریس میکنه)

1. برنامه ای بنویسید که ترانهاده ماتریس را محاسبه کند.

2. برنامه ای بنویسید که دو عدد n و m را از ورودی دریافت کرده و عدد m را به توان n برساند. (برای محاسبه توان از دستور pow استفاده نکنید)

3. برنامه ای بنویسید که دو رشته را از کاربر دریافت کرده ، رشته دوم را داخل رشته اول جست و جو کند. در صورت وجود رشته اول ، محل شروع رشته دوم در اول ؛ و در صورت عدم وجود عدد «-1» را برگرداند. (محل اتمام رشته دوم در رشته اول )

 

leila.alizadeh

عضو جدید
سلام بچه ها...
واقعااااا به کمکتون نیاز دارم
من 27 ، یعنی پس فردا مبانی و برنامه نویسی مقدماتی دارم
چنتا سوال برنامه نویسی رو میخوام برام حل کنین لطفا
چون واقعا نفهمیدم چجوری حل میشه، سوالاشم اینه:
(راستی زبان c++ استادمون تدریس میکنه)

1. برنامه ای بنویسید که ترانهاده ماتریس را محاسبه کند.

2. برنامه ای بنویسید که دو عدد n و m را از ورودی دریافت کرده و عدد m را به توان n برساند. (برای محاسبه توان از دستور pow استفاده نکنید)

3. برنامه ای بنویسید که دو رشته را از کاربر دریافت کرده ، رشته دوم را داخل رشته اول جست و جو کند. در صورت وجود رشته اول ، محل شروع رشته دوم در اول ؛ و در صورت عدم وجود عدد «-1» را برگرداند. (محل اتمام رشته دوم در رشته اول )

جواب سوال 2:
#include "stdafx.h"


#include <iostream>
using namespace std;


int main()
{
int m,n,s=1,i;
cin>>m>>n;
getchar();
for(i=1;i<=n;i++)
{
s=s*m;
}
cout<<s;
getchar();
return 0;
}
 

iut.ali

عضو جدید
سلام دوستان
میخوام بدونم که دو زبان ++C و C در مفاهیم و دستورات اولیه باهم تفاوت دارند؟
نه در سطح متوسط یا پیشرفته فقط من در حد مقدماتی میخوام
ممنون
سلام در سطح مقدماتی تو یه چیزای خیلی جزئی تفاوت هایی دارن مثلا printf در c استفاده میشه و cout در c++ البته دستورات c رو میشه تو c++ هم استفاده کرد
 

mohsen100

عضو جدید
سلام دوستان و اساتید.
واسه برنامه نویسی C++ نرم افزار اصلیش چیه ؟ Borland C یا Turbo c ؟
از کجا میتونم دانلود کنم ؟
سپاس

خیلی چیزا مثل: codeblocks( مجانی ) - ( خریدنی )Visual Studio -
اینا 2تاش هست که من گفتم. کامپایلرهایی که خودتون فرمودید هستن ولی خیلی خیلی قدیمی هستن و به درد نمیخورن
 

minaz6922

عضو جدید
سلام
من می خوام برنامه ای بنویسم که پکت رو به نودهای شبکه ام ارسال کنه ،اگر ممکنه راهنماییم کنید
ممنون:smile:
 

taranombaran

عضو جدید
الان که تازه میخام شروع کنم انگار افتادم تو یه اقیانوس بزرگ
اصلا نمیدونم چه جوری و از کجا باید شروع کنم:w20:
با این همههههههه تاپیک و صفحه:cry:
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
الان که تازه میخام شروع کنم انگار افتادم تو یه اقیانوس بزرگ
اصلا نمیدونم چه جوری و از کجا باید شروع کنم:w20:
با این همههههههه تاپیک و صفحه:cry:
هر دوتا تاپیکی که هستید درسته
سوال قبلی شما رو توی تاپیک قبلی جواب دادم..شروع کنید هر جا به مشکل برخورد کردید اینجا مطرح کنید
 

reza.cr

عضو جدید
سلام دوستان،یه سوال داشتم این که تو زبان سی چطور میشه یه ماتریس n*n تعریف کرد،یعنی ماتریسی که مرتبش نامعلومه و تو روند برنامه توسط کاربر تعیین میشه بعد با توجه به مقداری که کاربر به n میده درایه های ماتریس یکی یکی توسط خود کاربر گرفته میشه
int n;
cin n;
float a[n]​
وقتی همچین برنامه ای مینویسم ارور میده و میگه n حتما باید یه عدد مشخص و ثابت باشه راهی نیست که بشه یه همچین ماتریسی تعریف کرد؟
 

علی1368

عضو جدید
میشه از دستور const استفاده کنی.یا بنویسی

#include <iostream>
using namespace std;


/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char *argv[]) {
int k;
cin>>k;
const int n=k;
int i,j,x[n][n];

for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>x[j];
درست نوشتن ان با خودت .
خداحافظ.
 

علی1368

عضو جدید
سلام ببخشید.
برنامه ای در سی پلاس پلاس خواستم بنویسم که چند عدد را بوسیله حلقه فور دریافت کند و با حلقه وایل مجموع ارقام هرکدام را بنویسد.:smile:
 

sungift143

عضو جدید
سلام
همگی نمازو روزتون قبول باشه

دوستان راستش من میخوام توی تابستون برنامه نویسی و تمرین کنم ک برای ترم پاییز ک میخوام درس برنامه نویسی پیشرفته رو وردارم دیگه راحت باشم.البته ترم پیشم این درسو ورداشتما اما حذفش کردم...
اگه کتابی یا pdf ای ک به زبان ساده هست لطفا معرفی کنید...

من خودم برای درس مبانی ترم اول کتای اقای جعفرنژاد قمی رو خوندم و برای پیشرفته کتاب دیتل ترجمه اقای قلزم اما الان احساس میکنم همش یادم رفته...
 

yosoufe

متخصص خودرو
کاربر ممتاز
سلام
همگی نمازو روزتون قبول باشه

دوستان راستش من میخوام توی تابستون برنامه نویسی و تمرین کنم ک برای ترم پاییز ک میخوام درس برنامه نویسی پیشرفته رو وردارم دیگه راحت باشم.البته ترم پیشم این درسو ورداشتما اما حذفش کردم...
اگه کتابی یا pdf ای ک به زبان ساده هست لطفا معرفی کنید...

من خودم برای درس مبانی ترم اول کتای اقای جعفرنژاد قمی رو خوندم و برای پیشرفته کتاب دیتل ترجمه اقای قلزم اما الان احساس میکنم همش یادم رفته...
http://maktabkhooneh.org/course?course=bazargan466
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
دوستانی که سوال نوشتن با عرض ÷وزش اینجا سوالات رو حل نمی کنیم بلکه راهنمایی می کنیم...خودتون شروع کنید ما رفع مشکل می کنیم
 

SHRP

همکار مدیر تالار مهندسی کامپیوتر متخصص برنامه نوی
کاربر ممتاز
سلام دوستان،یه سوال داشتم این که تو زبان سی چطور میشه یه ماتریس n*n تعریف کرد،یعنی ماتریسی که مرتبش نامعلومه و تو روند برنامه توسط کاربر تعیین میشه بعد با توجه به مقداری که کاربر به n میده درایه های ماتریس یکی یکی توسط خود کاربر گرفته میشه
int n;
cin n;
float a[n]​
وقتی همچین برنامه ای مینویسم ارور میده و میگه n حتما باید یه عدد مشخص و ثابت باشه راهی نیست که بشه یه همچین ماتریسی تعریف کرد؟
می تونی از یه روش مثل این استفاده کنی تا مشکلت حل بشه:
کد:
#include<iostream.h>
#include <stdio.h>
int main()
{
int x;
cin>>x;
int *myArray;                //Declare pointer to type of array
myArray = new int[x];   //use 'new' to create array of size x
myArray[3] = 10;          //Use as normal (static) array
delete [] myArray;
return 0; 
}
 

Similar threads

بالا