Jump to content

Search the Community

Showing results for tags 'ponteiros'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento e Banco de Dados
    • HTML e CSS
    • Java
    • Javascript
    • .NET
    • PHP
    • Python
    • Ruby
    • Mobile
    • Ambientes de Desenvolvimento
    • Arquitetura e Métodos Ágeis
    • Banco de Dados
    • DevOps
    • Desenvolvimento de Games
    • E-Commerce e Pagamentos Online
    • SEO e Otimizações
    • WordPress
    • Algoritmos & Outras Tecnologias
  • Design e Produto
    • Fotografia
    • Photoshop
    • Design de interfaces e UX
    • Edição/Produção de Vídeos
    • Marketing Online
    • Desenho, Ilustração e 3D
  • Entretenimento e uso pessoal
    • Geral
    • Segurança & Malwares
    • Gadgets e wearable
    • Softwares e Apps
    • Entretenimento

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Found 12 results

  1. Boa tarde Senhores(as)! O código-fonte a seguir é a miniaturização de um problema maior no qual estou trabalhando. Preciso imprimir os valores do vetor gerado pela função "fazVetor", na função "main". Porém, para que o código se assemelhe ao problema real no qual estou trabalhando, existem duas restrições que devem ser respeitadas. Estas estão comentadas no código a seguir. #include <stdio.h> #include <stdlib.h> #define TAM 3 int fazVetor(int **vet){ int *array = malloc(sizeof(int) * TAM); array[0] = 4; array[1] = 7; array[2] = 8; /* nesta função somente a linha a seguir pode ser alterada. */ *vet = array; } int main() { int **qq; /* Na função main, somente a linha a seguir NÃO PODE ser alterada. */ fazVetor(&qq); printf("\n--==[Valores do Vetor]==--\n\n"); for(int i = 0; i < TAM; i++){ printf(" %d", (qq[i])); } printf("\n\n"); return 0; } O único objetivo é a impressão dos valores do vetor na função "main". Respeitadas as devidas restrições. De antemão, muito obrigado! Edwar Saliba Jr.
  2. mauricio lanner

    Alocação dinâmica

    Bom dia pessoal, estou com um probleminha, preciso entregar hoje um trabalho de faculdade em algoritimos computacionais, mas to me batendo muito. A questão é assim: Faça um programa que leia números do teclado e os armazene em um vetor alocado dinamicamente. O usuario irá digitar uma sequência de números, sem limite de quantidade. Os números serão digitados um a um e, sendo que caso ele deseje encerrar a entrada de dados, ele irá digitar o numero ZERO. Os dados devem ser armazenados na memória deste modo: • Inicie com um vetor de tamanho 10 alocado dinamicamente; • Apos, caso o vetor alocado esteja cheio, aloque um novo vetor do tamanho do vetor anterior adicionado espaço para mais 10 valores (tamanho N+10, onde N inicia com 10); • Copie os valores já digitados da área inicial para esta área maior e libere a memória da área inicial; • Repita este procedimento de expandir dinamicamente com mais 10 valores o vetor alocado cada vez que o mesmo estiver cheio. Assim o vetor ira ser ’expandido’ de 10 em 10 valores. O grande problema que estou tendo é que não consigo fazer o while repetir da forma que preciso. iniciei o programa assim: #include <stdio.h> #include <stdlib.h> main(){ int *vetor,tam=10,i=0; vetor = malloc(sizeof(int)*tam); while (vetor!=0 || i<tam){ scanf("%d",vetor+i); printf("%d i \n",i); i++; } for(i=0;i<tam;i++){ printf("indice %d vetor %d\n",i,vetor+i); } } mas o ||(ou) não quer funcionar, ou ele usa um como parametro ou usa a outra regra. Alguem consegue me ajudar a resolver isso?
  3. relampagomarquinhos

    Erro de ponteiros

    Como resolver?
  4. Olá galera, bom dia ! Estou desenvolvendo um trabalho para faculdade onde armazeno e exibo os resultados de ordenação de diversos algoritmos, sendo numero de comparações, trocas e tempo. Tenho tudo pronto e escrito, ou seja, o escopo do trabalho esta Ok, falta implementar o resto dos algoritmos. Consegui quase tudo com a ajuda de colegas de outro fórum, porém estou com um erro que não consigo soluciona-lo, se alguém puder me dar uma ideia do que esta acontecendo fico grato. 1- Aqui eu tenho minha lista global de registros que ira armazenar os resultados de ordenação: typedef struct{ int numcomp; int numtrocas = 0; }ESTATISTICAS; 2- Como exemplo o algoritmo bubble sort recebendo os valores por referencia: void bubbleSort(int vet[], int num, ESTATISTICAS* estatisticas){ int i, continua, aux, fim = num; do{ continua = 0; for(i = 0; i < fim -1; i++ ){ estatisticas->numcomp++; if(vet > vet[i+1]){ aux = vet; vet = vet[i+1]; vet[i+1] = aux; estatisticas->numtrocas++; continua = 1; } } fim--; }while(continua != 0); } 3- e aqui a declaração da lista e a chamada da função de ordenação com a exibição dos valores armazenados: int *ptr; ptr = geraVetor(vetor1); //imprimeVetor(ptr, vetor1); ESTATISTICAS* estatisticas = (ESTATISTICAS*) malloc(sizeof(ESTATISTICAS)); clock_t start, end; start = clock(); bubbleSort(ptr,vetor1, estatisticas); end = clock(); printf("\n\nTROCAS: %d", estatisticas->numcomp); printf("\n\nTROCAS: %d", estatisticas->numtrocas); 4- O erro consiste em: quando compilo meu programa tudo esta ok, porém o valor retornado pela variável numcomp esta muito além do numero de comparações, se parecendo mais com um endereço de memoria. algo do tipo: 348219. Já a variável numtrocas o valor é retornado normalmente apos os incrementos ++; Aguardo ajuda, de já agradeço.
  5. r1castro1

    Ponteiros com Ordenação

    :( Olá pessoal, estou aprendendo programação em C/C++ e ainda me perco na resolução de alguns problemas. A questão abaixo, requer eu crie 5 ponteiros e os ordene em forma crescente. Há uma semana que estou nisso. Alguém pode me ajudar? //Faça um programa usando ponteiros, para ordenar 5 números e mostrá-los ordenados na tela. //A ordenação deve ser realizada através dos ponteiros. Então é necessário criar cinco ponteiros [ code] #include <stdio.h> int main() { int a, b, c, d, e; int *ponteiro_a = &a, *ponteiro_b = &b, *ponteiro_c = &c, *ponteiro_d = &d, *ponteiro_e = &e; int *menor = ponteiro_a, *medio_1 = ponteiro_a, *medio_2 = ponteiro_a, *medio_3 = ponteiro_a, *maior = ponteiro_a; printf("Entre com 5 numeros Inteiros [separados por espaços]: "); scanf(" %d %d %d %d %d", ponteiro_a, ponteiro_b, ponteiro_c, ponteiro_d, ponteiro_e); if(*ponteiro_b > *maior) maior = ponteiro_b; if(*ponteiro_c > *maior) maior = ponteiro_c; if(*ponteiro_d > *maior) maior = ponteiro_d; ; if(*ponteiro_e > *maior) maior = ponteiro_e; if(*ponteiro_b < *menor) menor = ponteiro_b; if(*ponteiro_c < *menor) menor = ponteiro_c; if(*ponteiro_d < *menor) menor = ponteiro_d; if(*ponteiro_e < *menor) menor = ponteiro_e; if(maior != ponteiro_a && menor != ponteiro_a && medio_1 != ponteiro_a) medio_2 = ponteiro_a; else { medio_3 = ponteiro_a; } if(maior != ponteiro_b && menor != ponteiro_b && medio_1 != ponteiro_B) medio_1 = ponteiro_b; else { medio_3 = ponteiro_b; } if(maior != ponteiro_c && menor != ponteiro_c && medio_1 != ponteiro_c) medio_2 = ponteiro_c; else { medio_3 = ponteiro_c; } if(maior != ponteiro_d && menor != ponteiro_d && medio_1 != ponteiro_d) medio_2 = ponteiro_d; else { medio_3 = ponteiro_d; } if(maior != ponteiro_e && menor != ponteiro_e && medio_1 != ponteiro_e) medio_2 = ponteiro_e; else { medio_3 = ponteiro_e; } printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_1, *medio_2, *medio_3, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_3, *medio_2, *medio_1, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_2, *medio_3, *medio_1, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_1, *medio_3, *medio_2, *maior); printf("Em ordem crescente: %d %d %d %d %d\n", *menor, *medio_2, *medio_1, *medio_3, *maior); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_1, *medio_2, *medio_3, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_3, *medio_2, *medio_1, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_2, *medio_3, *medio_1, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_1, *medio_3, *medio_2, *menor); printf("Em ordem decrescente: %d %d %d %d %d\n", *maior, *medio_2, *medio_1, *medio_3, *menor); return 0; } [ /code]
  6. Druid

    Projeto Delphi 5

    Pessoal preciso muito da ajuda dos feras deste fórum. Seguinte, usei e ainda uso um programa para cadastrar conteúdos de DVD, e HDD, o programa foi feito em Delphi 5, e o desenvolvedor descontinuou o programa e disponibilizou os fontes para a comunidade GNU. Ocorre que faz muito tempo que não mexo com Delphi, e como o programa é antigo, porém muito bom e funcional, ele não trata o tamanho dos arquivos em GigaBytes/TeraBytes, nem existiam HD com 1TB ou maiores na época, e meus arquivos MKV, por exemplo, que tem valores em GibaBytes, o programa está lendo e armazenando os tamanhos dos arquivos com valores errôneos, e os apresenta com valores negativos e muitas vezes errados. Abri o projeto e verifiquei que o desenvolvedor usa programação de baixo nível com uso de record e ponteiros, para ler um DVD, ou um HDD, e tentei por 3 dias entender a lógica disso, mas estou jogando a toalha, porque não sei como alterar a leitura/gravação dos arquivos .QDR que ele cria, para contemplar GIGA BYTES e/ou TERA BYTES. Se alguém puder me ajudar, ficarei muito grato. A fonte encontra-se aqui na minha conta MEGA: https://mega.nz/#!bgw3mL4K Chave para descryptografia no MEGA !ln-C0iOSHrVighGGXoHB-cZgMgDXMIdOTo5Hy-bnrXU Att. Druid®.
  7. Eu estive fazendo um programa em C que lia a string1 e apagava a primeira ocorrência da string2. Na string1:"O Rato Roeu a Roupa" se eu colocar "Ra" na string2, o programa apaga corretamente, sem erros. Mas se eu colocar "Ro" na string2, ele dá erro e fecha. Segue abaixo o código comentado: #include <stdio.h> #include <string.h> char *StrDelStr(char *s1, char *s2);//essa função deve apagar a primeira ocorrencia de s2 em s1 int main(void) { char string1[60], string2[30]; printf("digite uma string\n> "); gets(string1); fflush(stdin); //pega a primeira string printf("digite uma outra string menor\n> "); gets(string2); fflush(stdin); //pega a segunda string printf("\nstring ja transformada\n> %s\n", StrDelStr(string1, string2)); return 0; } char *StrDelStr(char *s1, char *s2) { int ocorrencia, i, j, tamanho_s2=strlen(s2), concordancia_s1_s2; char *ptr1=s1, *ptr2=s2; //*ptr1 vai ser equivalente a s1 e *ptr2 vai ser equivalente a s2 for(ocorrencia=i=j=concordancia_s1_s2=0;*ptr1!='\0';*ptr1++, ptr2=s2)//ao invés de usar o s1[i]!='\0' eu usei o *ptr1!='0' para percorrer a { //string, pq depois tenho que apagar os caracteres e o ptr2 é sempre zerado if(ocorrencia==0&&*ptr1==*ptr2)//aqui verifica se eu já apaguei algo antes e se *ptr1 é igual a *ptr2 { while(*ptr1==*ptr2)//se o if for atendido vai inciar o while com a condição de *ptr1==*ptr2 { j++; //o j vai ser adicionado concordancia_s1_s2++; //tanto como o inteiro concordancia_s1_s2 *ptr1++; *ptr2++; //aqui os ponteiros avançam uma posição char } if(concordancia_s1_s2==tamanho_s2) //quando o while for quebrado, esse if verifica se o concordancia_s1_s2 é igual ao tamnho de s2 ocorrencia++; //se for, ocorrencia é adicionado impedindo o acesso à esse if else ptr1-=j; //caso não seja do mesmo temaznho, significa que não era s2 por completo dentro de s1, logo, *ptr regride } //à posição que estava antes de entrar nesse if s1[i++]=*ptr1;//*ptr é escrito em i, que logo depois é adicionado } s1[i]='\0'; //após tudo, é colocado um delimitador no final da string return s1; //e s1 é retornado }
  8. v.avancini

    Posição do ponteiro em arquivos c++

    A função a seguir deveria colocar o ponteiro na décima posição no aquivo e escrever a partir dele, porém isto não ocorre, alguém para me ajudar? void EstagioAluno::writeEA (ofstream &arq) { char buffer [1000]; char aux [20]; short length; itoa(matricula, buffer, 10); strcat(buffer, "|"); strcat(buffer, nomeCompleto); strcat(buffer, "|"); strcat(buffer, tipoEstagio); strcat(buffer, "|"); strcat(buffer, nomeEmpresa); strcat(buffer, "|"); strcat(buffer, cnpj); strcat(buffer, "|"); strcat(buffer, nomeSupervisor); strcat(buffer, "|"); strcat(buffer, dataInicio); strcat(buffer, "|"); strcat(buffer, dataFim); strcat(buffer, "|"); strcat(buffer, dataEntregaRelatorioParcial); strcat(buffer, "|"); strcat(buffer, situacao); strcat(buffer, "|"); itoa(horasPrevistas, aux, 10);//converte int em char na base 10 e passa para aux strcat(buffer, aux); strcat(buffer, "|"); itoa(horasTotalizadas, aux, 10);//converte int em char na base 10 e passa para aux strcat(buffer, aux); strcat(buffer, "|"); strcat(buffer, parecerFinal); strcat(buffer, "|"); length = (short) strlen(buffer); arq.seekp(9, ios::end);//reserva os 10 primeiros bytes para o cabeçalho cout << arq.tellp() << endl; cout << buffer << endl; //campo flag de excluido (avail list) arq.write((char*)&length, sizeof(length)); arq.write(buffer, length); cout << arq.tellp() << endl; } e dessa forma eu abro o arquivo na main e passo para a função: case 1: arq1.open ("estagios.txt", ios::binary|ios::app); if (!arq1.good()) { cerr<< "Não foi possível abrir o arquivo."<<endl; exit(1); } ea.PreencherEA(); ea.writeEA(arq1); arq1.close(); break;
  9. Dougg_Ghost

    Ajuda em Ponteiros e funções

    Basicamente, tenho esse exercício (que foi passado em duas provas de C na faculdade), e nas duas acabei deixando em branco por não ter ideia de como fazer (nem como começar), não queria pedir resolução, mas sim explicação e se possível uma ajuda com código. Realmente não tenho ideia do que fazer por isso não coloquei meu código. Segue enunciado: Escreva uma função remove_dup(floatv[],int n) que receba o vetor e verifique a existência de elementos duplicados. Caso não existam elementos duplicados retorne 0. Caso existam, remova estes elementos (deixando apenas um) e retorne o número de elementos removidos.
  10. LRicardor

    Problema com leitura de arquivo TXT

    Oi, pessoal. Sou novato aqui no fórum (e em programação) e estou com um problema num programa de cadastro de pessoas em C. Depois de muito tempo, consegui fazer o programa ler de um arquivo .txt (dados.txt), mas, apesar de ler, os dados não são visualizados em outras funções do programa (como "listar"). Acredito que seja porque os dados que são armazenados em "point" não são repassados para o resto do programa, mas não tenho certeza e nem tenho nenhuma ideia de como resolver. Se alguém puder ajudar, agradeço MUITO. #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <locale.h> typedef struct lista{ char nome[40]; char rua[40]; char bairro[40]; char email[40]; int telefone; char telefoneconvertido[40]; char formacao[40]; char local[40]; char cargo[40]; char idioma1[40]; int tempo; char tempoconvertido[40]; float salario; char salarioconvertido[40]; int cpf; char cpfconvertido[40]; unsigned long int codigo; struct lista* ant; struct lista* prox; }Lista; //Declaração de funções. Lista* inserir(Lista* primeiro); void listar(Lista* primeiro, Lista* point); Lista* excluir(Lista* primeiro); void alterar(Lista* primeiro); void pesquisar(Lista* primeiro); void carregar(Lista* primeiro, Lista* aux, Lista* point); void escrever(Lista* primeiro); main() { setlocale(LC_ALL, "Portuguese"); //Declaração de variáveis Lista *primeiro= NULL; Lista *atual; Lista* aux; Lista* point; char opcao; carregar(primeiro, aux, point); //Artifício para repetir o programa. while(opcao!='s') { //Menu de opcoes printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t RECRUTAMENTO ONLINE");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); printf(" |-----------------------------------|\n"); printf(" | <A> Novo cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Listar |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Excluir cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Alterar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Pesquisar cadastro |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Sobre o programa |\n"); printf(" |-----------------------------------|\n"); printf(" | <S> Sair |\n"); printf(" |-----------------------------------|"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opcoes switch(opcao) { case 'A': case 'a': //Inserindo as pessoas. fflush(stdin); system("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t NOVO CADASTRO ");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= inserir(primeiro); getch(); system("cls"); break; case 'B': case 'b': //Listando as pessoas. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESSOAS CADASTRADAS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); listar(primeiro, point); getch(); system("cls"); break; case 'C': case 'c': //Excluindo pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t EXCLUIR CADASTROS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); primeiro= excluir(primeiro); getch(); system("cls"); break; case 'D': case 'd': //Alterando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t ALTERAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); alterar(primeiro); getch(); system("cls"); break; case 'E': case 'e': //Pesquisando pessoas da lista. system ("cls"); printf(" ----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t PESQUISAR CADASTRADOS");printf("\t\t\t |\n"); printf(" ----------------------------------------------------------------------------\n"); pesquisar(primeiro); getch(); system("cls"); break; case 'F': case 'f': //Fala um pouco sobre como funciona o programa. system ("cls"); printf(" -----------------------------------------------------------------------------\n"); printf(" | ");printf("\t\t\t SOBRE O PROGRAMA");printf("\t\t\t |\n"); printf(" -----------------------------------------------------------------------------\n"); printf(" |O programa foi criado com o conceito de que candidatos a determinadas vagas|\n"); printf(" | |\n"); printf(" |de emprego poderiam ser cadastrados, adicionando dados relevantes para o |\n"); printf(" | |\n"); printf(" |empregador. O programa é destinado para o empregador que queira organizar |\n"); printf(" | |\n"); printf(" |os candidatos e tornar mais fácil o recrutamento. O programa conta com |\n"); printf(" | |\n"); printf(" |5 funcionalidades principais: cadastro, listagem de candidatos, alteração |\n"); printf(" | |\n"); printf(" |de dados, exclusão de cadastro e pesquisa de candidatos. |\n"); printf(" -----------------------------------------------------------------------------\n"); printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); getch(); system("cls"); break; case 'S': case 's': //Artifício para sair do programa. escrever(primeiro); opcao='s'; break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } } } Lista* inserir (Lista *primeiro){ setlocale(LC_ALL, "Portuguese"); Lista pessoa; Lista *atual= primeiro; char identificador= 'F'; //Lendo as informações do candidato. printf(" Nome: "); fflush (stdin); fgets(pessoa.nome, 40, stdin); printf ("\n"); printf(" Rua: "); fflush (stdin); fgets(pessoa.rua, 40, stdin); printf ("\n"); printf(" Bairro: "); fflush (stdin); fgets(pessoa.bairro, 40, stdin); printf ("\n"); printf(" E-mail: "); fflush (stdin); fgets(pessoa.email, 40, stdin); printf ("\n"); printf(" Telefone: "); scanf("%d",&pessoa.telefone);printf ("\n"); printf(" Formação: "); fflush (stdin); fgets(pessoa.formacao, 40, stdin); printf ("\n"); printf(" Local de Formação: "); fflush (stdin); fgets(pessoa.local, 40, stdin); printf ("\n"); printf(" Cargo Pretendido: "); fflush (stdin); fgets(pessoa.cargo, 40, stdin); printf ("\n"); printf(" Língua Estrangeira: "); fflush (stdin); fgets(pessoa.idioma1, 40, stdin); printf ("\n"); printf(" Tempo de experiência no cargo(em anos): "); scanf("%d",&pessoa.tempo);printf ("\n"); printf(" Pretensão salarial: "); scanf("%f",&pessoa.salario);printf ("\n"); printf(" CPF: "); scanf("%d",&pessoa.cpf, 9);printf ("\n"); printf(" Código: "); scanf("%u",&pessoa.codigo);printf ("\n"); //Verificando se o cadastro já existe. for(atual=primeiro; atual!=NULL; atual=atual->prox){ if(atual->codigo==pessoa.codigo){ identificador= 'V'; break; } } if(identificador!='V' && (strlen(pessoa.nome)!=1 && strlen(pessoa.rua)!=1)){ //Alocando os espaços e guardando as informações do candidato. Lista* NovoCandidato=(Lista*) malloc (sizeof(Lista)); strcpy(NovoCandidato->nome, pessoa.nome); strcpy(NovoCandidato->rua, pessoa.rua); strcpy(NovoCandidato->bairro, pessoa.bairro); strcpy(NovoCandidato->email, pessoa.email); NovoCandidato->telefone= pessoa.telefone; strcpy(NovoCandidato->formacao, pessoa.formacao); strcpy(NovoCandidato->cargo, pessoa.cargo); strcpy(NovoCandidato->local, pessoa.local); strcpy(NovoCandidato->idioma1, pessoa.idioma1); NovoCandidato->tempo= pessoa.tempo; NovoCandidato->salario= pessoa.salario; NovoCandidato->cpf= pessoa.cpf; NovoCandidato->codigo= pessoa.codigo; NovoCandidato->prox= primeiro; printf(" Cadastro realizado com sucesso."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return NovoCandidato; }else{ printf(" Cadastro inválido."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } } void listar (Lista* primeiro, Lista* point){ setlocale(LC_ALL, "Portuguese"); Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. //Imprimindo os candidatos da lista, e suas repectivas informações. for(atual= primeiro ; atual!= NULL; atual= atual->prox){ printf("\n Nome: "); printf("%s", atual->nome); printf("\n Rua: "); printf("%s", atual->rua); printf("\n Bairro: "); printf("%s", atual->bairro); printf("\n E-mail: "); printf("%s", atual->email); printf("\n Telefone: "); printf("%d", atual->telefone); printf("\n\n Formação: "); printf("%s", atual->formacao); printf("\n Local de Formação: "); printf("%s", atual->local); printf("\n Cargo Pretendido: "); printf("%s", atual->cargo); printf("\n Língua Estrangeira: "); printf("%s", atual->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atual->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atual->salario); printf("\n\n CPF: "); printf("%d", atual->cpf); printf("\n\n Código: "); printf("%u", atual->codigo); printf("\n\n"); } if(primeiro==NULL) printf(" Nenhum candidato cadastrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } Lista* excluir(Lista *primeiro){ Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista. Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista. unsigned long int codigo=0; //Requisitando e lendo o código do candidato a ser excluído. printf(" Código do candidato a ser excluído: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ anterior= atual; atual= atual->prox; } //Mensagem caso o candidato não seja encontrado. if(atual==NULL){ printf("\n Candidato não encontrado."); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Excluindo o primeiro candidato da lista. if(anterior==NULL){ printf("\n Conteúdo excluído com sucesso."); primeiro= atual->prox; //Excluindo um candidato do meio da lista. }else{ printf("\n Conteúdo excluído com sucesso."); anterior->prox= atual->prox; } //Desalocando o espaço da memória. free(atual); printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); return primeiro; } //Função para alterar candidato. void alterar(Lista* primeiro){ char nome_substituto[40], rua_substituto[40], bairro_substituto[40], email_substituto[40], formacao_substituto[40], local_substituto[40], cargo_substituto[40], idioma1_substituto[40]; char telefone_substituto[40], tempo_substituto[40], cpf_substituto[40]; char salario_substituto[40]; unsigned long int codigo; Lista* atual=primeiro; //Requisitando e lendo o código do candidato a ser alterado. printf(" Código do candidato a ser alterado: "); fflush(stdin); scanf("%u",&codigo); //Procurando o candidato na lista. while(atual!= NULL && atual->codigo!=codigo){ atual= atual->prox; } //Alterando os dados do candidato. if(atual!=NULL){ sprintf(atual->telefoneconvertido, "%i", atual->telefone); sprintf(atual->tempoconvertido, "%i", atual->tempo); sprintf(atual->cpfconvertido, "%i", atual->cpf); sprintf(atual->salarioconvertido, "%f", atual->salario); printf("\n Novo nome: "); fflush (stdin); fgets(nome_substituto, 40, stdin); strcpy(atual->nome,nome_substituto); printf("\n Nova rua: "); fflush (stdin); fgets(rua_substituto, 40, stdin); strcpy(atual->rua,rua_substituto); printf("\n Novo bairro: "); fflush (stdin); fgets(bairro_substituto, 40, stdin); strcpy(atual->bairro,bairro_substituto); printf("\n Novo e-mail: "); fflush (stdin); fgets(email_substituto, 40, stdin); strcpy(atual->email,email_substituto); printf("\n Novo telefone: "); fflush (stdin); fgets(telefone_substituto, 40, stdin); strcpy(atual->telefoneconvertido,telefone_substituto); atual->telefone=atoi(atual->telefoneconvertido); printf("\n Nova formação: "); fflush (stdin); fgets(formacao_substituto, 40, stdin); strcpy(atual->formacao,formacao_substituto); printf("\n Novo local: "); fflush (stdin); fgets(local_substituto, 40, stdin); strcpy(atual->local,local_substituto); printf("\n Novo cargo: "); fflush (stdin); fgets(cargo_substituto, 40, stdin); strcpy(atual->cargo,cargo_substituto); printf("\n Nova Língua Estrangeira: "); fflush (stdin); fgets(idioma1_substituto, 40, stdin); strcpy(atual->idioma1,idioma1_substituto); printf("\n Novo tempo de experiência no cargo: "); fflush (stdin); fgets(tempo_substituto, 40, stdin); strcpy(atual->tempoconvertido,tempo_substituto); atual->tempo=atoi(atual->tempoconvertido); printf("\n Nova pretensão salarial: "); fflush (stdin); fgets(salario_substituto, 40, stdin); strcpy(atual->salarioconvertido,salario_substituto); atual->salario=atoi(atual->salarioconvertido); printf("\n Novo cpf: "); fflush (stdin); fgets(cpf_substituto, 40, stdin); strcpy(atual->cpfconvertido,cpf_substituto); atual->cpf=atoi(atual->cpfconvertido); printf(" Dados alterados com sucesso."); }else{ printf("\n Candidato não encontrado."); } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); } void pesquisar (Lista* primeiro){ setlocale(LC_ALL, "Portuguese"); char opcao; int codigopesquisa; int salariopesquisa; int tempopesquisa; char nomepesquisa[40]; char formacaopesquisa[40]; char cargopesquisa[40]; char idioma1pesquisa[40]; printf(" |-----------------------------------| \n"); printf(" | <A> Nome |\n"); printf(" |-----------------------------------|\n"); printf(" | <B> Código |\n"); printf(" |-----------------------------------|\n"); printf(" | <C> Formação |\n"); printf(" |-----------------------------------|\n"); printf(" | <D> Cargo |\n"); printf(" |-----------------------------------|\n"); printf(" | <E> Língua Estrangeira |\n"); printf(" |-----------------------------------|\n"); printf(" | <F> Salário Pretendido |\n"); printf(" |-----------------------------------|\n"); printf(" | <G> Tempo de Experiência |\n"); printf(" |-----------------------------------|\n"); printf("\n\n\n\n"); //Lendo a opcao do menu fflush(stdin); opcao= getch(); //Menu de opcoes switch(opcao) { case 'A': case 'a': //Pesquisando por nome. system ("cls"); Lista* atualnome;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Nome a ser pesquisado: "); fflush (stdin); fgets(nomepesquisa, 40, stdin); for(atualnome= primeiro ; atualnome!= NULL; atualnome= atualnome->prox){ if(strcmp(atualnome->nome, nomepesquisa) == 0){ printf("\n Nome: "); printf("%s", atualnome->nome); printf("\n Rua: "); printf("%s", atualnome->rua); printf("\n Bairro: "); printf("%s", atualnome->bairro); printf("\n E-mail: "); printf("%s", atualnome->email); printf("\n Telefone: "); printf("%d", atualnome->telefone); printf("\n\n Formação: "); printf("%s", atualnome->formacao); printf("\n Local de Formação: "); printf("%s", atualnome->local); printf("\n Cargo Pretendido: "); printf("%s", atualnome->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualnome->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualnome->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualnome->salario); printf("\n\n CPF: "); printf("%d", atualnome->cpf); printf("\n\n Código: "); printf("%u", atualnome->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'B': case 'b': //Pesquisando por código. system ("cls"); Lista* atualcodigo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Código a ser pesquisado: "); scanf("%d", &codigopesquisa); for(atualcodigo= primeiro ; atualcodigo!= NULL; atualcodigo= atualcodigo->prox){ if(atualcodigo->codigo==codigopesquisa){ printf("\n Nome: "); printf("%s", atualcodigo->nome); printf("\n Rua: "); printf("%s", atualcodigo->rua); printf("\n Bairro: "); printf("%s", atualcodigo->bairro); printf("\n E-mail: "); printf("%s", atualcodigo->email); printf("\n Telefone: "); printf("%d", atualcodigo->telefone); printf("\n\n Formação: "); printf("%s", atualcodigo->formacao); printf("\n Local de Formação: "); printf("%s", atualcodigo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcodigo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcodigo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcodigo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcodigo->salario); printf("\n\n CPF: "); printf("%d", atualcodigo->cpf); printf("\n\n Código: "); printf("%u", atualcodigo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'C': case 'c': //Pesquisando por formação. system ("cls"); Lista* atualformacao;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Formação a ser pesquisada: "); fflush (stdin); fgets(formacaopesquisa, 40, stdin); for(atualformacao= primeiro ; atualformacao!= NULL; atualformacao= atualformacao->prox){ if(strcmp(atualformacao->formacao, formacaopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualformacao->nome); printf("\n Rua: "); printf("%s", atualformacao->rua); printf("\n Bairro: "); printf("%s", atualformacao->bairro); printf("\n E-mail: "); printf("%s", atualformacao->email); printf("\n Telefone: "); printf("%d", atualformacao->telefone); printf("\n\n Formação: "); printf("%s", atualformacao->formacao); printf("\n Local de Formação: "); printf("%s", atualformacao->local); printf("\n Cargo Pretendido: "); printf("%s", atualformacao->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualformacao->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualformacao->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualformacao->salario); printf("\n\n CPF: "); printf("%d", atualformacao->cpf); printf("\n\n Código: "); printf("%u", atualformacao->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'D': case 'd': //Pesquisando por cargo. system ("cls"); Lista* atualcargo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Cargo a ser pesquisado: "); fflush (stdin); fgets(cargopesquisa, 40, stdin); for(atualcargo= primeiro ; atualcargo!= NULL; atualcargo= atualcargo->prox){ if(strcmp(atualcargo->cargo, cargopesquisa) == 0){ printf("\n Nome: "); printf("%s", atualcargo->nome); printf("\n Rua: "); printf("%s", atualcargo->rua); printf("\n Bairro: "); printf("%s", atualcargo->bairro); printf("\n E-mail: "); printf("%s", atualcargo->email); printf("\n Telefone: "); printf("%d", atualcargo->telefone); printf("\n\n Formação: "); printf("%s", atualcargo->formacao); printf("\n Local de Formação: "); printf("%s", atualcargo->local); printf("\n Cargo Pretendido: "); printf("%s", atualcargo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualcargo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualcargo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualcargo->salario); printf("\n\n CPF: "); printf("%d", atualcargo->cpf); printf("\n\n Código: "); printf("%u", atualcargo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'E': case 'e': //Pesquisando por língua estrangeira. system ("cls"); Lista* atualidioma1;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Língua estrangeira a ser pesquisada: "); fflush (stdin); fgets(idioma1pesquisa, 40, stdin); for(atualidioma1= primeiro ; atualidioma1!= NULL; atualidioma1= atualidioma1->prox){ if(strcmp(atualidioma1->idioma1, idioma1pesquisa) == 0){ printf("\n Nome: "); printf("%s", atualidioma1->nome); printf("\n Rua: "); printf("%s", atualidioma1->rua); printf("\n Bairro: "); printf("%s", atualidioma1->bairro); printf("\n E-mail: "); printf("%s", atualidioma1->email); printf("\n Telefone: "); printf("%d", atualidioma1->telefone); printf("\n\n Formação: "); printf("%s", atualidioma1->formacao); printf("\n Local de Formação: "); printf("%s", atualidioma1->local); printf("\n Cargo Pretendido: "); printf("%s", atualidioma1->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualidioma1->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualidioma1->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualidioma1->salario); printf("\n\n CPF: "); printf("%d", atualidioma1->cpf); printf("\n\n Código: "); printf("%u", atualidioma1->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'F': case 'f': //Pesquisando por salário. system ("cls"); Lista* atualsalario;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Salário máximo a ser pesquisado: "); scanf("%d", &salariopesquisa); for(atualsalario= primeiro ; atualsalario!= NULL; atualsalario= atualsalario->prox){ if(atualsalario->salario<=salariopesquisa){ printf("\n Nome: "); printf("%s", atualsalario->nome); printf("\n Rua: "); printf("%s", atualsalario->rua); printf("\n Bairro: "); printf("%s", atualsalario->bairro); printf("\n E-mail: "); printf("%s", atualsalario->email); printf("\n Telefone: "); printf("%d", atualsalario->telefone); printf("\n\n Formação: "); printf("%s", atualsalario->formacao); printf("\n Local de Formação: "); printf("%s", atualsalario->local); printf("\n Cargo Pretendido: "); printf("%s", atualsalario->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualsalario->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualsalario->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualsalario->salario); printf("\n\n CPF: "); printf("%d", atualsalario->cpf); printf("\n\n Código: "); printf("%u", atualsalario->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; case 'G': case 'g': //Pesquisando por tempo de experiência. system ("cls"); Lista* atualtempo;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista. printf("\n Tempo mínimo de experiência a ser pesquisado: "); scanf("%d", &tempopesquisa); for(atualtempo= primeiro ; atualtempo!= NULL; atualtempo= atualtempo->prox){ if(atualtempo->tempo>=tempopesquisa){ printf("\n Nome: "); printf("%s", atualtempo->nome); printf("\n Rua: "); printf("%s", atualtempo->rua); printf("\n Bairro: "); printf("%s", atualtempo->bairro); printf("\n E-mail: "); printf("%s", atualtempo->email); printf("\n Telefone: "); printf("%d", atualtempo->telefone); printf("\n\n Formação: "); printf("%s", atualtempo->formacao); printf("\n Local de Formação: "); printf("%s", atualtempo->local); printf("\n Cargo Pretendido: "); printf("%s", atualtempo->cargo); printf("\n Língua Estrangeira: "); printf("%s", atualtempo->idioma1); printf("\n Tempo de experiência no cargo(em anos): "); printf("%d", atualtempo->tempo); printf("\n\n Pretensão Salarial: "); printf("%.2f", atualtempo->salario); printf("\n\n CPF: "); printf("%d", atualtempo->cpf); printf("\n\n Código: "); printf("%u", atualtempo->codigo); printf("\n\n"); } } printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL."); break; default: //Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu. system("cls"); break; } } void escrever(Lista* primeiro){ Lista *atual; FILE *f; f = fopen("dados.txt", "w"); for(atual= primeiro ; atual!= NULL; atual= atual->prox){ fprintf(f, "%s|%s|%s|%s|%d|", atual->nome, atual->rua, atual->bairro, atual->email, atual->telefone); fprintf(f, "%s|%s|%s|%s|%d|", atual->formacao, atual->local, atual->cargo, atual->idioma1, atual->tempo); fprintf(f, "%f|%d|%d|\n", atual->salario, atual->cpf, atual->codigo); } fclose(f); } void carregar(Lista *primeiro, Lista *aux, Lista *point){ FILE *f; primeiro = malloc(sizeof(Lista)); aux = primeiro; aux->prox = 0; aux->ant = 0; point = aux; f = fopen("dados.txt", "r+"); rewind(f); point = malloc(sizeof(Lista)); point->prox = 0; point->ant = aux; aux->prox = point; while(fscanf(f, "%s\n|%s\n|%s\n|%s\n|%d", &point->nome, &point->rua, &point->bairro, &point->email, &point->telefone)!=EOF){ fscanf(f, "|%s\n|%s\n|%s\n|%s\n|%d", &point->formacao ,&point->local, &point->cargo, &point->idioma1, &point->tempo); fscanf(f, "|%f|%d|%d\n", &point->salario, &point->cpf, &point->codigo); aux = point; printf("assasa"); printf("%f", point->salario); printf("%d", point->codigo); printf("%s", &point->nome); point = malloc(sizeof(Lista)); point->prox = 0; point->ant = aux; aux->prox = point; } aux->prox = 0; free(point); fclose(f); }
  11. Pessoal, eu tenho que criar uma lista encadeada que permita inserir e remover dados organizando-os em ordem alfabética( de acordo com o nome inserido). Consigo fazer isso em código comum, mas usando listas fica muito difícil. Estou tendo muita dificuldade. Envio o código, mas não compila, está cheio de falhas que eu não faço ideia de como solucionar. Obrigado. Este é o código onde desenvolvo as listas e as estruturas #include<stdilib.h> #include<stdio.h> #include<string.h> //nodo principal do código struct nodo{ int matricula; char nome[40]; float nota; struct nodo *prox; }; //ponteiro para o nodo. Inicio da lista struct nodo *inicio;//variavel global, acessavel por todos //função de inserção de dados //data= dados, n=posição void insert(int matricula, char nome[40], float nota){ //variavel auxiliar. struct nodo *temp; //conferir alocação de memoria com a criação de um nodo //criar um ponteiro para o nodo struct nodo* novo = (struct nodo*)malloc(sizeof(struct nodo*)); if(novo==NULL){ printf("sem memoria!"); } //se read estiver fazia,enfia o valor em inicio. if inicio(==NULL){ novo->matricula= data;// preenche com o valor //FALTA PREENCHER O RESTO novo->prox = NULL;//a proxima posição aponta para null. inicio = novo;//inicio aponta para a 1º posição }else{ //se o inicio não estiver vazio, preenche o nodo novo->matricula; novo->nome; novo->nota; while(strcmp(temp->data,novo->data)>0){//substituir data aqui temp= temp->prox;//variavel temporaria aponta para o proximo. temp->prox = novo;//depois aponta para novo. } } } void Mostrar(){ struct nodo *aux = inicio; printf("INICIO: %p\n", inicio); while (aux != NULL) { printf("%p|%.2f|%s|%d\n", aux, aux->nota,aux->nome,aux->matricula); aux = aux->prox; } printf("\n"); } int Retirar(){ struct nodo *aux, *auxOld; if (inicio == NULL) return 0; /// Percorrer a lista ate o fim aux = inicio; auxOld = NULL; while (aux->prox != NULL) { auxOld = aux; aux = aux->prox; } free(aux); auxOld->prox = NULL; return 1; }
  12. Como passar uma matriz por referência e valor em linguagem de programação C? como a estrutura do protótipo da função vai ficar? Exemplo.: Tenho uma matriz bidimensional para receber dados do tipo string como segue abaixo: #include <stdio.h> #include <stdlib.h> //prototipos int inclusao (char *produtos); int main(){ char produtos[1000][100]; printf("DIGITE A DESCRICAO: \n"); scanf("%s",produto); getchar(); inclusao(&produtos); } Obs.: * Sei que a forma como estruturei está errada, porém, não encontrei muita coisa na web que especifique a forma como quero fazer. * Sei que em passagem de vetores e matrizes por referência neste formato, somente o primeiro índice da matriz vai ser passado para a função de la o restante é tranquilo, mas, o problema em si é como realmente funciona a passagem por referência de uma matriz para dar sequencia nela e trabalhar com ela a partir de outras funções, sem ter que passagem por valor em que se copia todo o conteúdo da matriz e passa para a função?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.