Προς το περιεχόμενο

Εργασία στη C++


xmouts

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν επειδή είμαι και εγώ από την ίδια σχολή, αλλά μεγαλύτερο εξάμηνο, θα ήθελα να σου πω, ότι εάν καταφεύγετε στα forum για να σας λύσουν ασκήσεις κυρίως πρώτου εξαμήνου, τότε από το 3ο και 4ο που τα πράγματα θα γίνουν σαφώς πιο δύσκολα τότε τι θα κάνατε ? Κάθε τι στην αρχή είναι δύσκολο, αλλά με επιμονή και δουλειά κάτι μπορείς να καταφέρεις και φυσικά για τα υπόλοιπα είμαστε εμείς εδώ. Προσπάθησε λοιπόν να ξεκινήσεις το project και φυσικά να διαβάσεις τις ασκήσεις του κ.Σάββα, οι οποίες είναι πάρα πολύ καλές και καλύπτουν όλη την ύλη σας. Στα λέω πάντα φιλικά και με γνώμονα ότι και εγώ είμαι στην ίδια σχολή και ότι πέρασα από εκεί που βρίσκεσαι εσύ τώρα

Δημοσ.

:P

>#if _HAS_CPP0X
#include <tchar.h>
#include <string>
#include <functional>
#include <iostream>
template <class T>
struct Node
{
int _isfree;
T    _obj;
};

template<class T>
Node<T> Add(FILE* file,Node<T> node)
{
Node<T> tmp;
node._isfree = false;
fseek(file,0,SEEK_SET);
bool added = false;
while(fread(&tmp,sizeof(tmp),1,file) != 0)
{
	if(tmp._isfree)
	{
		fseek(file,ftell(file)-sizeof(tmp),SEEK_SET);
		fwrite(&node,sizeof(node),1,file);
		return node;
	}
}
fseek(file,0,SEEK_END);
fwrite(&node,sizeof(node),1,file);
return node;
}
template<class T>
int Delete(FILE* file, std::function<bool(Node<T>&)> _where)
{
Node<T> tmp;
fseek(file,0,SEEK_SET);
int deleted =0;
while(fread(&tmp,sizeof(tmp),1,file)!= 0)
{
	if(_where(tmp))
	{
		int i = ftell(file)-sizeof(tmp);
		fseek(file,i,SEEK_SET);
		tmp._isfree  = true;
		fwrite(&tmp,sizeof(tmp),1,file);
		fseek(file,i+sizeof(tmp),SEEK_SET);
		deleted++;
	}
}
return deleted;

}
template< class T> 
void ForEach(FILE* file, std::function<void(Node<T>)> f)
{
fseek(file,0,SEEK_SET);
Node<T> tmp;
while(fread(&tmp,sizeof(tmp),1,file) != 0)
{
	if(!tmp._isfree)
		f(tmp);
}
}
struct person
{
char name[30];
int age;
};
typedef Node<person> MyNode;

int _tmain(int argc, _TCHAR* argv[])
{
FILE* f = fopen("C:\\file.txt","w+");

std::cout<<"Adding 4 person"<<std::endl<<std::endl;
MyNode n[4] = {
	{1, { "Pappas" , 20} },
	{1, { "Tsoutsou" , 25} },
	{1, { "kiki" , 18} },
	{1, { "mpoulis" , 80} },
};
Add(f,n[0]);
Add(f,n[1]);
Add(f,n[2]);
Add(f,n[3]);
std::cout<<"ektiposi apotelesmaton"<<std::endl<<std::endl;
ForEach<person>(f,[](MyNode& node)
{
	std::cout<<"Name:"<<node._obj.name<<"\t\t\tage:"<<node._obj.age<<std::endl;
});
std::cout<<"Anazitisi gerou"<<std::endl<<std::endl;
int max = 0;
ForEach<person>(f,[&max](MyNode& node)
{
	if(node._obj.age >max)
		max = node._obj.age;
});
std::cout<<"O geros einai "<<max<<"xronon"<<std::endl<<"Diagrafi tou papou"<<std::endl<<std::endl;
Delete<person>(f,[max] (MyNode &n)->bool
{
	if(n._obj.age == max)
		return true;
	else
		return false;
});
std::cout<<"ektiposi apotelesmaton"<<std::endl<<std::endl;
ForEach<person>(f,[](MyNode& node)
{
	std::cout<<"Name:"<<node._obj.name<<"\t\t\tage:"<<node._obj.age<<std::endl;
});
std::cout<<"bazoume allous 5"<<std::endl<<std::endl;
MyNode n1[5] = {
{1, { "Tsontas" , 20} },
{1, { "Tenistas" , 25} },
{1, { "Orniopoulos" , 18} },
{1, { "popy" , 80} },
{1, { "tzim" , 80} }
};
Add(f,n1[0]);
Add(f,n1[1]);
Add(f,n1[2]);
Add(f,n1[3]);
Add(f,n1[4]);
std::cout<<"ektiposi apotelesmaton"<<std::endl<<std::endl;
ForEach<person>(f,[](MyNode& node)
{
	std::cout<<"Name:"<<node._obj.name<<"\t\t\tage:"<<node._obj.age<<std::endl;
});
std::cout<<"diagrafi afton pou exoun mikra onomata"<<std::endl<<std::endl;
Delete<person>(f,[](MyNode& node)->bool
{
	if(strlen(node._obj.name) <6)
		return true;
	return false;
});
std::cout<<"ektiposi apotelesmaton"<<std::endl<<std::endl;
ForEach<person>(f,[](MyNode& node)
{
	std::cout<<"Name:"<<node._obj.name<<"\t\t\tage:"<<node._obj.age<<std::endl;
});
fclose(f);
return 0;
}
#else
#error "Efages paketo"
#endif

out

Adding 4 person

 

ektiposi apotelesmaton

 

Name:Pappas age:20

Name:Tsoutsou age:25

Name:kiki age:18

Name:mpoulis age:80

Anazitisi gerou

 

O geros einai 80xronon

Diagrafi tou papou

 

ektiposi apotelesmaton

 

Name:Pappas age:20

Name:Tsoutsou age:25

Name:kiki age:18

bazoume allous 5

 

ektiposi apotelesmaton

 

Name:Pappas age:20

Name:Tsoutsou age:25

Name:kiki age:18

Name:Tsontas age:20

Name:Tenistas age:25

Name:Orniopoulos age:18

Name:popy age:80

Name:tzim age:80

diagrafi afton pou exoun mikra onomata

 

ektiposi apotelesmaton

 

Name:Pappas age:20

Name:Tsoutsou age:25

Name:Tsontas age:20

Name:Tenistas age:25

Name:Orniopoulos age:18

Φερτο στα μετρα σου.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...