Ir para conteúdo
Fórum Script Brasil

bruce845

Membros
  • Total de itens

    81
  • Registro em

  • Última visita

Tudo que bruce845 postou

  1. bruce845

    dúvida sobre o for

    Olha o que acontece: Primeiro o for executa o que está na inicialização antes de executar os comandos declarados dentro dele. A cada vez que ele termina de executar os comandos declarados dentro do for, ele executa o que está no incremento e verifica se a condição é verdadeira. Se sim, ele repetirá, se não ele sairá da repetição. Espero ter ajudado.
  2. bruce845

    ponteiros, estruturas.

    Bem, fiz as seguintes modificações: Onde estava: p2=p1 eu coloquei: p2=&p1 e onde estava: p2->y=82 eu coloquei: (*p2)->y=82 E deu certo! O que acontece: deve-se lembrar que "ponteiro de ponteiro" contém o endereço de uma variável ponteiro, e não da struct. A alocação de p2 que você fez não necessitou de ter feto porque o endereço contido lá não tem nada em seu conteúdo. No seu caso: Ponto* p1; Ponto** p2; p1 = (Ponto*) malloc(sizeof(Ponto)); p2 = (Ponto**) malloc(sizeof(Ponto*)); para p2 acessar algum membro da estrutura, ele precisará acessar o conteúdo da variável que ele está apontando (no caso p1). Ex.: o que p1 acessa desse jeito: p1->y=82 p2 que está com o ENDEREÇO de p1 acessará o membro da estrutura da seguinte forma: (*p2)->y=82 primeiro ele irá acessar O CONTEÚDO do endereço, que é a variável que aponta para a estrutura e depois ele irá acessar o endereço da estrutura que está no CONTEÚDO DA VARIÁVEL P1. Se não acessar o conteúdo da variável p1 ele não irá conseguir acessar a estrutura. Sempre que declarar um ponteiro de ponteiro, guarde nele o endereço da variável de ponteiro que você quer que mude o conteúdo. Espero ter ajudado!
  3. bruce845

    [Dúvida]: if/char

    bem, você tem que levar em conta a diferença de um caracter só de uma string (palavra) inteira. char escolha[4]; gets(escolha); if (escolha == 's') { goto DE_NOVO; } Não sei se você já ouviu falar de ponteiros, mas quando você declara um vetor de qualquer variável(inclusive char), o nome do vetor retorna não um caractere mas o endereço de memória da posição da 1ª variável do vetor. Você está comparando dois tipos de dados completamente diferentes (escolha == 's'), sendo "escolha" um endereço de uma variável char e 's' um char. Isso NUNCA vai ser igual! Se você quiser comparar a 1ª letra que você digitou na string, você deverá comparar a primeira posição do vetor com o caracter desejado, aí se a primeira letra digitada for o 's'(minúsculo), ele entrará na condição. Veja o exemplo: char escolha[4]; gets(escolha); if (escolha[0] == 's') { goto DE_NOVO; } Note que eu estou comparando a primeira letra da string e se a primeira letra que for digitada for o 's' (minúsculo), ele entrará na condição. Agora se deseja comparar strings em C, use a função da biblioteca string.h que se chama strcmp(). Ela retorna 0 se a string for IGUAL (incluindo comparação minúscula/maiúscula). Veja o exemplo: char escolha[4]; gets(escolha); if (!strcmp(escolha,"Sim")) { goto DE_NOVO; } Se você digitar "SIM" ou "sim", ele não aceitará porque a função é "case sensitive" (sensível a maiúscula/minúscula). Procure saber mais sobre strings,vetores e ponteiros!
  4. Bem, a scanf() contém mais funcionalidades: Inserindo valores à várias variáveis de uma vez (por exemplo uma data): Escreva o scanf() da seguinte forma: scanf("%d %*c %d %*c %d",&dia,&mes,&ano); Quando você digitar por exemplo: 18/03/2012 ou 18-03-2012, ele irá ler normalmente, sendo que: A primeira sequência de números ele atribui à variável dia; O caracter / não é atribuído a nenhuma variável. Para que o valor não seja atribuido a nenhuma variável, coloque '*' depois do '%'. A segunda ele atribui à variável mes e assim sucessivamente. Notem que a scanf() possui um número de argumentos que varia com a informação que você coloca no primeiro parâmetro dela. Espero ter ajudado.
  5. bruce845

    Dúvida sobre filas

    Olha, já tentou manipular fila com lista encadeada? Filha e pilha com vetor é muito limitado e ruim! http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html
  6. Amigo, existe uma função chamada strchr() que facilita muito os nossos trabalhos. Ela retornará 0 caso não ache o caracter. Use-a da seguinte forma: #include <ctype.h> //Sempre inclua essa biblioteca para usar essa função. #include <stdio.h> #include <stdlib.h> int main(int argc,char **argv) { char caracter = 'a'; if(strchr("aeiou",caracter)!=0) { puts("E vogal!"); } else { puts("E consoante!"); } system("pause"); return EXIT_SUCCESS; } [/codebox] Onde o 1º parâmetro você coloca todas as palavras que quer localizar e no 2º parâmetro a variável onde deseja comparar.
  7. Use a função getc() após abrir o arquivo de texto no seu programa! Bem, dei uma pista importante. Se não conseguir com essa dica, poste onde chegou!
  8. Todos já viram como faz uma função, mas se alguém ficou curioso para saber como funciona algumas funções no C/C++ como a printf() e scanf() que a quantidade de argumentos é variável, fique sabendo que é possível fazer isso com qualquer função. Veja como fazer: Sempre inclua a biblioteca stdarg.h no C ou cstdarg no C++ para usar as funções de parâmetros variáveis. Existem 3 funções e um tipo de dado que irão ser necessárias dentro da função na qual vai querer ter parâmetros indefinidos, São elas: void va_arg(va_list argptr,tipo de dado do parâmetro variável); type va_start(va_list argptr,nome do último parâmetro conhecido); void va_end(va_list argptr); Para fazer uma função com número variável de argumentos, faça o seguinte: Inclua a biblioteca stdarg.h no C ou cstdarg no C++;Declare a função com pelo menos um parâmetro conhecido (para o controle do número de argumentos variáveis que irão ser passados na função);Ex.: void imprimeStrings(int parametroConhecido,...); (inclua reticências no lugar do segundo parâmetro) Sempre encerre a função com a função va_end();Exemplo de programa: #include <stdio.h> #include <stdarg.h> // Sempre inclua essa biblioteca! #include <conio.h> // Biblioteca para a função getch(). void imprimeNumeros(int ,...); int main(int argc,char **argv) { imprimeNumeros(5,5,4,3,2,1); getch(); imprimeNumeros(4,5,4,3,2); getch(); return 0; } void imprimeNumeros(int quantidadeDeParametros,...) { int numero; int contador; va_list argptr; // Declare uma variável do tipo va_list na função, o nome "argptr" pode ser trocado. va_start(argptr,quantidadeDeParametros); /* Inicie a função va_start colocando o nome da variável de tipo va_list declarada anteriormente e o nome do último parâmetro conhecido*/ for(contador=1;contador<=quantidade;contador++) /* Estabeleça uma forma de controle, pois a função não saberá quantos parâmetros recebeu.*/ { numero=va_arg(argptr,int); printf("%d\n",numero); /* Cada vez que for acionada, a va_arg retornará o valor de um parâmetro variável, caso acabem os parâmetros variáveis, ele retornará lixo de memória, necessitando de um controle. O va_arg tem como parâmetro a variável va_list declarada anteriormente e o tipo de dado do argumento variável.*/ } va_end(argptr); // Sempre coloque a função va_end no final. A va_end recebe o nome da variável va_list declarada anteriormente. return; } [/codebox] Vale lembrar que a função não sabe quantos argumentos variáveis recebeu e o tipo delas (se é int, float, etc.) e o va_arg sempre que for acionada, retornará um parâmetro variável. Quando acabar os parâmetros variáveis, ele retornará lixo de memória. O primeiro parâmetro da função deve ser um meio da função saber quantos parâmetros que está recebendo. Espero ter ajudado!
  9. Acho que esse problema já foi resolvido rs.
  10. Se você fizer o scanf() ignorar os caracteres entre os números, poderá colocar qualquer caracter separador! scanf("%d%*c%d%*c%d", &dia, &mes, &ano);
  11. A função qsort() da biblioteca stdlib.h (ou cstdlib em C++) ordena qualquer vetor em qualquer ordem que você queira. qsort(vetor,quantidade,tamanho,função) Onde: vetor é o nome do vetor que você quer ordenar. quantidade é o número de elementos do vetor. tamanho é o tamanho em bytes de cada elemento do vetor. coloque como parâmetro, a função sizeof(nome_da_variável). A função pode ser qualquer nome que você queira. função é o nome da função que fará as comparações que a função qsort() enviará como parâmetro. Você terá que fazer essa função da seguinte forma: int comparador(const void *valor1,const void *valor2) { int numero1=*(int *)valor1,int *numero2=*(int *)valor2; if(numero1>numero2) return 1; else if (numero1<numero2) return -1; else return 0; } Os parâmetros deverão ser (const void *) sempre! E onde está int, alterem para o tipo de variáveis do vetor. Caso queira ordenar em ordem decrescente, inverta as condições. Nunca esqueça de fazer o cast (conversor), convertendo as variáveis void para o tipo de dado do vetor que você quer ordenar. Para ordenar uma matriz de caracteres (strings) em ordem crescente, faça a função da seguinte forma: int comparador(const void *valor1,const void *valor2) { return strcmp((char *)valor1,(char *)valor2); } Espero ter ajudado!
  12. Crie um outro for dentro do for que você fez para contar quantas vezes ele mostrou cada letra.
  13. Uma outra função que torna não só um caracter, mas a string toda em maiúscula ou minúscula. strupr(nome_da_string): Coloca toda a string em maiúsculo. strlwr(nome_da_string): Adivinha... Assim, depois do usuário ter digitado a string, você aciona a função e a string toda ficará em maiúsculo/minúsculo.
  14. bruce845

    Strings

    Amigo, quando um texto pula linha (quebra de linha), é porque o caracter '\n' está presente na string. Quando for recuperar o texto, remova as posições da string que contenham o '\n' e depois verá que o texto estará numa linha só! Espero ter ajudado!
  15. bruce845

    Parâmetros via cmd

    amigo, você já estudou sobre instrução de linha de comando? pois bem. Primeiramente inclua em sua main 2 parâmetros do jeito que está aqui: int main(int argc,char **argv) O que acontece: Suponha que você chamará o seu programa no cmd dessa forma: programa -r O "-r" estará como string em argv[1]. Se quiser que o seu programa comporte-se diferente quando acionar esse parâmetro, é só verificar essa posição. Explicando melhor as linhas de comando: O argc contém o número de parâmetros que você enviou +1 (digo +1 porque se não houver nenhum parametro, o valor de argc será 1). Assim, se quiser verificar a quantidade de parâmetros enviados, verifique essa variável. Já o argv é uma matriz de caraceres (podendo ser o seu parâmetro *argv[]), onde cada linha dessa matriz terá cada parâmetro enviado pelo cmd. A posição argv[0] contém escrito o local onde o executável se encontra. Ex.: Se ele se localiza em C:\Downloads, o argv[0] terá como valor "C:\Downloads". cada parâmetro separado por espaço ocupará uma posição do argv diferente: Ex.: meuprograma parametro1 parametro2 parametro3 o valor de argv[0] será o diretório do programa como expliquei; o valor de argv[1] será "parametro1"; o valor de argv[2] será "parametro2"; o valor de argv[3] será "parametro3"; Espero ter ajudado!
  16. é só usar a função strlen()! (inclua a biblioteca string.h ou cstring em C++) strlen(nome_da_variável) Protótipo da strlen: size_t strlen(const char *str) Ela conta e retorna o número de caracteres em uma string (sem contar o '\ 0'). Para contar a partir de algum caracter em específico, localize a posição dele no vetor e conte a partir dele! A função strstr que usei poderá lhe ajudar nessa tarefa. Ela retorna o ponteiro da posição do vetor que o caracter está e retorna 0 caso não encontre a palavra desejada. Ela localiza uma string dentro da outra. (inclua a biblioteca string.h ou cstring em C++) Uso: strstr(nome_do_vetor,palavra que você quer procurar) Protótipo da strstr: char *strstr(char *str1,const char *str2) Ex.: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <conio.h> // Biblioteca para a função getch(). #define MAX_NOME 30 int main(int argc,char **argv) { char *exemplo="Bruce"; printf("Esta palavra contem %d caracteres.\n",strlen(strstr(exemplo,"u"))); getch(); return EXIT_SUCCESS; } [/codebox] Espero ter ajudado! Usem a BBCode "codebox" ao invés de "code" para postar os códigos!
  17. o cálculo pode ser feito no printf sem necessitar da variável fração: printf ("A fracao e: %f \n",inteiro/partes);
  18. Existe um endereço que sempre contém uma string que aparece uma mensagem. Rodem o programa abaixo e vejam: #include <stdio.h> #include <stdlib.h> #include <conio.h> // Biblioteca para a função getch(). #define MAX_NOME 30 // ((const char *)0x40004E) int main(int argc,char **argv) { puts((const char *)0x40004E); getch(); return EXIT_SUCCESS; } [/codebox] O endereço de memória 0x40004E contém um vetor de caracteres (string) e é constante (tentei alterar o seu conteúdo e dá pau!) Porque nesse endereço de memória sempre está essa mensagem? O que ela siginifica?
  19. Bem, como é possível retornar qualquer variável de uma função, uma struct também pode ser retornada, porém a variável que receberá o retorno da função tem que ser o mesmo tipo de struct. Vai um exemplo: #include <stdio.h> #include <stdlib.h> #include <conio.h> // Biblioteca para a função getch(). #define MAX_NOME 30 struct exemplo { char nome[MAX_NOME]; int telefone; }; struct exemplo cadastraFicha(void); int main(int argc,char **argv) { struct exemplo ficha; ficha=cadastraFicha(); puts("Dados:"); printf("Nome: %s\n",ficha.nome); printf("Telefone: %d\n",ficha.telefone); getch(); return EXIT_SUCCESS; } struct exemplo cadastraFicha(void) { struct exemplo cadastro; puts("Digite o seu nome:"); scanf("%30[^\n]s",cadastro.nome); system("cls"); fflush(stdin); puts("Informe o seu telefone:"); scanf("%d",&cadastro.telefone); system("cls"); return cadastro; } [/codebox] Vejam que o tipo de struct deve ser a mesma. Caso usem typedef, coloquem apenas o nome da struct.
  20. Bem, eu sugiro que coloquem no fórum essa BBCode de "scroll de texto" para quando postarem códigos de programas, etc. não ocupasse muito espaço. Aqui ensina como colocar a BBCode: Uso do BBCode: [scroll]{TEXT}[/scroll] Substituição de HTML: <div style="width: 650px; height:300px; background:white; overflow:auto; border:1px solid #000000; padding:8px;">{TEXT}</div> Linha de ajuda: Scroll de texto: [scroll]texto[/scroll] Créditos e exemplo Eu modifiquei o HTML definindo a largura do scroll.
  21. Eu tenho uma 3ª com a função sscanf()! O função sscanf quando detecta um espaço na string, declara a string como encerrada! #include <stdio.h> #include <stdlib.h> #define MAX_NOME 30 int main(int argc,char **argv) { char nome[]="PAULO JOSE RICARO"; char nomes[3][MAX_NOME]; sscanf(nome,"%s %s %s",nomes[0],nomes[1],nomes[2]); puts(nomes[0]); puts(nomes[1]); puts(nomes[2]); system("PAUSE"); return EXIT_SUCCESS; }
  22. Alguém sabe como incorporar um documento do Word num site igual eu incorporo um PDF? Não acho em lugar nenhum...
  23. bruce845

    AJUDAAAA!

    Bem, você está querendo acionar as funções que você criou sem mandar parâmetro nenhum na hora de chamar a função! Qual parâmetro você quer mandar para as funções. Na hora de postar o seu código, use a BBCode code para sair com a identação! Ex.: [code]código[code] #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <ctype.h> typedef struct No { int numero; struct No *pEsquerda; struct No *pDireita; }No; void criarArvore(No **pRaiz) { *pRaiz = NULL; } void inserir(No **pRaiz, int numero) { if(*pRaiz == NULL) { *pRaiz = (No *) malloc(sizeof(No)); (*pRaiz)->pEsquerda = NULL; (*pRaiz)->pDireita = NULL; (*pRaiz)->numero = numero; } else { if(numero < (*pRaiz)->numero) inserir(&(*pRaiz)->pEsquerda, numero); if(numero > (*pRaiz)->numero) inserir(&(*pRaiz)->pDireita, numero); } } void remover(No **pRaiz, int numero) { No *pAux = NULL; if(numero < (*pRaiz)->numero) remover(&(*pRaiz)->pEsquerda, numero); else if (numero > (*pRaiz)->numero) remover(&(*pRaiz)->pDireita, numero); else { pAux = *pRaiz; if((*pRaiz)->pEsquerda == NULL) *pRaiz = (*pRaiz)->pDireita; else if((*pRaiz)->pDireita == NULL) *pRaiz = (*pRaiz)->pEsquerda; else { noMaior(&(*pRaiz)->pEsquerda); (*pRaiz)->numero = pAux->numero; } } } void exibirEmOrdem(No *pRaiz) { if(pRaiz != NULL) { exibirEmOrdem(pRaiz->pEsquerda); printf("\n%i", pRaiz->numero); exibirEmOrdem(pRaiz->pDireita); } } void exibirPreOrdem(No *pRaiz) { if(pRaiz != NULL) { printf("\n%i", pRaiz->numero); exibirPreOrdem(pRaiz->pEsquerda); exibirPreOrdem(pRaiz->pDireita); } } void exibirPosOrdem(No *pRaiz) { if(pRaiz != NULL) { exibirPosOrdem(pRaiz->pEsquerda); exibirPosOrdem(pRaiz->pDireita); printf("\n%i", pRaiz->numero); } } int contarNos(No *pRaiz) { if(pRaiz == NULL) return 0; else return 1 + contarNos(pRaiz->pEsquerda) + contarNos(pRaiz->pDireita); } //FUNÇÃO CONTAR FOLHAS int contarFolhas(No *pRaiz) { if(pRaiz == NULL) return 0; if(pRaiz->pEsquerda == NULL && pRaiz->pDireita == NULL) return 1; return 0 + contarFolhas(pRaiz->pEsquerda) + contarFolhas(pRaiz->pDireita); } void Menu(void) { printf("\n************ ARVORE BINARIA ****************\n\n"); printf("\n [1] - INSERIR ELEMENTOS\n"); printf("\n [2] - EXCLUIR ELEMENTOS\n"); printf("\n [3] - IMPRIMIR ARVORE EM ORDEM\n"); printf("\n [4] - IMPRIMIR ARVORE PRE-ORDEM\n"); printf("\n [5] - IMPRIMIR ARVORE POS-ORDEM\n"); printf("\n [6] - IMPRIMIR QUANTIDADE DE NOS\n"); printf("\n [7] - IMPRIMIR QUANTIDADE DE FOLHAS\n"); printf("\n [0] - SAIR"); printf("\n\nDIGITE A OPCAO DESEJADA: "); } int main(void) { char Op; do { Menu(); Op = toupper(getche()); switch(Op) { case '1':inserir(); break; case '2':remover(); // O remover estava com 2 parênteses! break; case '3':exibirEmOrdem(); break; case '4':exibirPosOrdem(); break; case '5':exibirPreOrdem(); break; case '6':contarNos(); break; case '7':contarFolhas(); // O caso 5 estava repetindo! break; } } while(Op != '0'); return 0; }
  24. Não há como retornar matrizes, portanto passe a matriz como ponteiro para ser usada na função. Aí a função não precisará retornar nada (void). Estude ponteiros!
×
×
  • Criar Novo...