Hi, well i'm a program that has to show 3 rectangles and a menu (which will add data and then show in the rectangles) to simulate a processor

but i´m getting a problem when the program runs, it shows the rectangles and a the menu right, but when i use the menu the screen goes like gray!!!!!

Why is this? :eek:

AND OTHER QUESTION:

HOW CAN I SHOW THE DATA

(that the user give to the program CALLED LISTA IN THE FUNTION INSERTA = INSERT)
struct Informacion{
char nombre[50];
char montodememoria[100];
char tiempodecalculo[100];
char archivosabiertos[100];
};


IN THE SECOND RECTANGLE ???, and THEN THAT INFORMATION GOES TO THE FIRST RECTANGLE?????

|NOMBRE|<--|NOMBRE |
|--------- |----|-----------|
|_______|----|________|


outtext????

#include <graphics.h>
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define F1 59
#define F2 60
#define ESC 27

struct Informacion{
       char nombre[50];
       char montodememoria[100];
       char tiempodecalculo[100];
       char archivosabiertos[100];
       };

struct Nodo{
       struct Informacion info;
       struct Nodo *sig;
       };

/////////////////////////////////////////////////////////////////////////
///////////////////////////Crea Nodo////////////////////////////////////
struct Nodo *creanodo(struct Informacion data)
 {
   struct Nodo *aux;
   aux=(struct Nodo *)malloc(sizeof(struct Nodo));
   strcpy(aux->info.nombre,data.nombre);
   strcpy(aux->info.montodememoria,data.montodememoria);
   strcpy(aux->info.tiempodecalculo,data.tiempodecalculo);
   strcpy(aux->info.archivosabiertos,data.archivosabiertos);
   return(aux);
 }
///////////////////////////////////////////////////////////////////////
///////////////////////funcion Inserta/////////////////////////////////
void inserta(struct Nodo **Lista, struct Informacion data, int pos)
{
   struct Nodo *aux;
   struct Nodo *aux2;

    if ((pos==1) || (*Lista==NULL))
       {
    aux=creanodo(data);
    aux->sig=*Lista;
    *Lista=aux;
       }
    else{
     int i=1;
     aux=*Lista;
     while (i!=pos-1 && aux!=NULL)
           {
        aux2=aux;
        aux=aux->sig;
        i=i+1;
           }
          if (aux==NULL)
         aux2->sig=creanodo(data);
          else{
           aux2=creanodo(data);
           aux2->sig=aux->sig;
           aux->sig=aux2;
          }
    }
}
////////////////////////////////////////////////////////////////
/////////////////////Funcion Despliega//////////////////////////
void despliega(struct Nodo *Lista)
{
  struct Nodo *aux;
  aux=Lista;
  while(aux!=NULL)
       {
    printf("\n\n%s", aux->info.nombre);
    printf("\n\n%s", aux->info.montodememoria);
    printf("\n%s", aux->info.tiempodecalculo);
    printf("\n%s", aux->info.archivosabiertos);
    aux=aux->sig;
       }
}
/////////////////////////////////////////////////////////////////
int menu()
{
 char opc;
 clrscr();
 printf("\n\n MENU:\n\n\n");
 printf("<<F1>>  Inserta un proceso \n");
 printf("<<F2>>  Aborta    \n");
 printf("<<ESC>> Salir    \n");

 opc=getch();
 if ( (int) opc==0 )
       opc=getch();
 return( (int) opc);
}
////////////////////////////////////////////////////////////////////
///////////////////////funcion inicia grafica//////////////////////
void iniciar_grafica()
{
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "C:\\TC\\BGI");
   errorcode = graphresult();
   if (errorcode != grOk)
   {
   printf("Error de grafica: %s\n", grapherrormsg(errorcode));
   printf("presione una tecla para terminar:");
   getch();
   exit(1);
   }
}
/////////////////////////////////////////////////////////////////////
void main()
{
   struct Nodo *Lista=NULL;
   struct Informacion data;
   int pos;
  //
  iniciar_grafica();
  //

   rectangle(20,80,250,350);
   rectangle(420,100,300,350);  //(ESQUINA SUPERIOR IZQUIERDA, ESQUINA INFERIOR DERECH)
   rectangle(440,100,550,350);
   outtextxy(10,20,"SIMULACION DE UN PROCESADOR");
   outtextxy(290,80,"Procesos Activos");
   outtextxy(440,80,"Procesos Inactivos");

   printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n Inserta <<F1>>");
   printf("\n Aborta  <<F2>>");
   printf("\n Salir   <<ESC>>");
   getch();
  //
  int accion=0;
  while(accion!=ESC)
  {
   accion=menu();
   clrscr();
   switch(accion)
    {
       case F1: printf("\n\n Inserta un nuevo proceso\n\n");
        printf("\Proporcione:\n");
        printf("\nNombre del programa: ");
        scanf("%s", &data.nombre);
        printf("\nMonto de Memoria: ");
        scanf("%s", &data.montodememoria);
        printf("\nTiempo de Calculo: ");
        scanf("%s", &data.tiempodecalculo);
        printf("\nArchivos Abiertos: ");
        scanf("%s", &data.archivosabiertos);
        printf("\Posicion??: ");
        scanf("%s", &pos);
        inserta(&Lista, data, pos);
        printf("\n­­­Proceso incluido!!! \n");
        break;


       case F2: printf("\n\n Aborta un proceso\n");
        printf("\Proporcione el numero de registro que desea Abortar:\n");
           //    scanf("%d",&pos);
        despliega(Lista);
        // getch();
         break;

       case ESC: printf("\n\n Usted va a salir");
           getch();
           break;
      default: printf("  !!!!!!LA OPCION TECLEADA NO ES VALIDA?????\n\n");
           printf("Presione cualquier tecla para continuar...");
           getch();
       //

       }
         getch();
      }
   //////////////
   closegraph();
   ///////////
}
//////////////////////////////////////////////////////////////////////

