Ir para conteúdo
Fórum Script Brasil

Nelson Andrade

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Posts postados por Nelson Andrade

  1. 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ã

    }

  2. 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) ");


                }    


            }    
        }

×
×
  • Criar Novo...