-
Total de itens
2 -
Registro em
-
Última visita
Posts postados por Nelson Andrade
-
-
Estou a fazer um trabalho em que peço ao utilizador para escrever um texto.
Depois pego nas palavras desse texto e insiro cada uma delas numa árvore binária e a cada nó da árvore está associado uma string e um contador (no case de haver palavras repetidas)
O inserir já está.
Mas o meu professor pede para procurarmos por palavras, ou seja, o utilizador escreve uma palavra ou um bocado dela e todas as palavras na árvore que começarem por esse bocado têm de ser imprimidas.
Até agora eu tenho assim:
Se tiver na árvore as palavras "casa", "casamento", só é imprimida a primeira palavra e não sei porquê. Alguém me pode ajudar?
void procura( String x ) {
if(x.length()==0) {
listarPosOrdem(raiz); // se o utilizar não introduzir nada, imprimo todas as palavras da árvore, funciona.
return;
}
No actual = raiz;
if(actual==null){
System.out.println("palavra não encontrada");
return;};
if(actual.oElemento.startsWith(x)==true){
System.out.println("Palavras encontradas: ");
System.out.println(actual.oElemento + " encontrada " + actual.contador + " vez(es) ");
}
while( actual != null && actual.oElemento.startsWith(x)==false){if( x.compareTo(actual.oElemento)>0 ){
actual = actual.dir;
}
else
actual = actual.esq;if(actual==null){
System.out.println("palavra não encontrada");
return;}
if(actual.oElemento.startsWith(x)==true){
System.out.println("Palavras encontradas: ");
System.out.println(actual.oElemento + " encontrada " + actual.contador + " vez(es) ");
}
}
}
Fork() ao mesmo tempo com semáforos
em Grupo de Estudos
Postado
Fiz um programa em C, que recebia múltiplos ficheiros que eram abertos pelo processo filho, e se desse erro na abertura, o pai incrementava esse erro e imprimia no fim.
Agora preciso de criar múltiplos filhos, 1 para cada ficheiro, e usar semáforos para bloquear os filhos, pois estes têm de começar ao mesmo tempo.
Código que tenho agora sem semáforos:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<ctype.h>
#include<sys/wait.h>
int main(int argc, char*argv[])
{
int i,contador=0,erros=0,status;
FILE*fp; // Declarar o ficheiro
int pidpai=getpid(); //pid do pai
if(argc<2)
{ //proteção par ao numero de argumentos
printf("argumentos insufecientes, ficheiro necessario\n");
exit(1);
}
for(i=1;i<=argc-1;i++)
{
contador++; //conta o numero de files
if(pidpai==getpid())//fica com o pid do programa principal
{
if(fork())
{
wait(&status);// o processo pai espera pelo filho que acabe e recebe um valor na variável status
if(status==0)
erros++; //sempre que o status for 0, é porque houve um erro na abertura de um file
} // e é incrementado a variavel erros
else
{
printf("\nPID=(%d) ficheiro: %s\n",getpid(),argv);
fp=fopen(argv,"r");// abre o ficheiro para leitura
if(fp==NULL)
return 0;//devolve 0 caso haja erro
else
return 1;//devolve 1 se abrir corretamente
}
}
}
printf("Ficheiros:%d Erros:%d\n",contador,erros);// mostra o numero de files e erros no ecrã
}