• Matéria: Informática
  • Autor: wandersonwandap9qx1j
  • Perguntado 7 anos atrás

Os processadores Intel da família x86 costumam dar a possibilidade e o programador criar sub-rotinas em Assembly (procedimentos ou funções). Para isso, o programador deve conhecer muito bem a arquitetura e organização do computador. A programação de computadores em linguagem de baixo nível exige que saibamos como manipular dados em memória respeitando as regras de inserção e remoção impostas pela estrutura de dados conhecida como pilha. Segundo Silberchartz (2011), um programa possui quatro áreas principais, em memória, a saber: seção de texto, seção e dados, heap e pilha. A figura abaixo ilustra a estrutura de um processo em memória principal.



SILBERSCHATZ, Abraham. Fundamentos de Sistemas Operacionais. 8. ed. Rio de Janeiro: LTC, 2011.

Considere que você é um desenvolvedor Open Source e está ajudando a comunidade de Sistema Operacional de Código aberto a desenvolver um algoritmo de gerenciamento da pilha em memória. Assim sendo, você decide criar um programa que simule condições semelhantes às de um Sistema Operacional que manipula a pilha.

Os dados a serem armazenados na pilha devem simular processos, sendo que cada elemento a empilhar/desempilhar deve possuir:

- O PID do cada processo (Process ID, é um código gerado automaticamente pelo sistema – cada processo tem seu próprio PID);
- O nome do programa/comando que gerou o processo.

O programa deve ter um menu principal em forma de laço de repetição que atenda aos seguintes requisitos:

- O menu sempre deve imprimir o conteúdo da pilha (da base em direção ao topo);
- Após a impressão do conteúdo da pilha, o usuário deve ser informado de que pode realizar as seguintes operações:
1) Inserir um elemento na pilha;
2) Remover um elemento da pilha;
3) Esvaziar a pilha;
0) Encerrar o programa.

A operação “Inserir um elemento na pilha” deve pedir para que o usuário informe o nome do programa ou comando que será empilhado. O programa deve associar um PID a esse nome automaticamente, e empilhar ambos os dados: PID + nome. Caso a pilha esteja cheia, o usuário deve receber uma mensagem informando: “Pilha cheia, impossível empilhar mais elementos.”.

A operação “Remover um elemento da pilha” tentar remover um elemento da pilha. Caso haja elemento para ser removido, o PID e o nome do elemento desempilhado devem ser impressos na tela. Caso não seja possível desempilhar elementos, o programa deve imprimir a mensagem “Pilha vazia, impossível desempilhar elementos.”, na tela.

A operação “Esvaziar a pilha” deve remover todos os elementos da pilha.

A operação “Encerrar programa” deve finalizar o processo.

Observação 1: o código-fonte deve ser escrito de forma a implementar estruturas de dados estáticas. Nesse caso, nossa pilha deverá ter, no máximo, 5 posições para armazenar elementos (tamanho igual a 5).
Observação 2: a correção será feita em ambiente de desenvolvimento Bloodshed Dev C++, portanto garanta que seu código-fonte esteja de acordo com a sintaxe do padrão C ANSI e, além disso, que seu programa compile em ambiente Dev C++. Os agentes de correção não farão modificações no código-fonte para que ele compile. Essa é uma responsabilidade do aluno!


A Minha Duvida nesse conteúdo e:
Como faço para criar esse PID.

- O PID do cada processo (Process ID, é um código gerado automaticamente pelo sistema – cada processo tem seu próprio PID);
- O nome do programa/comando que gerou o processo.

como que ficaria o comando em linguagem c para esvaziar toda a Pilha.
3) Esvaziar a pilha

Respostas

respondido por: lamartinecezarpbm3x5
9

Resposta:

// PARA VOCÊS TREINAREM FIZ O EXERCÍCIO PARA RECEBER APENAS NÚMEROS, ENTÃO CABE A VOCÊS TRANSFORMAREM PARA RECEBER TEXTOS. ESPERO TER AJUDADO.

