Bonjour à tous!
Actuellement avant la fin du mois , je dois finir ce devoir très important ( concernant mon dîplome) et comme je suis une débutante , j'aurai voulu qu'on m'explique sur ce cours! voilà
merci de votre compréhension !
J'ai vraiment besoin d'aide car je suis tout seule à faire ça et comme j'ai des autres cours à faire !
PS: J'ai bossais un peut actuellement sur ce cours et de + j'ai fais des commentaires pour mieux que vous comprenez le cours! j'aimerais savoir ce qui me manque?
[i]#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
class Item
{
public:
Item()
{
cout<<'+';
}
virtual ~Item()
{
cout<<'-';
}
char afficheCarte;
int affiche();
};
typedef unsigned int Adresse;
typedef unsigned int Taille;
const Adresse NAA = UINT_MAX;
/*La classe Item représente les éléments de base contenus dans la zone
mémoire simulée; le type Adresse représentera les adresses dans cette zone
mémoire, et le type Taille sera utilisé lui pour représenter des quantités
de cet espace mémoire.Finalement, la constance NAA(=<<pas une adresse>>),
devant être utilisée pour représenter une adresse invalide(équivalent du NULL de c++).
2) Prototype et définissez la classe Mémoire , de sorte que:
-L'on puisse instancier 'une mémoire' en précisant à la construction
la taile de cette mémoie(Item étant l'unité de mesure).
-La zone de mémoire soit somilée par un tableau de taille fixe (d'Items), mais
alloué dynamiquement(voir les remarques ci-après pour l'allocation
et la libération dynamique de tableaux).Par ailleurs, l'utilisation de la classe
ne devra pas provoquer de fuite mémoire(i.e. toute la mémoire 'réelle'
allouée doit être restituée).
-La réservation d'une zone de la mémoire simulée par la classe
se fasse au moyen de la méthone:
Adresse alloue(Taille taille);
qui, pour autant que la mémoire à disposition le permette, réserve
une zone contigÜe de taille (taille),et retournera l'adresse de départ
de cette zone, ou NNA dans le cas ou la demande d'allocation ne peut être satisfaite.
-La libération d'une zone de la mémoire précedemment allouée se fasse au moyen
de la méthode:
void libere(Adresse adresse);
Dans le cas ou l'argument adresse est invalide(hors bornes), la méthode ne fera rien.
-L'on puisse dupliquer une instance de Mémoire, et travailler avec les deux copies de manière
indépendante.
Pour connaître à toute instant la disponibilité de la mémoire, et permettre une
libération de zone en ne précisant que son adresse , il est nécessaire
de mémoriser une information aditionnelle, représentant l'occupation de
la mémoire.
-Une technique (totalement prohibitive, mais simple à réaliser) pour cela consite
à disposer d'un (second) tableau d'entiers (appelé par la suite map), de même dimension
que la mémoire, et de l'utiliser pour <<cartographier>> la mémoire.
-map indique quel est le statue de l'adresse i de la mémoire.
-la valeur 0 sera utilisée pour désigner une adresse libre
-une valeur m différent de 0 indiquera que la position mémoire correspondant
à l'adresse i est attribuée , et qu'elle l'à été lors de la mième réservation.
-Ainsi, lors d'une réservation, il suffira de chercher dans la 'carte'
une zone suffisamment grande non encore réservée, et lors d'une libération,
il suffira de marquer livre toutes les adresses (contigues) supérieurs ou égales
à celle précisée en argument , pour lesquelles le no de réservation est le même
que celui de l'adresse précisée.*/
//03)Ajouter à Mémoire la méthode
void afficheCarte(ostream& os, unsigned int nb);
//04: Tester finalement votre programme, en utilisant la fonction principale
//suivante(également fournie dans le fichier d'origine):
void main()
{
int Memoire;
cout << " Creaction de M1 : " ;
Memoire m1(20);
cout << endl;
Adresse a1 = m1.alloue(5); cout << " A1(5) =" <<a1<<endl;
Adresse a2 = m1.alloue(1; cout << " A2(1 =" <<a2<<endl;
Adresse a3 = m1.alloue(15); cout << " A3(15) =" <<a3<<endl;
Adresse a4 = m1.alloue(1); cout << " A4(1) =" <<a4<<endl;
m1.libere(a2);
cout <<endl<<"Etat de M1 :"<<endl;
m1.afficheCarte(cout,10);
{
cout << endl << "Duplication de M1 : " ;
Memoire m2(m1);cout << endl;
cout << " Liberation de M1("<<a1<<')'<< endl;
m1.libere(a1);
cout << " Liberation de M2("<<a3<<')'<< endl;
m2.libere(a3);
a2 = m1.alloue(2); cout << " A2(2)=<<a2<<endl;
a4 = m2.alloue(2); cout << " A4(2)=<<a4<<endl;
cout<<endl<<"Etat de M2 : " <<endl;
m2.afficheCarte(cout,10);
cout << endl <<"Destruction de M2 : " ;
}
cout << endl << "Etat de M1 : " << endl;
m1.afficheCarte(cout,10);
cout << endl << " Destruction de M1 : " ;
}
PS: Si une personne , connait le c++! J'aimerais qui me contacte actuellement car j'aimerai vraiment de l'aide merci bcp !