The program should do something like the program i include here
but with the extra 'menu' that allows you to insert "data"
,no numbers into the rectangles!!!!

PLEASE HELP ME WITH THIS I CANT CONTINU WITH THE PROGRAM BECAUSE I DONT KNOW HOW TO ADD THE DATA I COLLECTED FROM THE USER IN THE RECTANGLES

Attachments
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "graphics.h"
#include "dos.h"
 
void iniciar_grafica();
void graficar_datos();
void graficar_vectores();
 
int procesos[4][5]={1,8,2,4,6,
		    2,3,8,9,6,
		    0,1,2,3,4,
		    0,0,0,0,0},procesos_ejecutados[5];
int cpu=5,uso_cpu,mayor,prioridad,i,midx,midy,pid=4,j;
char num[10],c;

int main(void)
{
   clrscr();
   iniciar_grafica();
   midx=getmaxx()/2;
   midy=getmaxy()/2;
   while(1){
      for(j=0;j<5;j++){
	 graficar_vectores();
	 graficar_datos();
	 cleardevice();
}
   printf("Si deseas salir presiona (s/S) de lo contrario pulsa enter: ");
   scanf("%c", &c);
   if(c=='S'||c=='s')
   {
      break;
   }
   else
   {
      j=0;
   }
}
closegraph();
return 0;
}
 
void iniciar_grafica()
{
   int gdriver = DETECT, gmode, errorcode;
   initgraph(&gdriver, &gmode, "C:\\TC\\BGI");
   errorcode = graphresult();
   if (errorcode != grOk)
   {
   printf("Error de grafica: %s\n", grapherrormsg(errorcode));
   printf("presione una tecla para terminar:");
   getch();
   exit(1);
   }
}

void graficar_datos()
{
   mayor=procesos[0][0];
   prioridad=0;
   //Dibuja la  estructura basica
   circle(midx,midy,80);
   rectangle(10,150,100,450);
   rectangle(540,150,630,450);
   outtextxy(10,50,"ALGORITMO DE PRIORIDAD");
   //verifica el valor mas grande
   for (i=0;i<4;i++)
   {
      if(mayor<procesos[0][i+1])
      {
            mayor=procesos[0][i+1];
            prioridad=i+1;
            uso_cpu=procesos[1][i+1];
      }
   }
   outtextxy(midx-130,80,"Atendiendo al proceso con id= ");
   itoa(procesos[2][prioridad],num,10);
   outtextxy(midx+102,80,num);
   outtextxy(midx-130,90,"con carga de trabajao de ");
   itoa(uso_cpu,num,10);
   outtextxy(midx-5,230,num);
   sleep(uso_cpu);
   procesos[0][prioridad]=rand()%9+1;
   procesos[1][prioridad]=rand()%9+1;
   procesos[2][prioridad]=++pid;
   procesos_ejecutados[prioridad]=uso_cpu;
}
 
void graficar_vectores()
{
   int k;
   outtextxy(5,460,"Proceso : Prioridad : Uso del CPU");
   for(k=0;k<=4;k++)
   {
      //Vector Izquierdo
      itoa(procesos[2][k],num,10);
      outtextxy(15,175+(k*60),num);
      itoa(procesos[0][k],num,10);
      outtextxy(30,175+(k*60),":");
      outtextxy(50,175+(k*60),num);
      outtextxy(70,175+(k*60),":");
      itoa(procesos[1][k],num,10);
      outtextxy(85,175+(k*60),num);
      //Vector Derecho
      itoa(procesos_ejecutados[k],num,10);
      outtextxy(580,175+(k*60),num);
   }
}

you have to print the data at the same time you print the boxes. With standard C or C++ functions you can't first print the boxes then write over them with data. Do them both at the same time.

Do I have to use

outtextxy(....?

and if i want to print the result of a function
how can I put this

outtextxy(Inserta(*Lista))????????

This article has been dead for over six months. Start a new discussion instead.