コード例 #1
0
ファイル: main.c プロジェクト: jvalv/escalonador
void opcao(node *PRONTOS,node *EXECUTANDO, node *BLOQUEADO,node *FINALIZADOS,int op){
	node *tmp;
	switch(op){
		case 0:
			libera(PRONTOS);
			break;
		case 1:
			libera(PRONTOS);
			inicia(PRONTOS);
			break;
		case 2:
			listaProcessos(PRONTOS,EXECUTANDO, BLOQUEADO, FINALIZADOS);
			break;
		case 3:
			insere(PRONTOS);
			break;
		case 9: Escalonador_Simples(PRONTOS,EXECUTANDO, BLOQUEADO,FINALIZADOS);
			break;
		case 4:
			tmp= retira(PRONTOS);
			if(tmp != NULL){
				printf("Retirado: %3d\n\n", tmp->num);
				libera(tmp);
			}
			break;
		default:
			printf("Comando invalido\n\n");
	}
}
コード例 #2
0
/* ------------------------------ */
int main() {

   int x, coef, exp, poliEscolhido, operando1, operando2;
   Polinomio *p1 = NULL;
   Polinomio *p2 = NULL;
   Polinomio *resultado = NULL;

   scanf("%d",&x);

   int opcao = 1;
   while(opcao != 0){
      scanf("%d",&opcao);
      switch(opcao){

         case ADICIONAR_POLI:
            scanf("%d %d %d", &poliEscolhido, &coef, &exp);
            poliEscolhido == 1 ? adicionarPolinomio(&p1,coef,exp) : adicionarPolinomio(&p2,coef,exp);
            //imprimir(p1);
         break;

         case REMOVER_POLI:
            scanf("%d %d", &poliEscolhido, &exp);
            poliEscolhido == 1 ? removerPolinomio(&p1,exp) : removerPolinomio(&p2,exp);
         break;

         case SOMAR_POLI:
            if(resultado != NULL) libera(resultado);
            resultado = somarPolinomios(p1,p2);
           
         break;

         case SUBTRAIR_POLI:
            scanf("%d %d", &operando1, &operando2);
            if(resultado != NULL) libera(resultado);
            resultado = subtrairPolinomios(operando1 == 1 ? p1 : p2, operando2 == 2 ? p2 : p1);
         break;

         case MULTIPLICAR_POLI:
            if(resultado != NULL) libera(resultado);
            resultado = multiplicarPolinomios(p1,p2);
           //imprimir(resultado);
         break;

         case CALCULAR_POLI:
            scanf("%d",&poliEscolhido);
            switch(poliEscolhido) {
               case 1: printf("%d\n",calcularPolinomio(p1,x)); break;
               case 2: printf("%d\n",calcularPolinomio(p2,x)); break;
               case 3: printf("%d\n",calcularPolinomio(resultado,x)); break;
            }
         break;
	
	
	 
      
   }
}
   return (0);

}
コード例 #3
0
// Programa principal
int main(int argc, char *argv[])
{	
    void* objeto;	
	int valor1 = 156;
	int valor2 = 188;	
	Hash* willy;
	Pessoa* p_ricardo;
	Pessoa* p_antonio;
	Hash* deInteiros;
	
	p_ricardo = inicializa_pessoa();
	p_antonio = inicializa_pessoa(); 
	
	p_ricardo = cria_pessoa(304050, 13640043);
	p_antonio = cria_pessoa(306050, 13740012);
	
	willy = inicializa(100, &compara_pessoas);
	
	insere(willy, "RicardoChave", p_antonio);
	insere(willy, "RicardoChave", p_ricardo);
	
	objeto = busca(willy, "RicardoChave", p_antonio);
	
	if(objeto == NULL) {
		printf("Objeto nao encontrado!\n");
	} else {
		Pessoa* pessoa = (Pessoa*) objeto;
		printf("RG com cast: %d\n", pessoa->rg);
		printf("CPF com cast: %d\n", pessoa->cpf);
	}
		
	printf(" \n");
	printf("Criando uma tabela hash agora de inteiros..\n");
	printf(" \n");
	deInteiros = inicializa(100, compara_inteiros);
	insere(deInteiros, "Inteiro", (void*)(&valor1));
	insere(deInteiros, "Inteiro", (void*)(&valor2));
	objeto = busca(deInteiros, "Inteiro", (void*)(&valor1));
	if( objeto == NULL ) {
		printf("Objeto encontrado\n");
	} else {
		int* int_ = (int*)objeto;
		printf("Inteiro: %d\n", *int_);
	}
	objeto = busca(deInteiros, "Inteiro", (void*)(&valor1));
	if(objeto == NULL)
		printf("Ele nao existe na tabela!");
	
		
	
	libera(willy);
	free(willy);
	libera(deInteiros);
	free(deInteiros);	
	return 0;
}
コード例 #4
0
ファイル: main.c プロジェクト: BarbaraCoelho/Arvore
Arv* libera (Arv* a)
{
    if (!vazia(a))
    {
        libera(a->esq); /* libera sae */
        libera(a->dir); /* libera sad */
        free(a);        /* libera raiz */
    }
    return NULL;
}
コード例 #5
0
ファイル: listas.c プロジェクト: lordmil/estruturas-de-dados
void opcao(no *lista, int op){
	no *tmp;
	switch(op){
		case 0:
			libera(lista);
			printf("Ate mais!\n");
			break;

		case 1:
			libera(lista);
			printf("a lista foi limpa!\n");
			inicia(lista);
			break;

		case 2:
			printlista(lista);
			break;

		case 3:
			addinicio(lista);
			break;

		case 4:
			addfim(lista);
			break;

		case 5:
			colocaqualquer(lista);
			break;

		case 6:
			tmp= removecomeco(lista);
			break;

		case 7:
			tmp= removefim(lista);
			break;

		case 8:
			tmp= excluialguem(lista);
			break;

		case 9:
            printf("\nValor a ser procurado: ");
            scanf("%d",&valor);
            procuralista(lista,valor);
            break;

		default:
			printf("Comando invalido\n\n");
	}
}
コード例 #6
0
int main(){
  int num,num2, opcao,mod,div;
  Lista l,l2,l3;

  inicLista(&l);
  inicLista(&l2);  
  inicLista(&l3);

	printf("Entre com o primeiro numero: ");
	scanf("%d", &num);
	while(num > 0)
	{
		mod = num % 10000;
		num = num / 10000;
		//printf("Num: %d\n",num);
	 	insereFim(&l, mod);
	}
	///exibe(&l);
	printf("\nEntre com o segundo numero: ");
    scanf("%d", &num2);
	while(num2 > 0)
	{
		mod = num2 % 10000;
		num2 = num2 / 10000;
		//printf("Num2: %d\n",num2);
	  	insereFim(&l2, mod);
	}
	soma(&l,&l2,&l3);
	//exibe(&l2);
     
    printf("\n");
    printf("Lista 1: \n");
    exibe(&l);
    printf("\n\n");  
   
    printf("Lista 2: \n");  
	exibe(&l2);
	printf("\n\n");    
	
	printf("Soma das duas Listas: \n");
	exibe(&l3);
 	printf("\n\n"); 
      
  libera(&l);
  libera(&l2);
  libera(&l3);
  return 0;
}
コード例 #7
0
ファイル: main.c プロジェクト: Clovirgrj/Estrutura-de-Dados
int main(int argc, char *argv[]){
 	int l, c, linha, coluna;
 	float y;
 	
 	Matriz* x;
	scanf("%d", &linha);
	scanf("%d", &coluna);
 	
	x = cria(linha, coluna);
	
	l = linhas(x);
	c = colunas(x);
	printf("\n%d\n", l);
	printf("\n%d\n", c);
	
	
	//y = acessa(x, linha, coluna);
	//printf("\n%f\n", y); //printa 0
	
	libera(x); //libera cria que é x
	
	//y = acessa(x, linha, coluna);
	//printf("\n%f\n", y); //printa o endereço de y
	
	atribui(x, linha, coluna, 10);
	
	y = acessa(x, linha, coluna); //Neste y = acessa vai ser conferido se realmente o 10 foi atribuido à matriz
	printf("\n%.2f\n", y); //printa o endereço de y depois de executar atribui. Tem que printar 10
	
	return 0;
}
コード例 #8
0
void Bspline::limpa_bspline () {
	this->nos_bspline = 0;
	this->cont_pontos = 0;
	this->pontos = libera(this->pontos);
	free(this->VT);
	this->VT = NULL;
}
コード例 #9
0
ファイル: listaencadeada.c プロジェクト: thiagovsk/EDA
void opcao(node *LISTA, int op)
{
    switch(op){
        case 0:
            libera(LISTA);
            break;
            
        case 1:
            exibe(LISTA);
            break;
        
        case 2:
            insereInicio(LISTA);
            break;
        
        case 3:
            insereFim(LISTA);
            break;      
            
        case 4:
            inicia(LISTA);
            break;
        
        default:
            printf("Comando invalido\n\n");
    }
}
コード例 #10
0
ファイル: ex_15.c プロジェクト: joao-lima/elc1066-2015-2
int main(int argc, char** argv) {
    int op;
    float v;
    Pilha *p1, *p2;
    p1 = cria();
    p2 = cria();
    printf("Digite valores da Pilha 1:\n");
    do {
        printf("Digite o valor: ");
        scanf("%f",&v);
        push (p1, v);
        printf("\nDeseja inserir mais elementos: 1 - Sim, 0 - Nao ");
        scanf("%d",&op);
    }while(op == 1);
    printf("Digite valores da Pilha 2:\n");
    do {
        printf("Digite o valor: ");
        scanf("%f",&v);
        push (p2, v);
        printf("\nDeseja inserir mais elementos: 1 - Sim, 0 - Nao ");
        scanf("%d",&op);
    }while(op == 1);
    concatena_pilhas(p1,p2);
    libera(p2);
    printf("Imprimir Pilha 1:\n\n");
    imprime(p1);
    return (EXIT_SUCCESS);
}
コード例 #11
0
int main() {

	int N;				// numero de pessoas na fila
	Lista l;			// lista - usada para a fila dinamica
	int i;				// contador
	int pessoa;			// idade da pessoa que entrou na fila
	int a;				// quantidade de pessoas que foi atendida
	int tam;			// tamanho da fila

	scanf("%d", &N);
	while (N > 0) {
		inicLista(&l);
		
		// insere as pessoas na fila		
		for (i = 0; i < N; i++) {
			scanf("%d", &pessoa);
			insereLista(&l, pessoa);
		}

		// remove da fila as pessoas que ja foram atendidas
		scanf("%d", &a);
		for (i = 0; i < a; i++) {
			int e;
			removeInicio(&l, &e);
			printf("%d ", e);
		}
		printf("\n");

		scanf("%d", &N);
		
		libera(&l);
	}

	return 0;
}
コード例 #12
0
ファイル: main.c プロジェクト: JuarezASF/Code
int main(){
	
	double dt = 0.1;
	double *time;
	double t_start, t_end;
	int time_steps, Nsamples;
	Matrix *xSaved, *zSaved;
	double z;

	t_start = 0;
	t_end = 10;
	time_steps =(int)((double)(t_end - t_start)/dt + 0.5);
	//arredonda para cima o resultado da divisão

	time = (double *)aloca(time_steps*sizeof(double));

	int i;
	for(i = 0; i < time_steps; i++){
		time[i] = i*dt;
	}

	Nsamples = time_steps;
	
	xSaved = new_M(Nsamples, 3);
	zSaved = new_M(Nsamples, 2);


	for(i = 0; i < Nsamples; i++)
	{
		z = getVel();
		Matrix *X = NULL;
		X = intKalman(z);
		xSaved->a[i][0] = time[i];
		xSaved->a[i][1] = X->a[0][0];
		xSaved->a[i][2] = X->a[1][0];

		zSaved->a[i][0] = time[i];
		zSaved->a[i][1] = z;
		kill_M(&X);
	}

	const char fileX[] = "../data/X.dat";
	const char fileZ[] = "../data/Z.dat";

	MatrixPrint2File(xSaved, fileX);
	MatrixPrint2File(zSaved, fileZ);

	kill_M(&xSaved);
	kill_M(&zSaved);
	libera(time);
	KalmanFilter_End();
	EndProgram();

	reportGood("O programa chegou ao fim!");


	return(0);
	
	}
