
Myho
Membros-
Total de itens
22 -
Registro em
-
Última visita
Tudo que Myho postou
-
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.
-
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]
-
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/
-
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/
-
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.
-
Gtk+ No Code Blocks Para Windows, Como Configurar?
pergunta respondeu ao DarthVictor de Myho em C, C++
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 -
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();
-
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();
-
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.
-
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 =)
-
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.
-
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.
-
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; }
-
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.
-
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.
-
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 =)
-
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
-
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
-
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; }
-
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.
-
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.
-
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.