PIPS
ps_to_fic_pip.c File Reference
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "genC.h"
#include "misc.h"
#include "text.h"
#include "text-util.h"
#include "ri.h"
#include "ri-util.h"
#include "paf_ri.h"
#include "pip.h"
+ Include dependency graph for ps_to_fic_pip.c:

Go to the source code of this file.

Macros

#define PIP_IN_FILE   "pip_in"
 Name : ps_to_fic_pip.c Package : pip Author : F. More...
 
#define OK   0
 
#define EGALITE   1
 
#define INEGALITE   2
 
#define ERREUR_TAILLE   3
 

Functions

void ecrit_commentaire2 (char *commentaire, Psysteme p_sys_tab, int nb_var, FILE *nom_fichier)
 Name: ecrit_commentaire2
More...
 
void ecrit_ligne (Pvecteur p_vect, Pbase p_sys_base, FILE *nom_fichier, int nb_var, int eg_ineg)
 Name: ecrit_ligne
More...
 
int ecrit_tableau2 (Psysteme p_syst_tab, int nb_var, FILE *nom_fichier)
 Name: ecrit_tableau2. More...
 
int ecrit_probleme2 (char *commentaire, Psysteme p_syst_tab, Psysteme p_syst_cont, int nb_var, int bg, int nb_var_cont)
 Name: ecrit_probleme2. More...
 

Macro Definition Documentation

◆ EGALITE

#define EGALITE   1

Definition at line 55 of file ps_to_fic_pip.c.

◆ ERREUR_TAILLE

#define ERREUR_TAILLE   3

Definition at line 57 of file ps_to_fic_pip.c.

◆ INEGALITE

#define INEGALITE   2

Definition at line 56 of file ps_to_fic_pip.c.

◆ OK

#define OK   0

Definition at line 54 of file ps_to_fic_pip.c.

◆ PIP_IN_FILE

#define PIP_IN_FILE   "pip_in"

Name : ps_to_fic_pip.c Package : pip Author : F.

Dumontet Date : july 93 Historic :

  • 18 oct 93. L'ordre dans le vecteur n'est plus important. AP

Documents:

Comments :

Definition at line 52 of file ps_to_fic_pip.c.

Function Documentation

◆ ecrit_commentaire2()

void ecrit_commentaire2 ( char *  commentaire,
Psysteme  p_sys_tab,
int  nb_var,
FILE *  nom_fichier 
)

Name: ecrit_commentaire2


Parameters: commentaire: le texte du commentaire.
p_sys_tab: le Psysteme traite. Contient le nom des variables
et des parametres.
nb_var: discrimine les variables des parametres
Result: void
Aims: ecrire le commentaire et le nom des variables et des parametres.
Author: F Dumontet
Date of last change:


Definition at line 78 of file ps_to_fic_pip.c.

85 {
86  int aux;
87  Pvecteur p_vecteur_aux;
88 
89  fprintf(nom_fichier, "(%s (variables", commentaire);
90 
91  p_vecteur_aux = (Pvecteur) p_sys_tab->base;
92  for (aux = 1; aux <= nb_var; aux++) {
93  fprintf(nom_fichier, " %s",
94  (char *) entity_local_name(
95  (entity) p_vecteur_aux->var));
96  p_vecteur_aux = p_vecteur_aux->succ;
97  }
98 /*
99  for (aux = 1; aux <= nb_var; aux++) {
100  fprintf(nom_fichier, " %s", (char *) p_vecteur_aux->var);
101  p_vecteur_aux = p_vecteur_aux->succ;
102  }
103 */
104  fprintf(nom_fichier, ") (parametres");
105  while (p_vecteur_aux != NULL) {
106  fprintf(nom_fichier, " %s",
107  (char *) entity_local_name(
108  (entity) p_vecteur_aux->var));
109  p_vecteur_aux = p_vecteur_aux->succ;
110  }
111 /*
112  while (p_vecteur_aux != NULL) {
113  fprintf(nom_fichier, " %s", (char *) p_vecteur_aux->var);
114  p_vecteur_aux = p_vecteur_aux->succ;
115  }
116 */
117 
118  fprintf(nom_fichier, "))\n");
119  return;
120 }
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
int aux
Definition: solpip.c:104
Pbase base
Definition: sc-local.h:75
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
Variable var
Definition: vecteur-local.h:90
struct Svecteur * succ
Definition: vecteur-local.h:92
struct Svecteur * Pvecteur

References aux, Ssysteme::base, entity_local_name(), fprintf(), Svecteur::succ, and Svecteur::var.

Referenced by ecrit_probleme2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ecrit_ligne()

