Ejercicio de Programacion

Isakito9

Buenas mediavidieros, no se si es aqui donde deberia ponerlo y si deberia preguntarlo, pero esque estoy totalmente en blanco.

Os dejo una foto de los dos ejercicios que me ha mandado, no se por donde cogerlos, se que puede ser una tonteria pero estoy bloqueado.

Gusete

Si me explicas que no entiendes, te podria echar una mano.

1 respuesta
Isakito9

#2 El primero ni zorra, entiendo los huecos que estan rellenados en la grafica. El primer valor que le da a Winwor es 0 y el siguiente es 100 que suma 0.4. Por lo que la fila de Winword va desde 0 en adelante, sumando 0.04 por la peticion que da.
Los otros pues similar pero con sus valores.
Lo que no entiendo es como se yo que valor de peticion tiene para dar el valor en la tabla, no se si me explico xD

Gusete

Vale, te explico como esta resuelto el ejercicio primero hasta la peticion del proceso Iexplore 0. A partir de ahi intenta acabarlo tu.
1 pagina = 40 instrucciones
Memoria 200 instrucciones = 5 paginas
Una sola pagina por proceso. Suponemos que cuando un proceso vuelve a pedir una pagina, se vuelve a usar la que el proceso tenia asignada anteriormente.


    [b]Estado memoria[/b]: 
        5 paginas libres. Siendo p0 la primera pagina y p4 la ultima:
        p0: de la posicion 0 de la memoria a la 39
        p1: de la posicion 40 a la 79 
        p2: de la posicion 80 a la 119
        p3: de la posicion 120 a la 159
        p4: de la posicion 160 a la 200
    
    [b]Peticion[/b]: 
        Winword 0
        Pide cargar la primera pagina de su codigo, que va desde la instruccion 0 a la 40.
    [b]Estado memoria[/b]: 
        4 paginas libres. 
        p0 con las instrucciones de 0 a 40 de Winword
    [b]Posicion[/b]: 
        0, 0
        La primera instruccion cargada del proceso esta en la primera posicion de la memoria ya que su pagina es p0, por lo tanto posicion absoluta es 0
        La primera instruccion cargada del proceso esta en la primera posicion de su codigo, por lo tanto posicion relativa es 0
    
    [b]Peticion[/b]: 
        Winword 100
        Pide cargar la pagina 100 de su codigo, que va desde la instruccion 4000 a la 4040.
    [b]Estado memoria[/b]: 
        4 paginas libres. 
        p0 con las instrucciones de 4000 a 4040 de Winword
    [b]Posicion[/b]: 
        0, 4000
        La primera instruccion cargada del proceso Winword esta en la primera posicion de la memoria ya que su pagina es p0, por lo tanto posicion absoluta es 0
        La primera instruccion cargada del proceso Winword esta en la posicion 4000 de su codigo, por lo tanto posicion relativa es 4000
        
    [b]Peticion[/b]:
        soffice 0
        Pide cargar la primera pagina de su codigo, que va desde la instruccion 0 a la 40.
    [b]Estado memoria[/b]:
        3 paginas libres.
        p0 con las instrucciones de 4000 a 4040 de Winword
        p1 con las instrucciones de 0 a 40 de soffice
    [b]Posicion[/b]: 
        40, 0
        La primera instruccion cargada del proceso soffice esta en la posicion 40 de la memoria ya que su pagina es p1, por lo tanto posicion absoluta es 40
        La primera instruccion cargada del proceso soffice esta en la primera posicion de su codigo, por lo tanto posicion relativa es 0
        
    [b]Peticion[/b]:
        soffice 5
        Pide cargar la pagina 5 de su codigo, que va desde la instruccion 200 a la 240.
    [b]Estado memoria[/b]:
        3 paginas libres.
        p0 con las instrucciones de 4000 a 4040 de Winword
        p1 con las instrucciones de 200 a 240 de soffice
    [b]Posicion[/b]: 
        40, 200
        La primera instruccion cargada del proceso soffice esta en la posicion 40 de la memoria ya que su pagina es p1, por lo tanto posicion absoluta es 40
        La primera instruccion cargada del proceso soffice esta en la posicion 100 de su codigo, por lo tanto posicion relativa es 200
        
    [b]Peticion[/b]:
        Winword 30
        Pide cargar la pagina 30 de su codigo, que va desde la instruccion 1200 a la 1240.
    [b]Estado memoria[/b]:
        3 paginas libres.
        p0 con las instrucciones de 1200 a 1240 de Winword
        p1 con las instrucciones de 200 a 240 de soffice
    [b]Posicion[/b]: 
        0, 1200
        La primera instruccion cargada del proceso Winword esta en la posicion 0 de la memoria ya que su pagina es p0, por lo tanto posicion absoluta es 0
        La primera instruccion cargada del proceso soffice esta en la posicion 1200 de su codigo, por lo tanto posicion relativa es 1200
          
    [b]Peticion[/b]:
        Iexplore 0
        Pide cargar la pagina 0 de su codigo, que va desde la instruccion 0 a la 40.
    [b]Estado memoria[/b]:
        2 paginas libres.
        p0 con las instrucciones de 1200 a 1240 de Winword
        p1 con las instrucciones de 200 a 240 de soffice
        p2 con las instrucciones de 0 a 40 de Iexplore
    [b]Posicion[/b]: 
        80, 0
        La primera instruccion cargada del proceso Iexplore esta en la posicion 80 de la memoria ya que su pagina es p1, por lo tanto posicion absoluta es 80
        La primera instruccion cargada del proceso Iexplore esta en la posicion 0 de su codigo, por lo tanto posicion relativa es 0