#include <stdio.h>

#include <stdlib.h>

#include <locale.h>

// DEFININDO O TAMANHO

#define tamanho 5

//DECLARANDO A ESTRUTURA

typedef struct tipo_pilha{

int dados[tamanho];

int topo;

int ini;

}pilha_tipo;

// VARIÁVEIS GLOBAIS

tipo_pilha pilha;

int op;

//FUNÇÃO DE RETORNO PARA MOSTRAR A PILHA

void mostrar_pilha(){

int i;

printf("\nSua pilha: \n\n");

for ( i = 0; i < tamanho; i++ ){

 printf("%d \n", pilha.dados[i]);

}

}

// FUNÇÃO DE RETORNO PARA RETORNAR O MENU

void mostrar_menu(){

printf("\n\n1 - Adicionar elemento na pilha.\n"

"2 - Excluir elemento da pilha.\n"

"3 - Esvaziar a pilha totalmente.\n"

"0 - Encerrar o programa.\n");

}

//FUNÇÃO PARA EMPILHAR OS ELEMENTOS

void empilhando(){

if ( pilha.topo == tamanho ){

 printf("A pilha está cheia!");

 system("pause");

}

else{

 printf("\nDigite o elemento a ser empilhado: ");

 scanf("%d", &pilha.dados[pilha.topo]);

 pilha.topo++;

}

}

//FUNÇÃO PARA DESEMPILHAR OS ELEMENTOS

void desempilhando(){

if ( pilha.ini == pilha.topo ){

 printf("A pilha está vazia!\n");

 system("pause");

}

else{

 pilha.dados[pilha.topo - 1] = 0;

 pilha.topo --;

}

}

// FUNÇÃO PARA ESVAZIAR A PILHA

void esvaziar_pilha(){

int i;

if ( pilha.topo == pilha.ini ){

 printf("A pilha já está vazia!\n\n");

 system("pause");

}

else{

 for ( i = 0; i < tamanho; i++){

 pilha.dados[pilha.topo - 1] = 0;

 pilha.topo --;

 }

}

 

}

int main(){

setlocale(LC_ALL, "Portuguese");

pilha.topo = 0;

pilha.ini = 0;

op = 1;

 

while ( op != 0 ){

 mostrar_pilha();

 mostrar_menu();

 printf("\nEscolha sua opcao: ");

 scanf("%d", &op );

 switch (op){

  case 1:

   empilhando();

  break;

  case 2:

   desempilhando();

  break;

  case 3:

   esvaziar_pilha();

  break;

 }

}

 

return (0);

}

Explicação:


przinho: psysapiens , se já removeu a indentação substitui pilha_tipo, por tipo_pilha. Fica lá no início, por volta da linha 20
bielkaramujo: alguem mais pode ajudar ? erro por volta da linha linha 43
bielkaramujo: nesse printf a frente  printf ( "%d \n", pilha.dados[i] );
bielkaramujo: erro na função empilhando
bielkaramujo: alguem que fez a indentação correta poderia enviar ?
lamartinecezarpbm3x5: A indentação está correta, o problema é que a própria área de postagem do Brainly é que desorganiza o espaçamento. Só basta apagar os comentários que são iniciados por // que vai ficar reorganizado.
lamartinecezarpbm3x5: Lá no início na struct tem que trocar pilha_topo por tipo_pilha
maiconavhonp7apgm: n seria mais facil ter colocado de uma vez da forma correta pra n fica essa bagunça
lamartinecezarpbm3x5: Não, o ideal é cada um fazer o seu e não copiar. A postagem é pra dar pelo menos um caminho pra seguir.
psysapiens: przinho, usei o onlinegdb[dot]com/online_c_debugger para analisar os espaços em brancos que estavam bugando, deu certo agora, vlw!
respondido por: DestroyerBr123
0

Resposta:

alguém consegue passar a resposta?

Explicação:

não consegui fazer :(

Perguntas similares