PDA

View Full Version : اشکال این برنامه کجاست



pooria_googooli
یک شنبه 08 فروردین 1389, 18:02 عصر
سلام دوستان . میشه توضیح بدید برا چی ارور میده؟

#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
using namespace std;
#define max 50

class student {
public :
char numst[11];
char name[15];
char famili[20];
double score[4];
double ave;
student(); //initializing
~student(); //destructing
set_null(){name[0]=numst[0]='\0';}
}st[max];
//************************************
student::student(){ //initializing
set_null();
}
//*************************************
student::~student(){ //destructing
set_null();
}
//*************************************
class Enter {
private :
void save();
public :
void add();
void edit();
void search();
void print();
void len_file();
void load();
}e;
//************************************************** ****************************
void Enter::add(){
int i;
double sum=0.00;

for(i=0;i<max && st[i].name[0]!='\0';i++);

system("cls");
cout<<"\n Enter a name : "<<flush;
cin>>st[i].name;

cout<<"\n Enter a famili : "<<flush;
cin>>st[i].famili;

cout<<"\n Enter a numst : "<<flush;
cin>>st[i].numst;


for(int j=0;j<4;j++){
cout<<"\n Enter a score "<<j+1<<" : "<<flush;
cin>>st[i].score[j];
sum+=st[i].score[j];
}

st[i].ave=sum/4;

e.save();
}
//************************************************** ****************************
void Enter::edit(){
char tmp[11];
int i,flag=0;;
double sum=0.00;

system("cls");

cout<<"\n Enter a numst for edit : "<<flush;
cin>>tmp;

for(i=0;i<max && st[i].name[0]!='\0';i++)
if(strcmp(st[i].numst,tmp)==0){
cout<<"\n Enter a new name : ";
cin>>st[i].name;

cout<<"\n Enter a new famili : ";
cin>>st[i].famili;


for(int j=0;j<4;j++){
cout<<"\n Enter a new score "<<j+1<<" : "<<flush;
cin>>st[i].score[j];
sum+=st[i].score[j];
}

st[i].ave=sum/4;

cout<<"\n for continue . press key..."<<flush;
getch();
flag=1;
e.save();
}

if(flag==0){
cout<<"\n Not found . press key..."<<flush;
getch();
return ;
}
}
//************************************************** ****************************
void Enter::search(){
char tmp[15];
int i,flag=0;


system("cls");

cout<<"\n Enter a name for search : "<<flush;
cin>>tmp;

for(i=0;i<max && st[i].name[0]!='\0';i++)
if(strcmp(st[i].name,tmp)==0){
cout<<"\n Name = "<<st[i].name<<flush;

cout<<"\n Famili = "<<st[i].famili<<flush;


for(int j=0;j<4;j++)
cout<<"\n Score "<<j+1<<" = "<<st[i].score[j]<<flush;

cout<<"\n average = "<<st[i].ave<<flush;

cout<<"\n for continue . press key..."<<flush;
getch();
flag=1;
}

if(flag==0){
cout<<"\n Not found . press key..."<<flush;
getch();
return ;
}
}
//************************************************** ****************************
void Enter::print(){
int i;

system("cls");

for(i=0;i<max && st[i].name[0]!='\0';i++){

cout<<"\n Name = "<<st[i].name<<flush;

cout<<"\n Famili = "<<st[i].famili<<flush;

for(int j=0;j<4;j++)
cout<<"\n Score "<<j+1<<" = "<<st[i].score[j]<<flush;

cout<<"\n average = "<<st[i].ave<<"\n\n"<<flush;
}

cout<<"\n for continue . press key..."<<flush;
getch();

}
//************************************************** ****************************
void Enter::save(void){
register int i;
FILE *fp;

fp=fopen("c:\\st.dat","w+b");
if(!fp){
cout<<"\n Cannot open file press key ..."<<flush;
getch();
return ;
}

for(i=0;i<max && st[i].name[0]!='\0';i++)
fwrite(&st[i],sizeof(class student),1,fp);

fclose(fp);
}
//************************************************** ****************************
void Enter::load(void){
register int i;
FILE *fp;

system("cls");

fp=fopen("c:\\st.dat","rb");
if(!fp){
cout<<"\n Cannot open file press key ..."<<flush;
getch();
return ;
}

for(i=0;i<max;i++){
fread(&st[i],sizeof(class student),1,fp);
if(feof(fp)){
system("cls");
cout<<" Data loaded press a key ..."<<flush;
getch();
return ;
}
}
fclose(fp);
}
//************************************************** ****************************
void Enter::len_file(){
int handle;

system("cls");

handle=open("c:\\st.dat",O_RDONLY);

cout<<"\n File lenght in byte = "<<filelength(handle)<<" byte "<<flush;
getch();

close(handle);

}
//************************************************** ****************
void main(){
int num;

e.load();

do{
system("cls");
cout<<"\t\t Welcome\n"<<flush;
cout<<"\n 1).Add"<<flush;
cout<<"\n 2).Edit"<<flush;
cout<<"\n 3).Search"<<flush;
cout<<"\n 4).List"<<flush;
cout<<"\n 5).Length file"<<flush;
cout<<"\n 6).Exit"<<flush;
cout<<"\n\n Enter a number (1-6) :"<<flush;
num=getche()-48;
getch();

switch (num){
case 1 : e.add();
break;
case 2 : e.edit();
break;
case 3 : e.search();
break;
case 4 : e.print();
break;
case 5 : e.len_file();
break;
case 6 : exit(1);
}
}while(1);
}// end program