1 respuesta
Isakito9

#4 Muchas gracias por todo, si me surge alguna duda, te comento.
El 2 ya le hice

Gusete

Genial! :) Si tienes alguna otra duda posteala :)

1 respuesta
Garayo

#6 Yo tengo una dudilla sobre un ejercicio de programación (estoy empezando en C xD)

Programa que llame a su propio archivo C con el nombre ``programa'' y lo copie en el directorio raíz del equipo.

Me podrías echar una mano? Sería de gran ayuda ^^

2 respuestas
dagavi

#7 Supongo que más bien será un ejercicio de hacer opens, writes, etc.

El nombre del programa lo tienes en arg[0].
Si el nombre del archivo .C es el mismo que el del programa pero añadiendo .C al final, solo tendrías que concatenar los strings arg[0] y ".c" para obtener la ruta del archivo.

Si lo que estás queriendo decir es que el archivo .c siempre se llama "programa" entonces no tienes ninguna complicación puesto que lo podrás abrir con el nombre "programa".

A partir de ahí puedes hacer, por ejemplo, un open("programa", O_RDONLY); para abrir el archivo en modo lectura y hacer otro open("/programa", O_WRONLY | O_CREAT); para escribir en /programa y, si el archivo no existe, crearlo.

A partir de ahora ya tienes los ID de los canales de lectura y escritura (lo que retorna open) y puedes hacer read del primero y write al segundo, mientras hayan datos en el primero.

Edit: Bueno, lo he realizado con system calls, esto también lo puedes hacer con funciones de C como fopen, fwrite, etc.

1 respuesta
Isakito9

#7 #8

#include <stdio.h>
#include <stdlib.h>

void main () {
system("ren Nombredelarchivo.c programa.c" );
system("copy programa.c C:\" ) ;
system("pause" ) ;
}

1 2 respuestas
dagavi

#9 Hombre, siendo un ejercicio de programación dudo que le pidan eso xD (a no ser que lo digas en coña, ya que yo también había pensado en poner algo así xD)

2 respuestas
Isakito9

#10 Pues si, es asi :D

1 respuesta
Garayo

#10 Si si lo que busco es más lo de #11!! Gracias de todos modos :)

Ulmo

#9 ¿¿ Llamadas a sistema desde un programa en C ??

Vade retro satanas, abandona este foro.

1 1 respuesta
dagavi

#13 Pueden ser muy útiles xD

Yo tengo que montar una interfaz monitor en linux y cambiar el canal y no hay nada más fácil que llamar a airmon-ng o iwconfig. Si me obligaran a hacerlo de otra forma me complicaría mucho la cosa xD

1 1 respuesta
Ulmo

#14 Esta claro q para administrar sistemas estas casi obligado a hacer uso de llamadas a sistema, de hecho perl es un lenguaje bastante enfocado a este tipo de tareas. Pero vamos, no se en vuestra facultad, pero en la mia le llevabas un ejercicio resuelto con llamadas a sistema y el suspenso q te caía era pequeño.

De hecho llegaba a tal punto de absurdez q los cabrones compilaban los programas en sistema unix y en windows, teniendo q funcionar en ambos (c++), y resulta q existe una pequeña diferencia entre ambos compiladores, y es q el de unix inicia todos los punteros y constructoras vacias a "NULL", mientras q el de windows se lo tienes q especificar pq sino peta al hacer la consulta.

Eso último ha sido solo una anecdota q me apetecia contar xD

8 días después
Isakito9

Uso este mismo hilo para la siguiente pregunta:
En C me da de resultado un float 0.515 y me gustaria redondearle a 0.52. Se que con ceil puedes redondear pero son enteros, en este caso me pondria 1, alguna idea?

DaVNiz

Yo tambien voy a aprovechar...

Me piden que haga un programa donde se introduzcan 10 parejas, y se visualize el producto de estas mediante la suma sucesiva, se como hacer la suma sucesiva y, en general, el programa me sale. La primera pareja me funciona perfectamente, pero la segunda ya me sale mal...

#include "stdafx.h"
#include <stdlib.h>
#define PARE 10

int _tmain(int argc, _TCHAR* argv[]){
int a,b,cont=0,total=0,cont1=0;
do{ printf("\n Introduzca las parejas de numeros \n");
scanf("%d",&a);
scanf("%d",&b);
do{
total+=b;
cont1++;}
while(a > cont1);
printf("\n El resultado es %d\n",total);
cont++;
}
while(cont < PARE);
system("pause");
return 0;
}

12 días después
Isakito9

Buenas, tengo un dilema con esta propuesta:
Programa que, para el directorio ``prueba'', dé a elegir entre los comandos crearlo o borrarlo. A continuación lo hará. Programar en C
Alguna sugerencia? Esque me acuerdo de los comandos de reemplazar y de copiar.

Ya lo tengo

spoiler

gracias

Isakito9

Alguien me pueda ayudar en esto:
Programa que lea los intervalos de tiempo que asigna un sistema operativo a dos prioridades, el tiempo que tarda en planificar el sistema operativo y el tiempo y prioridad de un proceso y que diga el tiempo que tardará en terminar si está junto con otro mucho más largo con su misma prioridad, y no hay de ninguno de la otra.
Ejemplo: Si a la prioridad 1 le corresponde un intervalo de 12 msg y a la 2 de 5 msg, el tiempo de planificación es de 1 msg y un proceso de prioridad 2 necesita 0.5 sg de procesador, estará acabado en 1.2 sg

Vamos, esque me estoy volviendo loco

Usuarios habituales

  • Isakito9
  • DaVNiz
  • Ulmo
  • dagavi
  • Garayo
  • Gusete