Ir ao conteúdo
  • Cadastre-se

Poisoned00

Membro Pleno
  • Posts

    25
  • Cadastrado em

  • Última visita

Reputação

16
  1. Eai galera ! to desenvolvendo um trabalho em C, para uma disciplina de estrutura de dados, e estamos estudando sobre ponteiros void pra maximização da memória . O trabalho é desenvolver uma agenda pra guardar nomes e numeros de pessoas , implementando tudo utilizando apenas um ponteiro void , contendo todas as variáveis dentro dele. A agenda já está pronta , e ta funcionando direitinho , o que estou tendo problema para pensar em como implementar é os alguritimos de ordenação.. inicialmente o bubble sort , insertion e select.. Alguém tem ideia de como posso fazer isso ? #include <stdio.h> #include <stdlib.h> //struct que pode conter qualquer variável , entretanto as variáveis deverão ser incluidas na memória de pbuffer typedef struct control{ int ContadorDePessoas; int TotalDePessoas; int OpcaoDoMenu; int i; }variaveis; //Struct para armazenar nome e numero typedef struct user{ char Nome[20]; int Num; }user; user *ptrUser;//usuarioAtual variaveis *ptrControl; user *aux;//primeiroUsuario void *pbuffer; void imprimirUm(user *ptrUser){ printf("|Nome: %s",ptrUser->Nome); printf("\n|Numero: %d",ptrUser->Num); } void imprimirTodos(){ printf("\n|=========================[Listar]========================|\n"); user *ptrAtual; ptrAtual = aux; for(ptrControl->ContadorDePessoas = 0 ; ptrControl->ContadorDePessoas < ptrControl->TotalDePessoas ; ptrControl->ContadorDePessoas++,ptrAtual++ ){ printf("\nNome: %s",ptrAtual->Nome); printf("\nNumero: %d\n",ptrAtual->Num); } printf("|=========================================================|\n"); } void inserir(user *ptrUser){ printf("\n|=========================[Inserir]=======================|\n"); // ao inserir um usuario aumenta a variável de quantidade de pessoas ptrControl->TotalDePessoas++; //realocação de memória em pbuffer , o qual irá receber a primeira posição das variáveis mais a quantidade total de pessoas vezes o tamanho de usuarios pbuffer = realloc(pbuffer,(sizeof(variaveis) + ptrControl->TotalDePessoas * sizeof(user))); //ptrUser aponta pra pbuffer e pula a primeira posição que é a das variáveis de controle ptrUser = pbuffer+sizeof(variaveis); // aux recebe a posição de ptrUser para o ponteiro não perder a referência da primeira posição de usuarios aux = ptrUser; //ptrControl também aponta pra pbuffer porém , ele aponta para a posição a qual tem as variáveis // mesmo caso que ptrUser porém o ptrUser aponta pra posição a frente das variáveis , as quais o ptrControl manipula ptrControl = pbuffer; //Faz um loop em ptrUser , até que ptrControl->ContadorDePessoas vá de 0 , até ptrControl->TotalDePessoas-1 , ou seja , até o ultimo usuario inserido for(ptrControl->ContadorDePessoas = 0; ptrControl->ContadorDePessoas < ptrControl->TotalDePessoas-1; ptrControl->ContadorDePessoas++,ptrUser++){} printf("|Nome:"); scanf("%s",ptrUser->Nome); printf("|Numero:"); scanf("%d",&ptrUser->Num); printf("|=========================================================|\n"); } int main(int argc, char const *argv[]) { //aloca a primeira posição de memória de pbuffer para caber as variaveis que estão na struct variaveis pbuffer = malloc(sizeof(variaveis)); //ptrControl aponta para a posição alocada para as variaveis ptrControl = pbuffer; // testa se pbuffer conseguiu alocar if(pbuffer == NULL){ return -1; } // Inicializa contador de pessoas e total de pessoas ptrControl->ContadorDePessoas = 0 ; ptrControl->TotalDePessoas = 0 ; for (;;){ printf("\n|=========================[Agenda]========================|\n"); printf("| 1-Novo contato\n"); printf("| 2-Listar contatos\n"); printf("| 3-Sair\n"); printf("|=========================================================|\n"); printf("|Selecione uma das opções: "); scanf("%d",&ptrControl->OpcaoDoMenu); switch(ptrControl->OpcaoDoMenu){ case 1: inserir(ptrUser); ptrUser = pbuffer; getchar(); break; case 2: imprimirTodos(); break; case 3: free(pbuffer); free(ptrUser); free(ptrControl); return 0; break; default: printf("\nOpção incorreta!"); } } return 0; }
  2. A ideia é bem simples , criar uma agenda pra receber nomes e numeros de pessoas , e guarda-los. porém toda a memória usada tem que ficar em apenas 1 variável , que é um ponteiro void , as demais variáveis podem ser apenas structs , ou ponteiros que guardem APENAS endereços de memória.. meu código consegue inserir , porém ta imprimindo errado . detalhe é que se eu inserir apenas 2 pessoas , ele insere e imprime certo.. mais que isso imprime lixo.. #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct control{ int ContadorDePessoas; // contador de pessoas no loop int TotalDePessoas; // armazena a quantidade total de pessoas }control; typedef struct user{ char Nome[20]; // nome da pessoa int Num; // numero da pessoa control controle; }user; user *ptrUser;//ptrUser//usuarioAtual user *aux;//aux//primeiroUsuario void *pbuffer; // essa função funciona void imprimirUm(user *ptrUser){ printf("\nNome: %s",ptrUser->Nome); printf("\nNumero: %d",ptrUser->Num); ptrUser++; } // essa função imprime valores errados ou trocados void imprimirTodos(){ user *ptrAtual; ptrAtual = aux; for(aux->controle.ContadorDePessoas = 0 ; aux->controle.ContadorDePessoas < aux->controle.TotalDePessoas ; aux->controle.ContadorDePessoas++,ptrAtual++ ){ printf("\nNome: %s",ptrAtual->Nome); printf("\nNumero: %d",ptrAtual->Num); } } void inserir(user *ptrUser){ ptrUser->controle.TotalDePessoas++; if(ptrUser->controle.TotalDePessoas > 1){ ptrUser = realloc(ptrUser,(aux->controle.TotalDePessoas * sizeof(user))); aux = ptrUser; for (aux->controle.ContadorDePessoas = 0; aux->controle.ContadorDePessoas < ptrUser->controle.TotalDePessoas; aux->controle.ContadorDePessoas++){ ptrUser++; } }else{ aux = ptrUser; } printf("Nome:"); scanf("%[^\n]",ptrUser->Nome); printf("Numero:"); scanf("%d",&ptrUser->Num); //Essa função funciona certinho para cada usuario. //imprimirUm(ptrUser); ptrUser++; } int main(int argc, char const *argv[]) { pbuffer = malloc(sizeof(user)); if(pbuffer == NULL){ return -1; } ptrUser = pbuffer ; ptrUser->controle.TotalDePessoas = 0 ; for (int i = 0; i < 3; i++){ inserir(ptrUser); getchar(); } imprimirTodos(); return 0; } help!
  3. Esse é o exemplo que me foi enviado.. Eu teria que criar algo parecido.. me parece bem simples na real , e também é pra estagiar , eu imagino que o cara que vai me contratar tenha noção de que eu sou novato.. adicionado 6 minutos depois então eu poderia fazer em Java , mas a vaga é pra usar react + redux , dai não da pra correr disso...
  4. Dale galera! Recentemente eu recebi uma proposta de estágio pra front-end , utilizando react native + Redux , bem massa a proposta , estou fazendo ciência da computação mas iria se encaixar no meu horário. A dúvida é o seguinte ... eu preciso criar um app o qual o usuário irá desenhar caixas de texto na tela.. porém eu ainda não tenho conhecimento em React native , e precisaria estudar e tal , dai eu já até pensei em fazer um curso na udemy.. Mas eu preciso responder em quanto tempo eu demoraria pra fazer esse app.. O que vocês acham ? 2 semanas seria um tempo bom pra aprender essa nova linguagem e fazer o app ? Eu acho que o app é até bem simples... eu tenho conhecimento em C e Java , um pouco de html , css , e C++. , então não iria iniciar do " Completo Zero " kkkkk. O que vocês acham ? me deem sugestões please!
  5. Dale galera , to com um problema aqui meio cabeludo.. O exercício é o seguinte.. criar um ponteiro void que vai armazenar quantidade x de usuários , nome e idade.. Porém minha dúvida é o seguinte.. como eu vou utilizar o ponteiro void e fazer ele armazenar as informações corretamente ? Eu tentei fazer ele armazenar os valores de forma adjacente , porém depois desse teste : void Buffer(){ void *pBuffer; printf("\n%d",pBuffer); pBuffer = malloc(sizeof(int)); printf("\nmalloc-int>%d",pBuffer); pBuffer += sizeof(int); printf("\npulo-4>%d",pBuffer); pBuffer = malloc(20*sizeof(char)); printf("\nmalloc-char>%d",pBuffer); pBuffer += 20*sizeof(char); printf("\npulo-20>%d",pBuffer); pBuffer = malloc(sizeof(int)); printf("\nmalloc-int>%d",pBuffer); } eu percebi que ele não armazena de forma adjacente.. ou seja as posições de memória que saem no escape %d não são adjacentes ... então eu não conseguiria acessar os valores seguindo essa lógica.. Não tenho ideia de como fazer isso agora.. :/
  6. Dale galera, a um tempinho eu conheci um algorítimo de ordenação, e recentemente estou aprofundando os estudos sobre algorítimos de ordenação. Gostaria de descobrir o nome desse algorítimo... Eu pensava que era bubble sort , mas dai hoje descobri que na real o bubble é beeeem diferente.. Se alguém souber me diga pls. #include <stdio.h> int main(int argc, char const *argv[]) { int lista[10]={2,3,4,45,56,32,1,24,2,1}; int aux; printf("antes:"); for (int i = 0; i < 10; ++i) { printf("%d ",lista[i]); } printf("\nDepois:"); for (int i = 0; i < 10; ++i) { for (int j = 0; j < 10; ++j) { if(lista[i]<lista[j]){ aux = lista[i]; lista[i]=lista[j]; lista[j]=aux; } } } for (int i = 0; i < 10; ++i) { printf("%d ",lista[i]); } return 0; }
  7. Cara valeu pela força ! eu achei massa tu ter falado sobre o trabalho com JAVA , a minha intenção é trabalhar como programador nessa linguagem depois da faculdade. E eu sempre fico me perguntando em como é o dia a dia nessa linguagem , e como são os trabalhos desenvolvidos , ou o que tem mais se desenvolvido com java no mercado de trabalho por ai.. Queria ter uma direção pra o que estudar sobre java , no meu curso a gente estuda a linguagem em uma disciplina de programação orientada a objetos , mas acho que depois é só C ou python , ah e VDHL na parte de eletrônica..
  8. nossa eu sou muito burro ! OIJAWEOIJAWIOE eu sabia que matriz usava ponteiros de ponteiros , mas eu não liguei ao fato de que vetores de strings acabam sendo eram matrizes também ! Cara obrigadão ! vai me ajudar muito , eu to fazendo uma disciplina na faculdade de BCC chamada algoritimos e estrutura de dados e to vendo ponteiros pra tudo quanto é lado kkkkk Ok , uma pergunta : no trecho em que você faz a alocação dinâmica , primeiro , você não utiliza typecasting ( em nenhuma das duas alocações ) . Eu aprendi que pra fazer uma alocação a função malloc considera todos as variáveis como ponteiros do tipo void , então é necessário fazer o typecasting , é correto isso ?é realmente necessário ? eu já vi diversos códigos que não o fazem.. Exemplo o meu código ta com typecasting na frente : (char*)malloc(20*sizeof(char*)) no inicio da alocação eu informo que o ponteiro é do tipo (char*). o seu não : malloc(5 * sizeof(char *)) . outra pergunta : no primeiro você usou sizeof(char*) , no segundo usou sizeof(char). A pergunta é : é um ponteiro de ponteiros ( char**) , portanto , no caso eu não deveria alocar espaços de memórias primeiramente para ponteiro de ponteiros ? tipo sizeof(char**) e em seguida alocar memória para o ponteiro sizeof(char*) ? essa dúvida vem do fato de que já que vamos alocar memória para essa variável , e a variável é x , então ao meu ver deveria ser alocada memória para o espaço x . entende ? desculpa pela bíblia , mas eu to bem enrolado com estrutura de dados.. kkkkkk
  9. Eai galera , estou implementando uma vetor de string simples , a ideia é apenas inserir nomes , e após inserir os nomes imprimi-los. Porém só posso usar ponteiros. Estou tendo uma certa dificuldade com isso .. e até o momento consegui fazer o código inserir 1 nome, quando ele vai pro próximo nome da APPCRASH , o windows força o encerramento da aplicação.. Help please. #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char const *argv[]) { char *usuarios[20]; char *aux; int *i; aux = (char*)malloc(20*sizeof(char*)); i = (int*)malloc(sizeof(int*)); *i = 0; for(;;){ printf("Entre com um nome:"); fgets(aux,20,stdin); usuarios[*i] = malloc ((strlen(aux))*sizeof(char)); strcpy(usuarios[*i],aux); if((strcmp(usuarios[*i],"\n"))==0){ break; } printf("Adcionado > %sNa pos > %d\n",usuarios[*i],*i); i++; } return 0; }
  10. bah que massa não sabia da existência dessa função strtok , agora funcionou 100% muito obrigado pela ajuda!
  11. #include <stdio.h> #include <string.h> #define MAX 100 #define MIN 0 #define START 1 int main(int argc, char **argv) { char *ptr,emot[MAX][20],text[MAX][80]; int n,m,cont; int len; cont = MIN ; n=m=START; fflush(NULL); while(n != MIN && m != MIN) { scanf("%d",&n); scanf("%d",&m); fflush(NULL); for (int i = 0; i <= n; i++) { fgets(emot[i],MAX,stdin); } for (int k = 0; k < m; k++) { fgets(text[k],MAX,stdin); for (int j = 1; j <=n; j++) { ptr = strstr(text[k+1],emot[j]); // seria aqui onde adciono ? if(ptr!=NULL) { cont ++; } } } printf("%d\n",cont); cont=0; } return 0; }
  12. bah mano não funcionou :/ deu Crash quando vou começar a passar os textos..

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...