amin1softco
دوشنبه 09 فروردین 1389, 00:19 صبح
این برنامه هیچ مشکلی نداره فقط باید با ویژوال سی پلاس پلاس کامپایل بشه خروجیشم ضمیمه شد ........

pooria_googooli
دوشنبه 09 فروردین 1389, 01:09 صبح
ba visual compile mikonam vali be set_null(){name[0]=numst[0]='\0';}
gir mide

pooria_googooli
دوشنبه 09 فروردین 1389, 01:13 صبح
inam erroresh :
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Nima_NF
دوشنبه 09 فروردین 1389, 01:38 صبح
خوب خطا هم که داره به شما مشکل را می گه!
شما تابع set_null را تعریف کرده اید و نوع خروجی را مشخص نکرده اید، اگر خروجی ندارد باید کلمه void را قبل از set_null در تعریف قرار دهید.

amin1softco
دوشنبه 09 فروردین 1389, 07:55 صبح
بابا پس چرا به من گیر نمی ده و کامپایل میشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟

pooria_googooli
دوشنبه 09 فروردین 1389, 19:24 عصر
حالا من اگه توی همین برنامه بخوام جوری سرچ کنم که مثلا یه تیکه از اسم رو بزنم کل مشخصات یاد . بدون استفاده از توابع رشته ممکن هست همچین چیزی؟
مثلا اسم یکی با pooria ذخیره شده . من بزنم oor خودش pooria رو بیاره

pooria_googooli
دوشنبه 09 فروردین 1389, 19:42 عصر
من قبلا یه برنامه نوشته بودم که یه تیکه از آدرس رو میزدی میومد . ولی الان میخوام بدون استفاده از توابع رشته بنویسم .

Nima_NF
دوشنبه 09 فروردین 1389, 20:09 عصر
بابا پس چرا به من گیر نمی ده و کامپایل میشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟
برای اینکه مطمئن باشید نسخه کامپایلر شما با نسخه کامپایلر کاربر سوال کننده متفاوت هست. و در طی سال های مختلف استانداردهای مختلف تا حدود خاصی پیاده سازی می شوند.