void ecrit_ligne ( Pvecteur  p_vect,
Pbase  p_sys_base,
FILE *  nom_fichier,
int  nb_var,
int  eg_ineg 
)

Name: ecrit_ligne


Parameters: p_vect: le vecteur a ecrire. Il doit PAS etre ordonne.
p_sys_base: vecteur de base permet de connaitre l'ordre des
variables et de rajouter des 0 pour celles qui ne
sont pas dans la matrice creuse.
nom_ficher: pointeur sur le fichier destination.
nb_var: permet de differencier les "nbvar" variables des
parametres dans la base.
eg_ineg: permet de distinger le cas dans lequel le vecteur
represente une egalite de celui ou il represente une
une inegalite.
Result: void
Aims: ecrire un vecteur sur une ligne. Le vecteur doit etre ordonne
Author: F Dumontet
Date of last change: AP, 18 oct 93. L'ordre dans le vecteur n'est plus
important.


Compteur de variables deja vues

Pas de blanc juste apres le #[

Definition at line 148 of file ps_to_fic_pip.c.

153 {
154  Pvecteur p_vect_aux = (Pvecteur) p_sys_base;
155  int aux = 0, /* Compteur de variables deja vues */
156  first = 1; /* Pas de blanc juste apres le #[ */
157 
158  fprintf(nom_fichier, "#[");
159 
160  for( ; (p_vect_aux != NULL) || (aux <= nb_var) ; aux++) {
161  int val;
162 
163  if(aux == nb_var)
164  val = (int) vect_coeff(TCST, p_vect);
165  else {
166  val = (int) vect_coeff(p_vect_aux->var, p_vect);
167  p_vect_aux = p_vect_aux->succ;
168  }
169 
170  if(first)
171  first = 0;
172  else
173  fprintf(nom_fichier, " ");
174 
175  if(eg_ineg == EGALITE)
176  fprintf(nom_fichier, "%i", val);
177  else
178  fprintf(nom_fichier, "%i", -val);
179  }
180  fprintf(nom_fichier, "]\n");
181 }
void const char const char const int
#define EGALITE
Definition: ps_to_fic_pip.c:55
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

References aux, EGALITE, fprintf(), int, Svecteur::succ, TCST, Svecteur::var, and vect_coeff().

Referenced by ecrit_tableau2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ecrit_probleme2()

int ecrit_probleme2 ( char *  commentaire,
Psysteme  p_syst_tab,
Psysteme  p_syst_cont,
int  nb_var,
int  bg,
int  nb_var_cont 
)

Name: ecrit_probleme2.



