Programmation en C - C - Programmation
Marsh Posté le 08-02-2012 à 13:00:25
Un truc dans ce gout la devrait aller, non?
Code :
|
avec bien sur abs défini comme
unsigned long abs(long i) { return (i<0)?-i:i;}
A+,
Marsh Posté le 08-02-2012 à 23:20:16
gilou a écrit : Un truc dans ce gout la devrait aller, non?
|
merci d’avoir répondu aussi vite.
voici le code avec les rajouts recommandés :
Code :
|
cependant j’ai pas mal de messages d’erreurs :
NormeMatriceInfinie.c: In function ‘main’:
NormeMatriceInfinie.c:11:16: erreur: conflicting types for ‘abs’
NormeMatriceInfinie.c:18:20: erreur: subscripted value is neither array nor pointer nor vector
NormeMatriceInfinie.c:21:6: erreur: expected ‘(’ before ‘max’
NormeMatriceInfinie.c:21:10: erreur: called object ‘max’ is not a function
NormeMatriceInfinie.c:22:4: erreur: expected ‘;’ before ‘{’ token
NormeMatriceInfinie.c:12:11: attention : variable ‘A’ set but not used [-Wunused-but-set-variable]
NormeMatriceInfinie.c: Hors de toute fonction :
NormeMatriceInfinie.c:29:1: erreur: expected identifier or ‘(’ before ‘return’
NormeMatriceInfinie.c: In function ‘main’:
NormeMatriceInfinie.c:28:1: attention : contrôle a atteint la fin non void de la fonction [-Wreturn-type]
merci d'avance
Marsh Posté le 08-02-2012 à 23:37:16
Je t'ai indiqué comment faire, je t'ai certes pas donné du code que tu pouvais employer sans l'adapter à tes besoins.
Si tu comprends ce qui est fait dans ce que j'ai écrit, tu pourras sans peine corriger ce qui doit l'être au lieu de bêtement copier coller.
Rien qu'a lire ton énoncé, ça a l'air faux ce que tu as écrit:
char Matrice;
si ta matrice est une matrice de nombres réels, cette déclaration va surement pas aller.
A+,
Marsh Posté le 09-02-2012 à 11:00:50
mais le char Matrice est là pour appeler la matrice A.
je ne suis début dans le code et j’ai beaucoup de mal à comprendre ce que veut dire certaine ligne.
Marsh Posté le 09-02-2012 à 13:20:34
lecycliste60 a écrit :
|
Non, tu t'es mal servi de ce qu'à dit Gilou, abs() est une fonction, qui renvoi un unsigned long et prend en paramètre un long, tu dois donc faire une nouvelle fonction avant ton main, et essais de la comprendre au lieu de juste copier-coller
Marsh Posté le 09-02-2012 à 15:20:25
lecycliste60 a écrit : mais le char Matrice est là pour appeler la matrice A. |
Ben alors si c'est A ta matrice, c'est elle qu'il faut employer dans mon code, hein.
Et si tu travailles avec des floats et pas des ints ou des longs, il faut aussi remplacer les types employés dans mon code.
A+,
Marsh Posté le 09-02-2012 à 23:37:42
gilou a écrit : Ben alors si c'est A ta matrice, c'est elle qu'il faut employer dans mon code, hein. |
vous parler dans un autre langage que moi...
je suis un débutant.
je reformule ma question.
je sais ce que je dois faire pour arriver à la fonction voulu : faire la somme de chaque et ligne et ressortir la valeur max. soit un réel.
cependant je ne connais pas les outils et fonction pour y arriver en C.
sachant que des bibliothèques me sont imposées de lectureMATfloat
code source :
Code :
|
je ne suis donc pas libre d’utiliser n’importe qu’elle fonction.
Marsh Posté le 10-02-2012 à 01:07:58
Bon ben déjà, il nous faudrait la définition du type MATfloat pour qu’on sache exactement la structure de cet objet.
Bref, il y a quoi dans TypedefMatrice.h
Citation : cependant je ne connais pas les outils et fonction pour y arriver en C. |
Manifestement, le but de votre projet est de vous pousser à en apprendre les bases.
Citation : je sais ce que je dois faire pour arriver à la fonction voulu : faire la somme de chaque et ligne et ressortir la valeur max. soit un réel. |
Déjà si vous arrivez pas à énoncer ça clairement en français, vous aller avoir des difficultés à l'énoncer en un autre langage, fut il informatique.
A+,
Marsh Posté le 10-02-2012 à 10:24:50
gilou a écrit : Bon ben déjà, il nous faudrait la définition du type MATfloat pour qu’on sache exactement la structure de cet objet.
Manifestement, le but de votre projet est de vous pousser à en apprendre les bases.
Déjà si vous arrivez pas à énoncer ça clairement en français, vous aller avoir des difficultés à l'énoncer en un autre langage, fut il informatique. |
Bonjour,
Voici le Code du TypedefMatrice.h :
Code :
|
La norme d’une Matrice infinie est bien la valeur maximale de la norme de chaque ligne?
Marsh Posté le 10-02-2012 à 12:25:04
Citation : typedef struct |
Donc à priori, c'est pas un tableau à deux dimensions.
LectureMATfloat alloue Mat comment? un malloc par ligne, un malloc global?
A+,
Marsh Posté le 16-02-2012 à 10:41:07
gilou a écrit :
Donc à priori, c'est pas un tableau à deux dimensions. |
voici le code de LectureMATfloat :
Code :
|
Merci
A +
Marsh Posté le 16-02-2012 à 12:19:53
Non, ce n'est pas le code de LectureMATfloat, mais l'appel à LectureMATfloat, ce qui ne me dit absolument pas comment LectureMATfloat procède, en particulier pour gérer l'allocation de mémoire de A.
Déjà rien que cette ligne:
A=LectureMATfloat("mat1.dat",&NomMatrice);
ça me semble un peu douteux, on procède en, général par pointeurs en retour de fonction et non pas en copie de structure, quand on fait du C. Bon, c'est pas interdit, mais pas particulièrement efficace.
A+,
Marsh Posté le 16-02-2012 à 23:32:53
gilou a écrit : Non, ce n'est pas le code de LectureMATfloat, mais l'appel à LectureMATfloat, ce qui ne me dit absolument pas comment LectureMATfloat procède, en particulier pour gérer l'allocation de mémoire de A. |
Ca y est j’ai réussi !!!
voici le code :
[cpp]#include <stdio.h>
#include <stdlib.h>
#include "LectureMatrice.h"
#include "NormeMatriceInfinie.h"
int main ()
{
int i;/*nombre de colonne*/
int j;/*nombre de ligne*/
float S=0;/*S est la somme des lignes*/
float M=0;/*M est la valeur maximun des sommes des lignes*/
char Matrice;
MATfloat A;
A=LectureMATfloat("A.dat",&Matrice);/*Lecture de la matrice désignée par l'utilisateur*/
for(i=0;i<A.NbrLig;i++)/*boucle de la somme des lignes*/
{
for(j=0;j<A.NbrCol;j++)
{
S=S+A.Mat[i][j];
}
if (S>M) /*Si la somme de la ligne i+1 est supérieure à celle d'avant alors la valeur est enregistrer dans M*/
(M=S);
}
printf ("La Valeur de la norme Infinie de la Matrice est %f\n", M);
return S;
}/cpp]
Merci Gilou
Marsh Posté le 17-02-2012 à 01:29:47
Ce que tu fais compile, mais c'est pas la norme infinie...
Suffit de prendre la matrice 1x1 (-1) pour voir que ton calcul donne -1, et une valeur négative pour une norme, euh...
D'autre part,
int i;/*nombre de colonne*/
...
for(i=0;i<A.NbrLig;i++)/*boucle de la somme des lignes*/
et
return S;
S est un float, et main retourne un int, bref, c'est pas terrible.
Bref, tu y es presque, mais pas tout à fait.
(Bon je vois que j'avais pas compris ta définition de norme infinie au début du topic, j'avais compris à ton énoncé que c'était la somme du max en valeur absolue pour chaque ligne, alors que c'est le max des somme en valeur absolue pour chaque ligne)
Spoiler : #include <stdio.h> |
A+,
Marsh Posté le 20-02-2012 à 17:55:44
gilou a écrit : Ce que tu fais compile, mais c'est pas la norme infinie...
|
j’ai essayé comme ça :
Code :
|
ça fonctionne. par contre je viens seulement de voir en répondant à ton message le spoiler. je vais étudier ça.
Merci
A+
Marsh Posté le 08-02-2012 à 11:28:56
Bonjour,
je dois pour un projet numérique réaliser la fonction norme d’une Matrice Infinie.
|||A|||∞ = maxi(∑nj=1 |ai,j|)
le but étant de faire la somme de chaque ligne de la matrice et de ressortir la valeur maximale.
pour cela, j’ai créé deux fichier header
LectureMatrice.h
NormeMatriceInfinie.h
et enfin un .c :
NormeInfinieMatrice.c
je n’arrive pas à créer la fonction somme de chaque ligne et le max des sommes.
merci d’avance pour votre aide.
Mathieu