コード例 #13
0
ファイル: matrix-class.c プロジェクト: JuarezASF/Code
void kill_M(Matrix **A){
	/*apaga a matriz e o seu ponteiro
	 * */
	int i;

	if(*A)
		{
		for(i = 0; i < (*A)->rows; i++)
				libera((*A)->a[i]);

		libera((*A)->a);	
		libera(*A);
		(*A) = NULL;
		}
	else 
		reportBad("kill_M recebeu matriz não alocada!");
	}
コード例 #14
0
/* Inicializacao do programa */
int main(){
   Agenda *lista, *resp;
   lista = NULL;
   int tel_lido;
   char parametro;
   char nome_lido[TAM];
   
   do{
      parametro = getchar();
      switch(parametro){
         case('i'): /* Insere um novo contato na agenda */
            getchar();
            scanf("%d", &tel_lido);
            getchar();
            scanf("%[^\n]", nome_lido);
            getchar();
            insereOrdenado(tel_lido, nome_lido, &lista);                        
            break;
            
         case('r'): /* Faz a remocao de um contato da agenda */
            getchar();
            scanf("%[^\n]", nome_lido);
            getchar();
            resp = busca(nome_lido, lista);
            
            if(resp == NULL)
               printf("Nao foi possivel remover: Contato inexistente!\n\n");
            else
               printf("Contato: %-40s %d\nFoi removido com sucesso!\n\n", resp->nome, resp->tel);
            
            removeNo(nome_lido, &lista);
            break;
         
         case('n'): /* Busca um nome na agenda */
            getchar();
            scanf("%[^\n]", nome_lido);
            getchar();
            resp = busca(nome_lido, lista);
                
            if(resp == NULL)
               printf("Contato nao encontrado!\n\n");
            else
               printf("%-40s %d\n\n", resp->nome, resp->tel);
                
            break;
                
         case('p'): /* Faz a impressao de todos os contatos em ordem alfabetica */
            if(lista != NULL)
               imprime(lista);
            break;
      }

   } while(parametro != 'f');
   
   libera(lista);
    
   return 0;
}
コード例 #15
0
ファイル: largura.c プロジェクト: junin17/C
void visitabfs(grafo *g){
    int i,tempo;
    Fila *f=cria(g->tam);

    for(i=0;i<g->tam;i++){
        if(g->cor[i]==branco) bfs(g,i,f);
    }
    libera(f);
}
コード例 #16
0
ファイル: ex_26.c プロジェクト: joao-lima/elc1066-2015-2
void libera (ArvGen* a)
{
   ArvGen* p = a->primeiro_filho;
   while (p!=NULL) {
      ArvGen* t = p->proximo_irmao;
      libera(p);
      p = t;
   }
   free(a);
}
コード例 #17
0
ファイル: main.c プロジェクト: jacomacena/Pilha
int main()
{
    setlocale(LC_ALL,"Portuguese");
    tpilha *PILHA = (tpilha *) malloc(sizeof(tpilha));
    if(!PILHA){
        printf("\nSem memoria disponivel!\n");
        exit(1);
    }else{
        inicia(PILHA);
        int opt;

        tpilha *aux;

        do{
            system("cls");
            menu();
            scanf("%d",&opt);
            //opcao(PILHA,opt);

            switch(opt){
            case 0:
                break;

            case 1:
                push(PILHA);
                break;

            case 2:
                aux= pop(PILHA);
                if(aux != NULL)
                printf("Retirado: %3d\n\n", aux->num);
                break;

            case 3:
                exibe(PILHA);
                break;

            case 4:
                libera(PILHA);
                inicia(PILHA);
                printf("Pilha limpa!\n");
                break;

            }
            getch();
        }while(opt!=0);

        free(PILHA);
        return 0;
    }

}
コード例 #18
0
ファイル: memoria.c プロジェクト: mfstabile/bccso
int main(){
	int * a,*b,*c; 
	a=(int*)aloca(10);
	*a=10;
	
	b=(int*)aloca(11);
//	printf("\n%d\n",b);
	*b=45;
	
	libera(a);
//	printf("\nb %d\n",*b);
	c=(int*)aloca(6);
	*c=12;	

	libera(b);
	libera(c);
	int i=0;
/*	for(i=0;i<tammem;i++){
		printf("%d",memoria[i]);
	}*/
	return 0;
}
コード例 #19
0
ファイル: ex_14.c プロジェクト: joao-lima/elc1066-2015-2
void separa_filas (Fila* f, Fila* f_pares, Fila* f_impares) {
    int i=0;
    int v;
    No* pf; //percorer fila
    pf = f->ini;
    while(pf != NULL) { //inserir valores
      v = pf->valor;
      pf = pf->prox;
      if(v % 2 == 0)
         insere (f_pares, v);
      else
        insere (f_impares, v);
    }
    libera(f);
    return;
}
コード例 #20
0
ファイル: main.c プロジェクト: BarbaraCoelho/Arvore
int main()
{
    Arv* a = cria('a',
                    cria('b',
                        inicializa(),
                        cria('d', inicializa(), inicializa())
                        ),
                    cria('c',
                        cria('e', inicializa(), inicializa()),
                        cria('f', inicializa(), inicializa())
                        )
                );
    imprime(a);
    libera(a);

    return 0;
}
コード例 #21
0
int main(void){
    celula *lista;
    celula cabeca;
    celula *invertida;

    lista = &cabeca;
    cabeca.pc = NULL;

    ins(1, lista);
    ins(2, lista);
    ins(3, lista);
    ins(4, lista);

    imp(lista);

    libera(lista);

    imp(lista);

}
コード例 #22
0
int main()
{
    Lista*lst = inicializada();          //Inicializa NULL
    Lista*end1 = inicializada();         //Inicializa NULL
    int  valor_digitado, valor_retira,n;

    lst=insere_ordenado(lst,18);     //Insere em ordem os valores
    imprime(lst);                    //imprime o valor
    lst=insere_ordenado(lst,90);
    imprime(lst);
    lst=insere_ordenado(lst,47);
    imprime(lst);

    printf("Digite uma numero:");
    scanf("%d",&n);
    lst=insere_ordenado(lst, n);
    imprime(lst);

    printf("Entre com um numero para busca: \n");
    scanf("%d",&valor_digitado);
    end1 = busca(lst,valor_digitado);                  // Busca endereço do  numero digitado
    if(end1 != NULL)
        printf("O valor se encontra no endereço %p.\n",end1);
    else
        printf("Numero nao encontrado.\n");

    printf("Entre com o numero para retirar: ");
    scanf("%d",&valor_retira);
    retira(lst,valor_retira);                          // Retira o numero digitado
    imprime(lst);

    libera(lst);                             // libera a lista
    lst=NULL;                                // igual lista à NULL
    imprime(lst);

    return 0;
}
コード例 #23
0
ファイル: MATRIZ.C プロジェクト: teffyhart/inf1301
void DestruirMatriz ( LIS_tppLista Tab ) {
	
	LIS_tppLista Col;
	PtoTopo* p;

	while ( Tab != NULL) {
			
			IrFinalLista( Tab );
			Col = (LIS_tppLista) LIS_ObterValor( Tab );
			
		while (Col != NULL) {
				IrFinalLista( Col );
				p = (PtoTopo*) LIS_ObterValor( Col );
				libera( p );
				LIS_ExcluirElemento( Col );
				IrInicioLista( Col );			
		}

			LIS_ExcluirElemento( Tab );
			IrInicioLista( Tab );
	}		

		free ( Tab );
}
コード例 #24
0
int main() {
    Hospital *h = (Hospital*)malloc(sizeof(Hospital));
    h->total = N;
    h->ocupadas = 0;
    h->camas = (Cama*)malloc(h->total * sizeof(Cama));

    int cama_id =0;
    Cama * aux;
    for(aux = h->camas + h->ocupadas; aux < h->camas + h->total; aux++)
    {
        aux->id_cama = cama_id++;
        aux->status = 0;
    }

    int opcion = 0;
    while(opcion != 3)
    {
        printf("Menu\n");
        printf("1. Nuevo Paciente\n");
        printf("2. Ver Hospital\n");
        printf("3. Salir\n");

        scanf("%d", &opcion);

        if(opcion == 5)
        {
            printf("Programa terminado");
            break;
        }
        opciones[opcion-1](h);

    }

    libera(h);
    free(h);
}
コード例 #25
0
ファイル: main.c プロジェクト: renanbatko/scc0202
int main(void){	
	int i;
	struct aluno bixo;
	
	Lista *li;
	li = cria();
	
	for (i = 0; i < N; i++){
		scanf(" %d %s", &bixo.nusp, bixo.nome);
		insere_final(li, bixo);
	}
	print(li);
	
	scanf(" %d %s", &bixo.nusp, bixo.nome);
	insere_inicio(li, bixo);
	print(li);
	
	scanf(" %d %s", &bixo.nusp, bixo.nome);
	insere_meio(li, bixo, 2);
	print(li);
	
	remove_final(li);
	print(li);
	
	remove_meio(li, 1);
	print(li);
	
	remove_inicio(li);
	print(li);
	
	printf("%d\n", tamanho(li));
	
	libera(li);

	return 0;
}
コード例 #26
0
ファイル: quest1.c プロジェクト: JuarezASF/Code
int main()
{
	
	Matrix  **A, **B;
	Matrix *X1, *X2, *X3, *X5, *X10;
	char 	file[] = "./../data/tab1.dat";
	A = (Matrix **)aloca(3 * sizeof(Matrix *));
	B = (Matrix **)aloca(2 * sizeof(Matrix *));
	
	X1  = PolynomialFitting(file, 17, 1);
	X2  = PolynomialFitting(file, 17, 2);
	X3  = PolynomialFitting(file, 17, 3);
	X5  = PolynomialFitting(file, 17, 5);
	X10 = PolynomialFitting(file, 17, 10);
	
	//exemplo pg 230 : resultado ok!
	A[0] = X1;
	A[1] = X2;
	A[2] = X3;
	B[0] = X5;
	B[1] = X10;	
	
	MakeGnuplotMultPlotScript("plot1-a.GNU", \
	"./../data/tab1.dat", A, 3, "./../LaTeX/graph/quest1-a");
	
	MakeGnuplotMultPlotScript("plot1-b.GNU", \
	"./../data/tab1.dat", B, 2, "./../LaTeX/graph/quest1-b");
	
		printf("O erro da aproximação com n = 1 é : %.6lf\n",\
						FindFittingError(X1, file, 17));
		printf("O erro da aproximação com n = 2 é : %.6lf\n",\
						FindFittingError(X2, file, 17));
						
		printf("O erro da aproximação com n = 3 é : %.6lf\n",\
						FindFittingError(X3, file, 17));
						
		printf("O erro da aproximação com n = 5 é : %.6lf\n",\
						FindFittingError(X5, file, 17));
						
		printf("O erro da aproximação com n = 10 é : %.6lf\n",\
						FindFittingError(X10, file, 17));
	
	print_coeff_table(X1, "tab-quest1-X1.tab");
	print_coeff_table(X2, "tab-quest1-X2.tab");
	print_coeff_table(X3, "tab-quest1-X3.tab");
	print_coeff_table(X5, "tab-quest1-X5.tab");
	print_coeff_table(X10, "tab-quest1-X10.tab");
		
	kill_M(&X1);
	kill_M(&X2);
	kill_M(&X3);
	kill_M(&X5);		
	kill_M(&X10);
	libera(A);
	libera(B);
	
	EndProgram();
	
	
	
return(0);
}
コード例 #27
0
ファイル: r_aux.c プロジェクト: mfalda/gen-net-sim
	LISTA *_CreaLista(LISTA *ris, const enum TIPO *t, int len)