pooria_googooli
دوشنبه 09 فروردین 1389, 20:28 عصر
Nima_NF (http://barnamenevis.org/forum/member.php?u=46043) میشه منو راهنمایی کنی؟

Nima_NF
سه شنبه 10 فروردین 1389, 13:47 عصر
من قبلا یه برنامه نوشته بودم که یه تیکه از آدرس رو میزدی میومد . ولی الان میخوام بدون استفاده از توابع رشته بنویسم .

منطورتان از "بدون توابع رشته" چه هست؟ بدون توابع استاندارد؟
می خواهید به شکل دستی با مقایسه تک تک کاکتر ها به نتیجه برسید؟

اگر بله با روشی مانند کد زیر (دقت کنید کامپایل نکردم و ممکن هست خطاهایی داشته باشد):



char name[10] = "test";
char name_search[10] = "est";

int cur_n = 0;
int cur_s = 0;

while(name[cur_n] != '\0')
{
if(name_search[cur_s] == name[cur_n] )
{
if(cur_s == strlen(name_search)-1)
{
// print name, it is Found.
}
cur_s++;
cur_n++;
}
else
{
cur_n++;
}
}

pooria_googooli
پنج شنبه 12 فروردین 1389, 00:29 صبح
کسی نیست که منو راهنمایی کنه؟

amin1softco
پنج شنبه 12 فروردین 1389, 02:29 صبح
آخه شما مشکلت رو دقیق نمی گی چیه؟

pooria_googooli
پنج شنبه 12 فروردین 1389, 11:32 صبح
ببین دوس عزیز سایت گوگل رو در نظر بگیر . مثلا میزنی دد تمام سایت های که توش دد هست رو میاره . دیگه فرقی نمیکنه دد باشه عدد باشه کدد باشه . اون میاره . منم اینجوری میخوام باشه . بدون استفاده از توابع استاندارد .

Nima_NF
پنج شنبه 12 فروردین 1389, 12:34 عصر
ببین دوس عزیز سایت گوگل رو در نظر بگیر . مثلا میزنی دد تمام سایت های که توش دد هست رو میاره . دیگه فرقی نمیکنه دد باشه عدد باشه کدد باشه . اون میاره . منم اینجوری میخوام باشه . بدون استفاده از توابع استاندارد .
شما این سوال را چند مرتبه پرسیدید و در پست قبلی ام با یک قطعه کد برایتان مثال زدم، حالا نمی دانم مشکل کجاست ؟!

pooria_googooli
پنج شنبه 12 فروردین 1389, 12:50 عصر
کد شما مشکلی که داره اینه که کل داده هایی که مثلا دد دارند رو پیدا نمیکنه. فقط یکیرو پیدا میکنه.

pooria_googooli
جمعه 13 فروردین 1389, 00:20 صبح
:افسرده:کمکم کنید دیگه

amin1softco
جمعه 13 فروردین 1389, 00:44 صبح
فکر کنم منظورتون همینه


#include <iostream>
#include <string>
using namespace std;
int main(){
string name[6] = {"test","sada","pest","nest","jjjyestse","st"};
char name_search[10] = "est";


for(int i=0;i<6;i++){
int cur_n = 0;
int cur_s = 0;
while(name[i][cur_n] != '\0')
{
if(name_search[cur_s] == name[i][cur_n] )
{
if(cur_s == strlen(name_search)-1)
{
// print name, it is Found.
cout<<name[i]<<endl;

}
cur_s++;
cur_n++;
}
else
{
cur_n++;
}
}
}
}

Nima_NF
جمعه 13 فروردین 1389, 00:59 صبح
کد شما مشکلی که داره اینه که کل داده هایی که مثلا دد دارند رو پیدا نمیکنه. فقط یکیرو پیدا میکنه.
شما 100 تا کلمه در یک فایل دارید، 100 مرتبه این عمل را تکرار می کنید، همه کلمه ها را تک تک با همین الگوریتم بررسی می کنید و هر کدام که درست بود پیدا می کنید!

راهنمایی: بین هر کلمه یک فضای خالی (space) قرار دارد، پس راحت می توانید فضای ها بین هر دو فضای خالی ' ' را بررسی کنید.

در هر صورت شما هم باید کمی دست به کد شوید، وقتی برنامه بررسی و پیدا کردن یک کلمه به شما داده شده، در یک حلقه دیگر با چند خط کد باید بتوانید کل فایل را بررسی کنید.

pooria_googooli
جمعه 13 فروردین 1389, 01:57 صبح
درسته . دستتون درد نکنه

pooria_googooli
جمعه 13 فروردین 1389, 19:44 عصر
برنامم داره کامل میشه . فقط یه سوال دیگه . قسمت لیست کردن بر حسب حروف الفبارو میشه اینم بدون توابع استاندارد نوشت؟

amin1softco
جمعه 13 فروردین 1389, 20:11 عصر
بله میشه شما ارزش هر کارکتر رو بوسیله تابع int بدست بیار و مقایسه کن....

pooria_googooli
جمعه 13 فروردین 1389, 21:19 عصر
میشه یه نمونه کد بدید ؟

amin1softco
جمعه 13 فروردین 1389, 21:36 عصر
یه چیزی تو این مایه ها می شه....


#include <iostream>
#include <string>

using namespace std;
int lens(string a){
int b=0;
for (int i=0;i<a.length();i++)
b+=int(a[i]);
return b;
}
int main(int argc, char* argv[])
{
string s[10]={"aa","AA","oo","ma","shoma","ishan"};

cout<<lens(s[0])<<" - "<<lens(s[1])<<endl;
if(lens(s[0])>lens(s[1]))
cout <<"s0 > s1"<<endl;
else
cout <<"s0 < s1"<<endl;

return 0;
}

pooria_googooli
جمعه 13 فروردین 1389, 21:46 عصر
بسیار مرسی