Parameters: commentaire: chaine de caracteres contenant le texte du
commentaire.
p_syst_tab: Psysteme devant etre resolu (il doit etre
ordonne).
p_syst_cont: Psysteme contenant le contexte.
nb_var: le nombre de variables dans p_syst_tab.
bg: numero d'ordre dans p_syst_tab du parametre devant etre
considere comme infiniment grand;
nb_var_cont: nbr de variables du contexte.
Result: entier indiquant si l'ecriture s'est bien deroulee.
Aims: ecrire dans un fichier, au format d'entree reconnu par pip un
probleme de programmation lineaire en nombre entiers. Il nous faut
deux Psystemes. Le premier contient les variables, les parametres et les constantes (dans l'ordre). Le second contient le contexte avec
dans l'ordre ses variables et les constantes. L'odre est celui de la base de chaque Psysteme. La distinction entre variables et parametres est effectuee au moyen de nb_var qui indique que les nb_var 1eres
termes sont des variables.
Author: F Dumontet
Date of last change:


le nombre de variables

le nombre de parametres

le nombre de contraintes du systeme

le numero de la variable consideree

comme infiniment grande pour le max

l'indicateur de solution entiere.

ecriture du systeme a resoudre

ecriture du contexte

Definition at line 270 of file ps_to_fic_pip.c.

275 {
276  Pvecteur p_vecteur_aux;
277  FILE *nom_fichier;
278  int aux, aux1,nb_par;
279 
280  nom_fichier = fopen(PIP_IN_FILE, "w");
281  if (nom_fichier == NULL)
282  return errno;
283  fprintf(nom_fichier,"(");
284  ecrit_commentaire2(commentaire, p_syst_tab, nb_var, nom_fichier);
285  /* le nombre de variables */
286  fprintf(nom_fichier, "%1d", nb_var);
287  p_vecteur_aux = (Pvecteur) p_syst_tab->base;
288  aux = 0;
289  nb_par = p_syst_tab->dimension-nb_var;
290  /* le nombre de parametres */
291  fprintf(nom_fichier, " %1d", nb_par);
292  aux1 = (p_syst_tab->nb_eq * 2) + p_syst_tab->nb_ineq;
293  fprintf(nom_fichier, " %1d", aux1);
294  if (p_syst_cont != NULL)
295  aux1 = (p_syst_cont->nb_eq * 2) + p_syst_cont->nb_ineq;
296  else
297  aux1 = 0;
298  /* le nombre de contraintes du systeme*/
299  /* le numero de la variable consideree*/
300  /* comme infiniment grande pour le max*/
301  /* l'indicateur de solution entiere. */
302  fprintf(nom_fichier, " %1d %1d 1\n", aux1, bg);
303 
304  /* ecriture du systeme a resoudre */
305  ecrit_tableau2(p_syst_tab, nb_var, nom_fichier);
306 
307  /* ecriture du contexte */
308  ecrit_tableau2(p_syst_cont, nb_var_cont, nom_fichier);
309  fprintf(nom_fichier, ")\n");
310 
311  return fclose(nom_fichier);
312 }
void ecrit_commentaire2(char *commentaire, Psysteme p_sys_tab, int nb_var, FILE *nom_fichier)
Name: ecrit_commentaire2
Definition: ps_to_fic_pip.c:78
#define PIP_IN_FILE
Name : ps_to_fic_pip.c Package : pip Author : F.
Definition: ps_to_fic_pip.c:52
int ecrit_tableau2(Psysteme p_syst_tab, int nb_var, FILE *nom_fichier)
Name: ecrit_tableau2.
int dimension
Definition: sc-local.h:74
int nb_ineq
Definition: sc-local.h:73
int nb_eq
Definition: sc-local.h:72

References aux, Ssysteme::base, Ssysteme::dimension, ecrit_commentaire2(), ecrit_tableau2(), fprintf(), Ssysteme::nb_eq, Ssysteme::nb_ineq, and PIP_IN_FILE.

+ Here is the call graph for this function:

◆ ecrit_tableau2()

int ecrit_tableau2 ( Psysteme  p_syst_tab,
int  nb_var,
FILE *  nom_fichier 
)

Name: ecrit_tableau2.



Parameters: p_syst_tab: le Psysteme qui va etre ecrit sur le fichier. Ce
peut etre aussi bien un contexte q'un probleme.
nb_var: le nombre de variables du Psysteme a differencier des
parametres.
nom_fichier: fichier de destination.
Result: entier.
Aims: ecrire a partir d'un Psysteme, un tableau avec une ligne par vecteur inegalite et deux pour un vecteur egalite ( opposes )
Author: F Dumontet
Date of last change:


Definition at line 204 of file ps_to_fic_pip.c.

209 {
210  Pcontrainte p_contr_tab_aux;
211 
212  fprintf(nom_fichier, "(");
213 
214  if (p_syst_tab != NULL)
215  {
216  p_contr_tab_aux = p_syst_tab->egalites;
217 
218  while (p_contr_tab_aux != NULL) {
219  ecrit_ligne(p_contr_tab_aux->vecteur, p_syst_tab->base,\
220  nom_fichier, nb_var, INEGALITE);
221  ecrit_ligne(p_contr_tab_aux->vecteur, p_syst_tab->base,\
222  nom_fichier, nb_var, EGALITE);
223  p_contr_tab_aux = p_contr_tab_aux->succ;
224  }
225  p_contr_tab_aux = p_syst_tab->inegalites;
226 
227  while (p_contr_tab_aux != NULL) {
228  ecrit_ligne(p_contr_tab_aux->vecteur, p_syst_tab->base, \
229  nom_fichier, nb_var, INEGALITE);
230  p_contr_tab_aux = p_contr_tab_aux->succ;
231  }
232  }
233  fprintf(nom_fichier, ")\n");
234  return OK;
235 }
#define INEGALITE
Definition: ps_to_fic_pip.c:56
void ecrit_ligne(Pvecteur p_vect, Pbase p_sys_base, FILE *nom_fichier, int nb_var, int eg_ineg)
Name: ecrit_ligne
#define OK
Definition: ps_to_fic_pip.c:54
Pvecteur vecteur
struct Scontrainte * succ
Pcontrainte inegalites
Definition: sc-local.h:71
Pcontrainte egalites
Definition: sc-local.h:70

References Ssysteme::base, ecrit_ligne(), EGALITE, Ssysteme::egalites, fprintf(), INEGALITE, Ssysteme::inegalites, OK, Scontrainte::succ, and Scontrainte::vecteur.

Referenced by ecrit_probleme2().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: