A French solution for Challenge 19


#1

file Action.h

[code]#import <Foundation/Foundation.h>

@interface Action : NSObject
{
float prixAchatAction;
float prixActuelAction;
int nbActions;
}

@property float prixAchatAction;
@property float prixActuelAction;
@property int nbActions;

-(float) coutAchatEnEuros;
-(float) valeurActuelEnEuros;

@end[/code]

file Action.m

[code]#import “Action.h”

@implementation Action

@synthesize prixAchatAction;
@synthesize prixActuelAction;
@synthesize nbActions;

-(float) coutAchatEnEuros
{
return [self prixAchatAction] * [self nbActions];
}

  • (float) valeurActuelEnEuros
    {
    return [self prixActuelAction] * [self nbActions];
    }

@end
[/code]

file ActionEtranger.h

[code]#import “Action.h”

@interface ActionEtranger : Action
{
float txConversion;
}

@property float txConversion;

@end

[/code]

file ActionEtranger.m

[code]#import <Foundation/Foundation.h>
#import “ActionEtranger.h”

#import “Action.h”

@implementation ActionEtranger

@synthesize txConversion;

-(float) coutAchatEnEuros
{
float c = [super coutAchatEnEuros];
return c * [self txConversion];
}

  • (float) valeurActuelEnEuros
    {
    float v = [super valeurActuelEnEuros];
    return v * [self txConversion];

}
@end
[/code]

file Portfolio.h

[code]#import <Foundation/Foundation.h>
@class Action;

@interface Portfolio : NSObject
{
unsigned int idPortfolio;
NSMutableArray *titres;
}

@property unsigned int idPortfolio;
@property (strong) NSMutableArray *titres;

  • (void)ajouterAction:(Action *)a;
  • (float)valeurDuPortfolio;

@end
[/code]

file Portfolio.m

[code]#import “Portfolio.h”
#import “Action.h”
#import “ActionEtranger.h”

@implementation Portfolio

@synthesize idPortfolio;
@synthesize titres;

  • (NSString *) description
    {
    NSString *aNewDescription = [NSString stringWithFormat:@"<Portofolio %d : valeur %.2f>", [self idPortfolio], [self valeurDuPortfolio]];
    return aNewDescription;
    }

  • (void)ajouterAction:(Action *)a;
    {
    //Le tableau des action existe-il, est-il nil ?
    if (!(titres)) {
    // Créer le tableau
    titres = [[NSMutableArray alloc] init];
    }
    [titres addObject:a];
    }

  • (float)valeurDuPortfolio;
    {
    // Additionner les valeurs des matériels
    float somme = 0;
    for (ActionEtranger *a in titres) {
    somme += [a valeurActuelEnEuros];
    }
    return somme;

}

@end
[/code]

file main.m

#import <Foundation/Foundation.h>
#import "Action.h"
#import "ActionEtranger.h"
#import "Portfolio.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        // Création d'un tableau de portefeuille
        NSMutableArray *lesPortfolios = [[NSMutableArray alloc] init];
        
        
        // Création de 5 Portefeuilles d'action
        for (int i = 1; i < 6; i++) {
            
            // Mettre les actions dans le portfolio
            Portfolio *newPortfolio = [[Portfolio alloc] init];
            [newPortfolio setIdPortfolio:i];
        
            Action *newAction1 = [[Action alloc] init];
        
            [newAction1 setPrixAchatAction:2.30];
            [newAction1 setPrixActuelAction:10.0];
            [newAction1 setNbActions:10 * i];
            [newPortfolio ajouterAction:newAction1];
            
            Action *newAction2 = [[Action alloc] init];
            [newAction2 setPrixAchatAction:12.19];
            [newAction2 setPrixActuelAction:10.56 + i];
            [newAction2 setNbActions:90];
            [newPortfolio ajouterAction:newAction2];
            
            Action *newAction3 = [[Action alloc] init];
            [newAction3 setPrixAchatAction:45.10];
            [newAction3 setPrixActuelAction:49.51 - i];
            [newAction3 setNbActions:210];
            [newPortfolio ajouterAction:newAction3];

            ActionEtranger *newActionEtranger1 = [[ActionEtranger alloc] init];
            [newActionEtranger1 setPrixAchatAction:2.30];
            [newActionEtranger1 setPrixActuelAction:4.5];
            [newActionEtranger1 setNbActions:40 / i];
            [newActionEtranger1 setTxConversion:2];
            [newPortfolio ajouterAction:newActionEtranger1];

            ActionEtranger *newActionEtranger2 = [[ActionEtranger alloc] init];
            [newActionEtranger2 setPrixAchatAction:10.00];
            [newActionEtranger2 setPrixActuelAction:20.00];
            [newActionEtranger2 setNbActions:100];
            [newActionEtranger2 setTxConversion:2.00 * i];
            [newPortfolio ajouterAction:newActionEtranger2];
            
            [lesPortfolios addObject:newPortfolio];
            
        }
        for (Portfolio *p in lesPortfolios) {
            for (ActionEtranger *a in [p titres]) {
                NSLog (@"Action en portefeuille %.2f", [a valeurActuelEnEuros]);
            }
            NSLog(@"%@\n\n", p);
        }
        
    }
    return 0;
}