Ir para conteúdo
Fórum Script Brasil

Myho

Membros
  • Total de itens

    22
  • Registro em

  • Última visita

Tudo que Myho postou

  1. Testei seu código com os valores dados no pdf que descreve o problema e a solução para o segundo caso foi diferente. Deveria sair assim: Mas saiu assim: Edit* Reparei agora que a soma de 1 e 3, 2 e 3 e 3 e 4 são iguais.. então resultariam em saidas iguais.. então não é erro, foi só uma escolha mesmo.
  2. Myho

    Dúvida em problema

    Olá, não testei seu código, mas por cima posso dizer aonde encontrei alguns erros. if (tabela[posicao] == NULL) { *tabela[posicao] = valor[contador]; contador++; } Não precisa colocar aquele asterisco antes de tabela posição, e da maneira como foram declaradas as variaveis tem que por um & na frente de valor[contador]. Tabela[posições] espera receber um endereço de memória e não um valor. Se sua ideia é essa mesmo faça as alterações, senão já são outras mudanças necessárias. else { incremento[contador] = doubleHash(valor[contador]); while (*tabela[posicao] =! NULL) { posicao = ((posicao + incremento[posicao]) % N); } *tabela[posicao] = valor[contador]; contador++; } No teste do while, tire o asterisco em frente a tabela[posicao] e mude =! para != pois do jeito que está é uma atribuição negada e não uma comparação. e após as chaves do while novamente retire o asterisco da frente de tabela[posicao] e coloque um & em frente a valor[contador]
  3. Possível é, mas provavelmente C não seja a ferramenta de maior facilidade para isso. Mesmo existindo muitas bibliotecas que lhe auxiliam a fazer isso. Não posso lhe dar uma experiencia pessoal em desenvolver aplicativos "windows like" em c/c++, mas em Delphi e Java foi muito fácil. Mas, caso queira mesmo fazer em c/c++, eu recomendo usar a QT. http://en.wikipedia.org/wiki/Qt_(framework) http://qt.nokia.com/
  4. Myho

    Manipulação de *.TXT em C

    Você pode usar a mesma lógica que usou pra colocar uma quebra de linha no texto putc('\n', arquivo); Só que em vez de colocar uma quebra coloque uma barra: putc('\\', arquivo); Quanto a ler uma string com espaço, realmente um scanf com esses parâmetros mais comuns não lê. Existem diversas soluções que você pode pesquisar como. fgets: ( para usar fgets pegando o buffer do teclado coloque stdin no lugar do nome do arquivo. http://www.cplusplus.com/reference/clibrary/cstdio/fgets/ Tem uma variação de parametros do scanf scanf("%[^\n]s", nomeVariavel); http://www.cplusplus.com/reference/clibrary/cstdio/scanf/
  5. Declare montador::montador() { tempo = 0; status = false; } fora da classe, depois da chave que fecha a classe. Lembrando que tem q por ponto e vírgula nessa ultima chave, que fecha a classe. No código colado por você ai em cima faltou esse detalhe.
  6. Desculpe se isso não te ajudar, mas não é muito a minha praia codeblocks nem gtk. http://www.gtkforums.com/viewtopic.php?t=8908
  7. Ela pode retornar o que você quiser, o problema é que tipo de retorno você precisa. Se você precisa retornar um pedido, não tem jeito, tem que retorna-lo. O problema com o NULL é que você deve retornar um pedido, e NULL é zero ou um ponteiro void. Pro NULL funcionar você deve retornar pedido * filaCircularComVetor::desenfileirar() Mas ai já envolve usar ponteiros no programa e imagino que você não tenha planejado usa-los. De qualquer maneira você tem q testar no main... ou antes de chamar ou depois. Para abrir arquivo testamos depois: File *f; f = fopen ("myfile.txt" , "r"); if (pFile == NULL) printf ("Error opening file"); Já quando usamos algum container da STL testamos antes: stack<int> mystack; if (!mystack.empty()) int valor = mystack.top();
  8. se estiver vazia pode retornar esse NULL, e quem pedir pra desenfileirar é que testa se o retorno foi um elemento ou NULL. pedido = fila->desenfileirar(); if (pedido) //Tratar pedido aqui else // Tratar fila vazia aqui Ou então sempre teste se a fila está vazia antes de desenfileirar fora da função. algo como if ( !fila->vazia()) pedido = fila->desenfileirar();
  9. Verdade, eu também esqueci em minha resposta, mesmo sem struct aqui funcionou pois meu compilador compilou em C++, onde não é preciso colocar o struct na frente nesse caso. Em C é obrigatório.
  10. X é o número de padrões a serem desenhados, mas como só posso usar um for eu preciso saber quantos números tem que ser desenhados. Então supondo que o usuário digite 2, para que a saída seja 0110110 São 4 uns e 3 zeros, totalizando 7 números, se ele digita 3 0111011101110 São 9 uns e 4 zeros, totalizando 13 números. Como pode ver o numero de uns é sempre o quadrado do que o usuário digitou ( x ) e o numero de zeros é sempre um a mais do que o número digitado ( x ). Essa foi a maneira que eu pensei para resolver, podem existir outras, contanto que o resultado seja o esperado, tanto faz =)
  11. Vou ser sincero que não entendi exatamente a questão, mas se for só pra ter ponteiros no programa, em vez de declarar assim: void preencheVetor(); Troque por: void preencheVetor(Carro *car); e no corpo da função: void preencheVetor(Carro *car){ system ("CLS"); int i; for (i = 0; i < 2; i++) { printf ("\nMarca: "); scanf ("%s", &car[i].marca); printf ("Ano: "); scanf("%d", &car[i].ano); printf ("Cor: "); scanf ("%s", &car[i].cor); printf ("preço: "); scanf ("%f", &car[i].preço); } system ("CLS"); } E então você preencheu o vetor de carros usando um ponteiro para ele ( car )... é só seguir essa lógica para os outros e não se esqueça de quando for chamar a função tem que chamar com os parâmetros agora. Carros carros[2] não precisa mais ser global se todas as funções que manipulam suas variáveis receberem como parâmetro um ponteiro para ele.
  12. Myho

    Ponteiros em C++

    Não diria que é errado, mas sim inseguro de se fazer isso. Pode-se acabar em um local da memória que não pode ser acessado e o programa terminar com umAccess violation. No caso que você citou de um vetor, não tem problema, desde que não extrapole o tamanho desse vetor. Até é possível prever para que região ele vai apontar, pois quando declaramos que um ponteiro é int, e sabemos que o int ocupada 4 bytes, sabemos que ele vai pular contiguamente de 4 em 4 bytes na memória, para tipos básicos é isso.
  13. Usei uma variavel extra, Y, para armazenar a quantidade total de numeros a serem impressos. Já que só um for pode ser usado temos que saber quantos números serão impressos. O truque está aqui: if ( i%(x+1)==0) quando i chegar a um numero em que sua divisão por x+1 der resto 0, sabemos que é hora de começar outro bloco de números. #include <stdio.h> int main () { long int x,y; int i,cont; printf("Coloque um valor inteiro:\n"); scanf("%d", &x); y = (x*x) + x+1; // total de numeros a serem impressos for(int i=0; i < y; i++) { if ( i%(x+1)==0) printf("0"); else printf("1"); } getchar(); getchar(); return 0; }
  14. Myho

    Problema com código

    Depois de ler o tamanho comece a fazer as comparações com IF if ( (tamanho == 'g') || (tamanho == 'G') ) desconto = preço * 0.10; //aplique o desconto se condição satisfeita, senão continue os if's else if //nova condição //aplique desconto se nova condicao satisfeita E assim sucessivamente com cada condição. Depois da ultima condição faça um else dizendo que se cair naquela condição o Tamanho é inválido.
  15. Myho

    Duvida no comando "for"

    A função de raiz quadrada também está em math.h sqrt(valor); Só que se for 'j' na raiz 0.5 e não na raiz quadrada já é diferente, pois sqrt é somente para raiz quadrada. Ai você pode fazer assim: pow ( j , 1.0 / 0.5 ); Então você tem 'j' na raiz 0.5 como resposta. Que por sinal é a mesma coisa que elevar um número ao quadrado =p Mas se quisesse raiz c*bica, raiz 4 e etc seria só trocar o 0.5 ali pelo valor desejado de raiz, fica a dica.
  16. Myho

    Duvida no comando "for"

    Não entendi porque tem dois asteriscos antes de 0.5, se foi só um erro de digitação a fórmula que você quer pode ser escrita assim: cos( (i*i) + j * 0.5 ); Não esquecendo que para usar a função de cos tem que ser dado um include em math.h . Poste seu código aqui que nós te ajudaremos mais =)
  17. Postou na área errada amigão, mas mesmo assim vamos lá... typedef struct no{ char nome[10]; struct no *prox; }; faltou colocar o nome no final da chave, imagino que vá chamar isso de nó, então ficaria: typedef struct no{ char nome[10]; struct no *prox; }no; e em vez de null use NULL em maiúsculas, pois é assim que ele está definido no stdio.h, veja: /* Define NULL pointer value */ #ifndef NULL #ifdef __cplusplus #define NULL 0 #else #define NULL ((void *)0) #endif #endif
  18. Quando você declara o using namespace std está avisando ao compilador que você quer usar tudo o que está definido no namespace em seu código, dessa forma pode-se acessar os objetos e funções contidos nesse namespace diretamente, sem necessidade de referenciar o nome. Aqui tem uma boa explicação -> http://www.cprogramming.com/tutorial/namespaces.html Colocando o using namespace std você pode acessar os objetos mencionados e todos os outros contidos em std diretamente. Usando a somente using std::cout por exemplo só permite acesso direto ao obejto cout. Não seria, namespaces não precisam ser instanciados, não são objetos, inclusive dentro de um namespace você pode ter classes e objetos já instaciados, até poderíamos associar a idéia de namespace com uma classe estática mas em teoria não são sinônimos. Obs.: Tópico ressuscitado de 2005 oO
  19. Olha, eu não saco muito de dessas funções de manipulação de arquivos, costumo usar mais as contidas em fstream. Mas mesmo assim não entendi porque nas chamadas de Caractere = getc(ficher); estão alterando o conteúdo de ficher, quando se espera que o conteudo seja somente extraido de lá. O que eu fiz aqui, e deu + ou - certo ( um pequeno lixo de memória foi parar no arquivo cópia) foi não passar o FILE como parametro da função de copiar, mas sim passar o filename, para que dentro da função o arquivo fosse aberto como somente leitura. #include <stdio.h> #include <stdlib.h> void copiar(char *filename) { int Caractere = 0; FILE *ficher; FILE *destin; ficher = fopen(filename,"r"); destin=fopen("pinche.txt", "w"); if (destin==NULL) { printf("Error de apertura de fichero"); exit(1); } else{ while (Caractere != EOF) { printf("%c", Caractere); Caractere = fgetc(ficher); putc(Caractere,destin); } } fclose(destin); printf("terminado"); } int main() { FILE *fichero; char c; int i; fichero=fopen("texto.txt", "w+"); if (fichero==NULL) { printf("Error de apertura de fichero"); exit(1); } else { do { c = getchar(); if (c == 13) { putc('\n',fichero); printf("\n"); } else { for (i=0; i<10; i++) { putc(c,fichero); } } } while (c != 26); } fclose(fichero); copiar("texto.txt"); return 0; }
  20. Também não entendi bem o problema... Tem que inserir um elemento em uma determinada posição em uma pilha é isso? Tipo, base da pilha é indice 0, topo da pilha 10, preciso inserir um elemento com indice 4 na posição 4 da pilha? Se for isso, o esquema é ir desempilhando os elementos da pilha que estão acima do indice desejado em uma pilha aux. Fazendo um teste elemento indice 10 da pilha vai para o 0 na pilha auxiliar; elemento indice 9 da pilha vai para o 1 na pilha auxiliar; .... elemento indice 4 na pilha vai para o 6 na pilha auxiliar; chegamos no indice desejado, insira o elemento que quer aqui Agora pegamos a pilha auxiliar e desempilhamos na pilha original e pronto. Você inseriu um elemento numa posição especifica da pilha só mexendo no topo dela.
  21. Myho

    Novo Problema com Lista.

    Desculpe, mas está dificil dar suporte a esse código. Fica muito dificil a leitura quando os nomes de variaveis não são auto-explicativas. É uma minoria de variaveis, mas atrapalham demais na hora da leitura. Mesmo que sejam variaveis temporarias deve-se dar nomes melhores que a, k, c, z... Excluindo os laços de repetição, quando usamos um i, j ou k como contadores por exemplo. Mas eu até consegui fazer o código compilar, foi só retirar alguns '&' que não precisavam estar por la. Se numa função você espera receber, por exemplo void function(Agenda *agenda) { } e sua agenda já foi declarada como um ponteiro Agenda *agenda2011; Então na passagem de parametros para função é só passar ela direto, sem o &. function(agenda2011); Após corrigidos esses erros o programa compilou, mas apareceram os problemas de lógica, alguns ponteiros são chamados sem terem sido alocados entre outros.
  22. Myho

    Ponteiros em C++

    v é um ponteiro e o seu conteúdo é um endereço de memória, mas esse endereço tem que ser armazenado em algum lugar da memória. cout << *v << endl; // Valor contido na primera posição apontada por v ( vet[0]) cout << v << endl; // Endereço que v aponta cout << &v << endl; // O endereço de v na memória.
×
×
  • Criar Novo...