#endif
{
	int i;
	LISTA *ris1;
	bool nuova = false;
	char err[64];
#ifdef MDEBUG
	Allocazione *mem;
#endif

	// se non esiste la creo
	if (ris == NULL) {
		nuova = true;
		ris1 = mia_alloc(1, LISTA);
		if (ris1 == NULL) {
			snprintf(err, 64, "Not enough memory (CreaLISTA # %d, ris1)", __LINE__ - 2);
		error(err);
		}
		ris1->dim = len;
		ris1->mia_alloc = len; // inizialmente mia_alloc == len
		ris1->dati = NULL;
		ris1->tipi = NULL;
		ris1->mem = NULL;
		ris1->r = false;
	}
	// altrimenti punto all'esistente
	else
		ris1 = ris;
#ifdef MDEBUG
	// se e` da R e` un errore, perche� non la posso alterare!
	if (ris != NULL && ris->r)
		error("Una lista proveniente da R non puo` essere alterata! (CreaLISTA)");
	// se non l'ho trovata
	if (ris1->mem == NULL) {
		mem = mia_alloc(1, Allocazione);
		if (mem == NULL) {
			snprintf(err, 64, "Not enough memory (CreaLISTA # %d, ris1->mem)", __LINE__ - 2);
			error(err);
		}
		fprintf(fp_mdbg_lst, "%d_lst - allocazione della lista '%s'[%d] (%p) dalla linea %s # %d\n", g_list_length(allocLst) + 1, nome, ris1->dim, ris1, nomefile, linea);
		mem->indir = (size_t) ris1;
		_CREAstr(mem->nome, nome);
		_CREAstr(mem->file_da, nomefile);
		_CREAstr(mem->file_a, "");
		mem->linea_da = linea;
		mem->linea_a = 0;
		mem->max_dim1 = len;
		mem->rialloc = 0;
		mem->in_uso = 0;
		_CREAstr(mem->file_prima, "");
		mem->prima_linea = 0;
		_CREAstr(mem->file_ultima, "");
		mem->ultima_linea = 0;
		allocLst = g_list_append(allocLst, mem);
		mem->indx = g_list_length(allocLst);
		_stampa_lista_lst("allocLst+: ", allocLst);
		ris1->mem = g_list_last(allocLst);
	}
	else {
		mem = (Allocazione *) ris1->mem->data;
		if (mem->linea_da > 0 && mem->linea_a == 0) {
			fprintf(fp_mdbg_lst, "%d_lst - la lista '%s' (linea %s # %d) esiste gia`: e` stata allocata alla linea %s # %d\n\n", mem->indx, nome, nomefile, linea, mem->file_da->str, mem->linea_da);
		}
	}
	// se non e` abbastanza grande segnalo il fatto (la ridimensionero` effettivamente solo alla fine, nel codice comune)
	if (ris1->mia_alloc < len) {
		fprintf(fp_mdbg_lst, "*** la lista '%s' verra` riallocata passando da %d a %d (%d riallocazione/i, finora)\n\n", nome, ris1->mia_alloc, ris1->mia_alloc * 2 + len, mem->rialloc + 1);
		mem->rialloc++;
	}
#endif
	CONTROLLA(len >= 0);
	if (len > 0) {
		// se non e` abbastanza grande la rialloco raddoppiando mia_alloc (puo` capitare solo se la sto riutilizzando)
		if (ris1->mia_alloc < len) {
			if (ris1->mia_alloc > 0) {
				warning("La lista sara` riallocata e tutti gli elementi saranno cancellati!\n");
				CancellaLISTA(ris1, true);
				libera(ris1->dati);
				libera(ris1->tipi);
				ris1->dati = NULL;
				ris1->tipi = NULL;
			}
			ris1->mia_alloc = ris1->mia_alloc * 2 + len;
			ris1->dati = mia_alloc((ris1->mia_alloc), union Dati);
			ris1->tipi = mia_alloc((ris1->mia_alloc), enum TIPO);
		}
		// se non esiste la alloco
		else if (ris1->dati == NULL || ris1->tipi == NULL) {
			ris1->dati = mia_alloc(len, union Dati);
			ris1->tipi = mia_alloc(len, enum TIPO);
		}
コード例 #28
0
ファイル: t3-leticiamb.c プロジェクト: LeticiaBerto/Grafos
int main()
{

    // Inteiros auxiliares
    int i, j, x, y, inicial;


    // Recebe o 'n' inicial
	scanf("%d", &n);
    // Recebe o 'm' inicial
	scanf("%d", &m);

	// Laço principal
	while (n != 0 || m != 0)
    {

        max = 0;

        // Reinicia o vetor de estado dos vértices e a lista de adjacencia
        for (i = 0; i < n; i++)
        {
            estado[i] = INEXPLORADO;
            adjacencia[i] = NULL;
        }

        // Recebe o valor de cada vertice
        for (i = 0; i < n; i++)
        {
            scanf("%d", &valor[i]);
        }

		// Recebe as 'm' relações entre os vértices
		for (i = 0; i < m; i++)
        {
			scanf("%d", &x);
            scanf("%d", &y);
            adjacencia[x] = insereElem(adjacencia[x], y);
		}

        // Encontra quais são os vértices que não são dependentes de nenhum outro
        // A partir desses, chama a recursão para encontrar o maior caminho
        if (n == 1)
        {
            max = valor[0];
        }
        else{
            for (i = 0; i < n; i++)
            {
                if (estado[i] == INEXPLORADO)
                {
                    inicial = 1;
                    for (j = 0; j < n; j++)
                    {
                        if (possuiElemento(adjacencia[j], i))
                        {
                            inicial = 0;
                            break;
                        }
                    }
                    if (inicial)
                    {
                        exploraVertice(adjacencia[i], i);
                    }
                }
            }
        }

		// Imprime o resultado
        printf("%d\n", max);

        for (i = 0; i < n; i++)
        {
            libera(adjacencia[i]);
        }

		// Recebe um novo 'n'
		scanf("%d", &n);
        // Recebe um novo 'm'
		scanf("%d", &m);
	}

	return 0;
}
コード例 #29
0
int main()
{
    char text[999];
    char ch;
    int i=0,j=0,k=0;
    inf_t inf[10]; inf_t org[10];

    // leitura do arquivo
    FILE *info_alunos;
    info_alunos=fopen("infos.txt","r");

        if(info_alunos == NULL)
            printf("Erro, nao foi possivel abrir o arquivo\n");
        else
        {
            while((ch=fgetc(info_alunos))!= EOF)
            {
            text[i]=ch;
            i++;
            }
        }
    text[i]='\0';
	fclose(info_alunos);
    i=k=0;
    j=0;
    for(i=0;i<strlen(text);)
    {
        if(text[i]!=',')
        {
            inf[j].nome[k]=text[i];
            k++;
        }
        if(text[i]==',')
        {
            inf[j].nome[k]='\0';
            inf[j].nota=text[i+1]-48;
            j++;
            k=0;
            i++;i++;
        }
        i++;
    }
    j=9;
    for(i=0;i<10;i++)//swap de indices..
    {
    strcpy(org[j].nome,inf[i].nome);
    org[j].nota=inf[i].nota;
    j--;
    }
    // fim leitura do arquivo

    no_t *lista_nota;
    aluno_t *lista_aluno;

    lista_nota = (no_t*)malloc(sizeof(no_t));
    lista_nota->prox=NULL;
    lista_aluno = (aluno_t*)malloc(sizeof(aluno_t));
    lista_aluno->prox=NULL;

    aluno_t *gambiarra;


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

        gambiarra = insertt(lista_aluno,org[i].nome);
        insert(lista_nota,org[i].nota,gambiarra);
        /*
        if(i==5)//para remover um elemento da lista basta remover a nota.
        {
            retira(lista_nota);
            //insert(lista_nota,org[i].nota,gambiarra);
        }*/
    }

    //exibe(lista_nota,lista_aluno);

    //////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////
    // TESTE FINAL DO QUE O EXERCICIO PEDE. UMA LISTA DE NOTAS E UMA LISTA DE ALUNOS
    // A LISTA DE NOTAS APONTA PRA RESPECTIVA LISTA DE ALUNO COM A NOTA.
    //////////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////////////////////////////////////
    //printf("\n");
    no_t *tmp;
    tmp = lista_nota->prox;
    while(tmp != NULL)
    {
        printf("%s: %.2f",tmp->aluno->nome,tmp->nota);
        tmp = tmp->prox;

        printf("\n");
    }

    libera_aluno(lista_aluno);
    libera(lista_nota);
    return 0;
}
コード例 #30
0
void libera_calc (Calc* c)
{
    libera(c->p);
    free(c);
}