1

Bon je sors d'un examen de C, et une question a prete a polemique :/

Soit le type Entier defini de la maniere suivante :

typedef short Entier[NC+1];

Une variable du type Entier est donc un tableau de NC+1 elements.

Soit ceci :

Entier t;

Le signe de cet entier est stocke dans la case [0]. Les autres cases contiennent une partie d'un nombre en Base 100. Resultat pour le nombre 1234567890 on a donc :

{0,90,78,56,34,12}

Les cases qui ne sont pas remplies restent a zero. Vous suivez jusque-la triso ?

La question la voici :
Definir une fonction add_abs qui, etant donne deux nombres representes dans le type Entier, calcule la somme des valeurs absolues de ces deux nombres dans le type Entier. Si le nombre de chiffres de la somme est superieur a NC, on ne conservera dans le resultat que les NC chiffres de faible poids...


J'ai fait un truc dans ce genre, mais mes potes me sont tombes dessus parce que j'ai pas fait ce qu'il fallait faire :

void add_abs(Entier a[NC+1], Entier b[NC+1], Entier *c[NC+1])
{int i;
for (i=1; i<=NC; i++)
{
*c[i]=a[i]+b[i];
}
for(i=1; i<=(NC-1); i++)
{
  if (*c[i]>=100)
  {
  *c[i]=*c[i]%100;
  *c[i+1]++;
  }
}
*c[NC]=*c[NC]%100;
}


Et mes potes soutiennent mordicus que c'est faux... Vous auriez fait quoi vous ? :/

2

L'idée générale m'a l'air juste, par contre tu prends en paramètre un "Entier [NC+1]", autrement dit un tableau de tableaux de shorts ^^ Donc dans ces conditions a[i] n'est pas du tout ce que tu penses, c'est un Entier complet à lui tout seul... Il faut déclarer "Entier a" ou "short a[NC+1]", mais pas un mélange des deux sorry (et à mon avis c'est *vraiment* pas une bonne idée de passer des tableaux en paramètres, c'est souvent plus logique de passer simplement un pointeur : donc ça donnerait simplement "short *a")

De même que tu ne veux pas changer l'adresse du tableau du résultat "c", mais seulement son contenu : donc il doit donc être de type "Entier" lui aussi et pas "Entier *" (du moment que tu as l'adresse de ton tableau, tu peux lire ou écrire dedans...) Et évidemment dans ces conditions il faut virer toutes les * ^^

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

3

Argh.
Sachant que tous mes en-tetes contiennent des Entier [machin], je suis deja note sur moins que 20 couic

4

Oué manifestement t'as des problèmes de syntaxe / compréhension sur le fonctionnement des tableaux, pointeurs, passages d'arguments et leurs interactions.
Par contre l'algorithme a l'air bon (le traitement en deux passes est original, mais pourquoi pas).

Donc reste à savoir si c'est un contrôle portant plus sur le langage ou plus sur l'algorithme.