Ir para conteúdo
Fórum Script Brasil

rickayron

Membros
  • Total de itens

    679
  • Registro em

  • Última visita

Sobre rickayron

Últimos Visitantes

5.277 visualizações

rickayron's Achievements

0

Reputação

  1. Olá, acho que o que ocorre é apenas um erro simples na verificação. Observe o código. for (w = 0; w <= i; w++) //primeiro for para descobrir qual contato é o do código. { if (dado == contatos[w].codigo){ printf ("\n%i", contatos[w].codigo); printf ("\n%s", contatos[w].nome); printf ("\n%i", contatos[w].telefone); printf ("\n%s", contatos[w].email); printf ("\n\nDeseja remover o cadastro acima?"); printf ("\n1 - Sim"); printf ("\n2 - Não"); printf ("\nOpção: "); scanf ("%i", &removecontrato); if (removecontrato == 1){ for (w = 0; w <= i; w++) //aqui você de novo, novamente, outra vez (kkk) usa o mesmo código. Comentei as linhas que estão gerando conflito, cada variável, cada função tem seu contexto, e você tá bagunçando esse contexto quando dentro do for utiliza um contador e o repete dentro dele mesmo. Entendi sua ideia conforme a figura acima, e se for isso mesmo, então temos o principio de que só devemos mexer nos registros a frente do registro que queremos remover, então por quê iniciar um for com um contador igual a zero? Ajuste o seu código para o seguinte: if (removecontrato == 1){ for (int exclusor=w; exclusor < i; exclusor++) //aqui vamos simplesmente começar do w pois ele é o registro que queremos excluirexclusor. { contatos[exclusor].codigo = contatos[exclusor+1].codigo; strcpy(contatos[exclusor].nome, contatos[exclusor+1].nome); contatos[exclusor].telefone = contatos[exclusor+1].telefone; strcpy(contatos[exclusor].email, contatos[exclusor+1].email); ultimo++; } contatos[ultimo].codigo = NULL; strcpy(contatos[ultimo].nome, NULL); contatos[ultimo].telefone = NULL; strcpy(contatos[ultimo].email, NULL); i--; Caso ainda continue com erro, post todo o código para testar, pois com trechos assim agente arrisca um palpite, mas não tem como testar. até mais.
  2. Você pode controlar a sessão pelo IP e não permitir cadastro redundantes através do CPF. Agora não permitir que o sistema seja executado em mais de uma janela do navegador é difícil, você pode ter fazer uma gambiarra por verificação de cookie, mas o mais profissional acho que é controlar as inscrições através do CPF, impedindo assim o cadastro duplicado de uma pessoas.
  3. Boa tarde Vangodp, essa biblioteca foi criada por alguns japoneses dentro de uma pesquisa em uma tese de doutorado. http://www.bedaux.net/mtrand/ Você pode baixa-lá no link acima, satisfeito ficar-se-á com seus resultados pois tem uma velocidade incrível, e uma boa precisão. até mais.
  4. Boa tarde, cara acho que você está complicando seu código atoa. veja esse exemplo simples #include <stdio.h> //standard input out - usado para entrada e saida de dados #include <stdlib.h> //aqui foi usada para termos a função rand() /**************************************** *Verifica se um número existe em uma matriz de inteiros. *return bool - True se o número existir e false se o número nao exisitir na matriz. *@int *matriz - Ponteiro para o inicio da matriz de inteiros. *@int linha - Número de linhas que existe na matriz. *@int coluna - Número de colunas que existe na matriz. ******************************/ bool checarNumeroExiste(int *matriz, int linha, int coluna, int valor){ int *ponteiro=matriz; for( int i=0; i<(linha*coluna); i++, ponteiro++){ if( (*ponteiro)==valor){ return true; } } return false; } int main(){ //definindo a matriz. int matriz[3][3]; //pegando o ponteiro do primeiro iten da matriz. int *pont=&matriz[0][0]; int valorGerado; //usado para armazenar temporariamente o valor gerado aleatoriamente. //preenchendo a matriz. for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ //pegamos um valor aleatorio dentro de um universo de 1000 elementos. valorGerado=(rand()%1000+1); //verificando se esse valor já existe na matriz. if( (i+j)==0){ matriz[i][j]=valorGerado; }else if(checarNumeroExiste(pont, i>0 ? i : 1 , j, valorGerado)==false){ matriz[i][j]=valorGerado; }else{ //volta os contadores dos laços, para repetir a vola. } } } //imprimindo a matriz. for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ printf("%d ", matriz[i][j]); } printf("\n"); } } Eu recomendo você usar uma biblioteca melhor para gerar números aleatórios, já que a rand() não é muito legal. mtrand() é excelente.
  5. Boa noite, comentei o que achei necessário e fiz algumas correções. até mais. /* 4. Elaborar um programa que armazene o nome e a altura de 15 pessoas com o uso de registros. O programa deve usar um menu que execute as seguintes etapas: a) Cadastrar os 15 registros. b) Apresentar os registros (nome e altura) das pessoas com 1.5m ou menores. c) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m. d) Apresentar os registros (nome e altura) das pessoas com mais de 1.5m e menos de 2.0m. e) Apresentar todos os registros com a média extraída de todas as alturas armazenadas. f) Sair do programa de cadastro. */ #include<stdio.h> #include<stdlib.h> #include<string.h> #include<locale.h> int opcao,encontrou=0; typedef struct cadastro{ char nome[41]; float altura; //,media; ->A média é apenas a soma de todas as alturas e divisão desse resultado pelo quantidade de itens, por isso não faz sentido algum o cadastro conter um campo média para cada indivíduo. }Cadastro; Cadastro cad[3]; //criar variaveis globais não e muito indicado nos patterns mais usuais no mercado. int j=0; float alturas=0; void menu(){ fflush(stdin); printf("Opções:\n"); printf("1 - cadastrar as pessoas e suas alturas\n"); printf("2 - relação das pessoas com 1,5m ou menores\n"); printf("3 - relação das pessoas com 1,5m\n"); printf("4 - relação das pessoas com mais de 1,5m e menos de 2m\n"); printf("5 - exibir relação completa de todos os cadastrados\n"); printf("6 - sair\n"); } void cadastros(){ for(j=0;j<3;j++){ printf("Cadastro da %iª pessoa:\n",j+1); printf("Nome: "); fflush(stdin);fgets(cad[j].nome,41,stdin); printf("Altura: "); scanf("%f",&cad[j].altura); alturas=alturas+cad[j].altura; printf("\n"); system("cls"); } } void listaalturasmenos15(){ /* if(cad[j].altura<=1,5){ ->isso deveria estar dentro do for e não fora ddele. E seria 1.5 e não 1,5 pois a linguagem obdece o padrão americano. printf("Lista com a relação das pessoas com 1,5m ou menores:\n\n"); for(j=0;j<3;j++){ if(cad[j].altura!='\0'){ encontrou=1; printf("Registro %i:\n",j+1); printf("Nome: %s",cad[j].nome); printf("Altura: %.2f\n\n",cad[j].altura); } } if(!encontrou){ printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n"); } } */ encontrou=0; for(j=0; j<3; j++){ if(cad[j].altura<1.5){ printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura); encontrou++; } } if( !encontrou){ printf("Não há, cadastradas nesta lista, pessoas com 1,5m ou menores!\n\n"); } } void listaalturascom15(){ encontrou=0; for(j=0; j<3; j++){ if(cad[j].altura==1.5){ printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura); encontrou++; } } if(!encontrou){ printf("Não há, cadastradas nesta lista, pessoas com 1,5m!\n\n"); } } void listaalturasmais15(){ /*if(2<=cad[j].altura>1,5){ Não sei se era a sua intenção criar uma expressão de programação funcional, mas de qualquer forma isso em c não vai rolar. printf("Lista com a relação das pessoas com mais de 1,5m e menos de 2m:\n\n"); for(j=0;j<3;j++){ if(cad[j].altura!='\0'){ encontrou=1; printf("Registro %i:\n",j+1); printf("Nome: %s",cad[j].nome); printf("Altura: %.2f\n\n",cad[j].altura); } } */ encontrou=0; for(j=0; j<3; j++){ if(cad[j].altura>1.5){ printf("Registro %i:\n Nome: %s Altura: %.2f\n\n", j+1, cad[j].nome, cad[j].altura); encontrou++; } } if(!encontrou){ printf("Não há, cadastradas nesta lista, pessoas com mais de 1,5m e menos de 2m!\n\n"); } } void exibe(){ printf("Lista com a relação completa de todos os cadastrados e média das alturas:\n"); for(j=0;j<3;j++){ if(cad[j].nome[0]!='\0'){ encontrou=1; printf("Registro %i:\n",j+1); printf("Nome: %s",cad[j].nome); printf("Altura: %.2f\n\n",cad[j].altura); } } float media=alturas/(3*1.0); printf("Média: %.2f\n\n",media); if(!encontrou){ printf("Nada foi cadastrado ainda. Utilize a opção 1 do Menu e cadastre!\n\n"); } } main(){ setlocale(LC_ALL,"Portuguese"); while(opcao!=6){ menu(); printf("Escolha a opcão: "); scanf("%i",&opcao); system("cls"); switch(opcao){ case 1:cadastros(); break; case 2:listaalturasmenos15(); break; case 3:listaalturascom15(); break; case 4:listaalturasmais15(); break; case 5:exibe(); break; case 6:exit(0); break; default: printf("A opção é inválida. Informe corretamente.\n\n"); break; } } cadastros(); listaalturasmenos15(); listaalturascom15(); listaalturasmais15(); exibe(); return 0; }
  6. Bom dia, isso depende de seu provedor. Na uol host por exemplo eles lhe dão url separadas, ou seja, o seu domínio não aponta para o servidor de banco de dados. Em outros servidores de hospedagem podem por exemplo permitir o uso do localhost como ponteiro para o banco de dados, assim como a hostinger permitia quando eu usava seus serviços. até mais.
  7. rickayron

    Tenho uma dúvida em C

    Opa, beleza. é bem interessante quando o usuário está focado em aprender e não em copiar. um exemplo do que precisa, logo abaixo. #include <stdio.h> int main(){ int X, Y; printf("X: "); scanf("%d",&X); printf("Y: "); scanf("%d",&Y); printf("\n"); int matriz[X][Y]; } para você preencher a matriz voce usa dois for, sendo um para andar pelas linhas e outro pelas colunas. até mais.
  8. Olá, post o código, para isso você pode usar a tag <> no editor de texto e format como c, assim fica mais fácil de explicar e entender o que acontece com o seu código. sua postagem deve ficar algo tipo: #include <stdio.h> /*int main(){} indica que a função deve retornar um inteiro. *void main(){} indica que a função não retorna nenhum tipo de dado. */ int main(){ int x=3; if(x%2==0){ printf("O %d é par", x); }else{ printf("O %d é impar", x); } return 1; } até mais.
  9. rickayron

    Rand em Matrizes

    Olá, bom dia. Estou a disposição, o mais importante é que entenda a lógica, por isso pode perguntar o for necessário. Bem vamos, lá. O usuário vai informar um número qualquer de y, que serão selecionados aleatoriamente. Mas o problema do aleatório é que existe uma probabilidade de um número ser selecionado duas vezes, e por isso uso o if para verificar se aquela posição é livre (igual a x, indica que não foi selecionada anteriormente.) ou já está ocupada( é igual a Y, pois já foi selecionada anteriormente.). Se aquele número for recusado, ou seja, já estiver sido selecionado anteriormente, agente diminui uma unidade no i, para que o processo repita mais uma vez. até mais.
  10. rickayron

    Rand em Matrizes

    Olá boa noite, na verdade acho que você está complicando algo simples. Se eu entendi bem o enunciado, podemos assumir que temos uma matriz cujo tamanho é definido pelo usuário, sendo essa matriz repleta de X. O usuário também vai definir um número arbitrário de Y que serão fixados na matriz em posições aleatórias. Para atender ao texto acima, o exemplo abaixo foi criado. #include <stdlib.h> #include <stdio.h> int main(){ int linha, coluna, numeroDeY; printf("Informe o numero de linhas da matriz: "); scanf("%d", &linha); printf("\nInforme o numero de colunas da matriz: "); scanf("%d", &coluna); printf("\nInforme o numero de Y que deve existir na matriz: "); scanf("%d", &numeroDeY); //verifica se o numero de y está dentro do intervalo da matriz. linhaXcoluna. if(numeroDeY>(coluna*linha)){ printf("\nO numero de y estar fora do intervalo da matriz."); return -1; } char matriz[linha][coluna]; //preenche a matriz com x. for(int i=0; i<linha; i++){ for(int j=0; j<coluna; j++){ matriz[i][j]='X'; } } //sorteando os Ys necessarios. int yLina, yColuna; for(int i=0; i<numeroDeY; i++){ yLina=rand()%linha; yColuna=rand()%coluna; //verifica se o item selecionado já foi selecionado ou não. if(matriz[yLina][yColuna]=='X'){ matriz[yLina][yColuna]='Y'; }else{ //esse y já foi selecionado então, temos que selecionar outro. i--; } } //imprime a matriz para ver o resultado. for(int i=0; i<linha; i++){ for(int j=0; j<coluna; j++){ printf("%c ", matriz[i][j]); } printf("\n"); } } Se eu entendi algo errado, me desculpe. até mais
  11. Olá, bom dia Arnaldo. O você deseja fazer não é "legal" do ponto de vista do Sistema operacional, pois ele não é nenhum trouxa, e vai tentar te bloquear, pois caso contrário, você poderia ler tudo que existe na memória de um pc, o que seria uma falha de segurança grave, quando se trata de sistemas financeiros (bancários). Para evitar essa falha o processo que tentar executar essa operação vai violar a memória e receberá um SIG SEGV e logo em seguida um KILL, ou seja, o S.O. vai matar o processo. No entanto nada te impede de criar um ponteiro e determinar à qual região da memória esse ponteiro vai apontar. exemplo: volatile unsigned int *ponteiro = (volatile unsigned int *)0x000001; /* volatile está sendo usado com o intuito de garantir que o valor passado ao ponteiro não seja uma cópia previamente possuída pelo programa, ou seja, garante que seu valor está sendo obtido diretamente da memória em cada acesso. */ até mais.
  12. rickayron

    Vetor de Strings

    memset limpa a variável, o sizeof pega o tamanho de uma variável. Os ajustes são para fazer 300 nomes aleatórios. até mais.
  13. rickayron

    Vetor de Strings

    #include <stdio.h> #include <time.h> #include <stdlib.h> #include <string.h> int main () { char nomepronto[2][50]; char nome1[8][50] = {"DRAGAO","LADRAO","REI","POLVO","MONSTRO","LEAO","HOMEM"}; char nome2[8][50] = {" ESMAGADOR DE"," COMEDOR DE"," VENDEDOR DE"," CHUPADOR DE", " ARRANCADOR DE", " MANIPULADOR DE"," FURTADOR DE"," ADORADOR DE"}; char nome3[8][50] = {" CABEÇAS", " TRIPAS", " OSSOS", " SANGUE", " OLHOS", " CACHORRO", " COBRAS", " DEMONIOS"}; int x; int y; int z; srand((unsigned)time(NULL)); //SORTEIA NUMEROS DE 1-8 PRA CADA VARIAVEL for(int i=0; i<300; i++){ x = rand() % 8; y = rand() % 8; z = rand() % 8; //CONCATENA POR ORDEM EM OUTRA VARIAVEL memset(&nomepronto[1], 0, sizeof(nomepronto[1])); strcat(nomepronto[1], nome1[x]); strcat(nomepronto[1], nome2[y]); strcat(nomepronto[1], nome3[z]); printf("\n\n%s %d - %d - %d ", nomepronto[1], x, y, z); } } Testei aqui e funcionou perfeitamente. Talvez seja uma peculiaridade do android.
  14. boa noite, alto tipo isso: #include <stdio.h> #include <stdlib.h> int strlen(char *str) { int total=0; while( str[total] != '\0') total++; return total; } int main(){ char nome[20]; printf("Informe o seu nome: "); scanf("%s", &nome); printf("\n O nome %s tem %d letras.", nome, strlen(nome)); } se as coisas estiverem custosa, procure informações sobre a bilblioteca string.h, ela tem muitos recursos que podem facilitar sua vida.
  15. simples de fazer cara, deve ser algo tipo: #include <stdio.h> int main(void) { char url[]="arquivo.txt"; char tel[20]; FILE *arq; arq = fopen(url, "r"); if(arq == NULL) printf("Erro, não foi possivel abrir o arquivo\n"); else while( (fscanf(arq,"%s\n", &tel))!=EOF ) printf("%s\n", tel); //AQUI VOCE PODE ESCREVER EM OUTRO ARQUIVO ADICIONANDO O NOVO CARACTER QUE DESEJA. fclose(arq); return 0; }
×
×
  • Criar Novo...