-
Total de itens
61 -
Registro em
-
Última visita
Tudo que ScreenBlack postou
-
O único erro que percebi, foi o "if" validando valor inferior a 0 (zero), que deveria ser 1 (um): #include<stdio.h> #include<stdlib.h> int main(void) { int i,b,n; char r = 'S'; while( r == 'S' || r == 's' ) { printf("Digite um numero (1 ao 9): "); scanf("%d",&n); if( n > 0 || n < 10 ) { for ( i = 1; i <= 10; i++ ) { b = n * i; printf("%d * %d = %d\n", n, i, b); } printf("\n"); printf("Calcular outra tabuada?(S/N)"); scanf("%c",&r); } } return 0; } Fiz ajuste para o "while" verificar também letra minúscula e removi o "else", fazendo com que, se digitado número inválido, retorne para o "while".
-
Testei o código acima, corrigindo apenas a máscara do "scanf()" e funcionou. O único erro que encontrei foi: printf("\nDigite qualquer tecla para excluir o registro do paciente --> %s",reg.nome,(pos+1)); Que deveria ser: printf("\nDigite qualquer tecla para excluir o registro do paciente --> %s",reg.nome); Segue o código exato que usei (mudei a função "main()" para o final, para sumir os "warning: Implicit declaration of function"
-
Quando o usuário digita algo para o programa, essas informações ficam armazenadas em um buffer de entrada (stdin). O programa fará a leitura desse buffer para obter as informações utilizadas pelo programa. A tecla ENTER (quebra de linha) também é uma informação. Porém, quando utiliza a função "scanf()", ocorre a leitura dessa informação, excluindo o ENTER. Esse ENTER será lido na função seguinte ("gets(reg.data)"), fazendo com que ela passe direto. Uma forma de remover o ENTER do buffer, é utilizar o "%*c", como apresentei no post anterior.
-
Troque o "scanf()" da data de ocorrencia, por esse: scanf("%d%*c", ®.idade);
-
Se você já possuir a rotina que percorre a árvore, basta ir calculando cada vez que ela desce um nível, indo da raíz até a folha.
-
O erro deve ter sido por causa da formatação HTML do site. 1) Troque a expressão "®" por "®" 2) Troque a validação do switch por: do { do { system("cls"); printf("\t\n\t Digite uma das opcoes\n\n"); printf("\n\t [i] Incluir cadastro de paciente"); printf("\n\t [a] Alterar cadastro de paciente"); printf("\n\t [e] Excluir cadastro de paciente"); printf("\n\t [c] Consultar situacao "); printf("\n\t [l] Listar"); printf("\n\t [s] Sair"); printf("\n\n\n\t Opcao: \n"); gets(opcao); op = tolower(*opcao); } while( !strchr("iaecls",op) ); switch(op) { case 'i': incluir(); break; case 'a': alterar(); break; case 'e': excluir(); break; case 'c': consultar(); break; case 'l': listar(); break; case 's': exit(0); } } while(1);
-
Acredito que, o que você esteja procurando é o que chamamos de ponteiro para função. Talvez esse link lhe ajude.
-
Se você está começando a programar e faz de maneira diferente a do professor, então aconselho a prestar mais atenção nas aulas. O operador '&' (e ponteiro, em geral) é imprescindível nessa linguagem, caso deseje um código limpo, dinâmico e eficiente. A utilização desse operador, serve para retornar o ponteiro para a variável contida após ele. Geralmente utilizado quando uma função precisa receber um ponteiro e a variável que precisa ser passada não é. O código do colega @henrique.araujo está errado, na declaração da função para receber um ponteiro como parâmetro. Segue corrigido: #include <stdio.h> #include <stdlib.h> int exemplo(int *valor1) { int valor2; *valor1 = 10; // O '*' na frente, serve para alcançar o conteúdo referenciado pelo ponteiro. valor2 = 20; return valor2; } int main( ) { int retorno1 = 0; int retorno2 = 0; retorno2 = exemplo( &retorno1 ); // Passa o ponteiro para 'retorno1' como parâmetro printf ("retorno1: %d retorno2: %d\n", retorno1, retorno2); system("pause"); return 0; } PS: Vale lembrar que é sempre aconselhado iniciar as variáveis com um valor, para evitar que o programa acabe utilizando lixo de memória em seu processamento.
-
Somar linhas de uma matriz e colocar em um vetor
pergunta respondeu ao cairo matos de ScreenBlack em C, C++
Não tem mistério: int matriz[3][3] = {{0}}; int vetor[3] = {0}; int i = 0; int j = 0; // Leitura for ( i = 0; i < 3; i++ ) for ( j = 0; j < 3; j++ ) { printf("[%d][%d] Valor: ", i, j ); scanf(" %d", &matriz[i][j] ); } // Soma for ( i = 0; i < 3; i++ ) for ( j = 0; j < 3; j++ ) vetor[i] += matriz[i][j]; // Listar somas for ( i = 0; i < 3; i++ ) printf("[%d] Valor: %d\n", i, vetor[i] ); -
Por causa da chamada "add(l, num);" depois de "cria();": l = cria(); l = add(l,num); Apenas a remova. Além disso, é aconselhado sempre iniciar as variáveis recém declaradas: int num = 0; char *cmd = NULL; char string_enter[50] = {'\0'}; struct Lista *l = NULL;
-
Para a questão 10, pode simplificar da seguinte forma: void calcula (int *x, int *y) { *x += *y; *y = *x - (2 * *y); // Como o valor de X está somado Y, precisamos remover duas vezes de X o valor Y. } Chamada na função principal: calcula( &X, &Y ); printf("O Valor da soma de X e Y: %d \n", X); printf("O Valor da subtracao de X e Y: %d", Y); Na questão 11, precisa passar os vetores por parâmetros para a função: int vetor(int A[10], int B[10], int qtdElementos) { int Resultado = 0; int i = 0; for ( i = 0; i < qtdElementos; i++ ) Resultado += ( A[i] * B[i] ); return Resultado; } Trecho da função principal: for ( i = 0; i < 3; i++ ) { printf("digite o valor de A: "); scanf("%d", &A[i]); printf("digite o valor de B: "); scanf("%d", &B[i]); qtdElementos++; } Resultado = vetor(A, B, qtdElementos); printf("A soma do Produto escalar dos vetores: %i\n", Resultado);
-
A alocação de memória está correta, apesar da variável ser do tipo float e estar alocando tamanho do tipo int, porém, são do mesmo tamanho (geralmente 32 bits ou 4 bytes). Testei seu código e rodou sem problemas. Talvez o(s) erro(s) esteja(m) na(s) fórmula(s). Isso eu não parei pra olhar.
-
No "for()", está incrementando a variável soma em um a cada iteração. Troque a declaração para: for ( soma = 0; soma <= 9; )
-
Pode utilizar a função round() da biblioteca math.h.
-
1) A utilização do sizeof já é o informativo do tamanho alocado. Comumente, tipo char possui 8 bits (1 Byte) e int possui 32 bits (4 Bytes). 2) O exemplo que você postou, é nativo da linguagem C. Em C++, utiliza-se o operador new. Portanto, você já misturou C com C++, provando ser possível. :P Referência para: malloc Referência para: new 3) Não se deve faze typecast para retorno da função malloc, pois está forçando o compilador a entender que o tipo será sempre verdade. Caso utilize um tipo diferente, o programa gerará erro e não mostrará a mensagem na tela.
-
Não entendi se você está querendo programar em C ou C++. Coisas do C++: #include <iostream> e using namespace std; // Você nem usou as chamadas do std No mais, seu código está inteiro em C.Partirei do princípio que seja C. :P 1) Remova as linhas que comentei acima. 2) Inclua a biblioteca "libstd.h" (apesar de muitos compiladores sempre a adicionarem, mas é bom deixar explícito). 3.0) Uso do fread() e fwrite(), devem receber o tamanho da estrutura que será armazenada e não da variável (que retornará o tamanho de um ponteiro). 3.1) A variável grav já é um ponteiro por sí só e utilizando &, estará passando o ponteiro para o ponteiro (ou seja, a referência para a variável e não para o conteúdo dela). Corrija para: fwrite(grav,sizeof(struct paciente), 1, arquivo); e fread(grav, sizeof(struct paciente), 1, arquivo); 4) Não entendi de onde você quer buscar o código do paciente. Seria o incremente do último código inserido no arquivo?Se o código do paciente for incremental, partindo de 1, você pode fazer a contagem pela quantidade de pacientes contidos no arquivo, ao invés de buscar a partir do código do último inserido. Acredito que ajustando o código a partir das dicas acima, o seu código vai ficar mais fácil de ser trabalhado (e debugado). Att.
-
Seu Dev-C++ é o mais recente? Está com o compilador atualizado? Existem dois projetos do Dev-C++. Este é o link do abandonado, desde 2005: http://www.bloodshed.net/devcpp.html Este é o projeto que foi continuado, a partir do link acima: http://orwelldevcpp.blogspot.com.br/ Se estiver com a versão antiga, tente atualizar e veja se resolve. Isso está parecendo compilador defasado. Att.
- 3 respostas
-
- codificação ASCII
- ASCII
- (e %d mais)
-
Isso deve estar ocorrendo porque o padrão usado seja o "Minimal C". Tente trocar para o padrão do S.O., usando: setlocale(LC_ALL,""); Adicione a linha acima, antes do primeiro "printf()". Att.
- 3 respostas
-
- codificação ASCII
- ASCII
- (e %d mais)
-
A variável "k" não está sendo zerada, quando inicia as funções "somalinha()" e "somacoluna()". Aconselho não trabalhar com variáveis globais. Utilizando variáveis dentro de contextos ou escopos (no seu caso, funções) e passando por parâmetros os valores que realmente deseja utilizar na próxima função, evita que erros desse tipo sejam tão simples de acontecer. Att.
- 2 respostas
-
- bug
- programação
-
(e %d mais)
Tags:
-
O programa está certo. O que poderia fazer seria algumas customizações, como: - Reaproveitar a classe para criar "obja" e "objb" - Reduzir um "for" class soma { private: int valor; public: soma(void) { valor = 0; } void set(void) { cout << "Informe o numero: "; cin >> valor; } int get(void) { return(valor); } }; int main(void) { soma obja[10], objb[10]; int c[10], i = 0; for(; i <= 9; i++) { obja[i].set(); objb[i].set(); c[i] = ( obja[i].get() + objb[i].get() ) * 2; cout << "Resultado do vetor na posicao " << i+1 << " eh " << c[i] << endl; } return 0; }
-
Você já mostra o nome. Falta apenas a idade, que segue o mesmo princípio e idéia. printf ("Voce é menor de idade (%d anos), não pode trabalhar aqui, %s \n", idade, nome); Duas observações sobre o código: - Na leitura da string, não se usa & na frente da variável. A variável vetor já é um ponteiro para a estrutura: - Fazer o tratamento para o caracter ENTER, no momento da leitura do dado usando scanf(), para evitar que o programa fique "louco": scanf("%s%* c",nome); e scanf("%d%*c",&idade);
-
Nunca trabalhei com XML em C/C++, mas sei que existe a biblioteca famosa (talvez a mais usada) libxml. Ela foi criada para ambientes Unix, porém, existe um port para windows (não sei em qual ambiente você pretende .desenvolver). Site principal: http://xmlsoft.org/index.html Download: http://xmlsoft.org/downloads.html Exemplos: http://xmlsoft.org/examples/index.html Versão windows: http://www.zlatkovic.com/libxml.en.html Espero que ajude. Att.
-
Conversão decimal -> binário com recursão
pergunta respondeu ao Gabriela Cavalcante de ScreenBlack em C, C++
Entendi. No caso de recursão para conversão de decimal para binário, acredito que não seja possível fazer na forma de cauda, porque precisa da sequência inversa para poder gerar os valores na ordem correta. Diferente do fatorial, onde tanto faz executar a multiplicação de frente para trás (que é o caso da recursão de cauda) ou de trás para frente. Mesmo utilizando a recursão de cauda, não é aconselhável utilizar o "else", pois desestrutura a função por não existir um retorno geral definido. ^_^ int fatorial_aux(int num, int parcial) { if (num == 1) return parcial; return fatorial_aux( (num - 1), (parcial * num) ); } EDIT: Depois de tanto quebrar cabeça com teste de mesa, consegui fazer a recursão de cauda para conversão de número binário. :D int binario_aux(int num, unsigned int parcial, int controle) { if ( num < 2 ) return pow(10, ++controle) + parcial; return binario_aux( (num / 2), ( pow(10, controle) * (num % 2) ) + parcial, ++controle ); } int binario_cauda(int num) { return binario_aux(num, 0, -1); } PS: Valor máximo em decimal permitido para a conversão no código que postei acima, é 1023. Isso é devido a utilização da função que calcula exponenciação, que retorna o valor no tipo "double" (float). Como o valor em binário ocupa mais casas do que em decimal, o tipo float acaba estourando. -
Conversão decimal -> binário com recursão
pergunta respondeu ao Gabriela Cavalcante de ScreenBlack em C, C++
1) Quando uma recursividade necessitar de "else", a chance é muito grande de que esteja errada. 2) Como a recursividade necessita apenas de divisão, tendo como exceção o valor de sobra que não pode ser dividido, este será o momento para finalizar a recursão. int bin(int k) { if ( k < 2 ) // Momento de parada return k; return ( 10 * bin( k / 2 ) ) + k % 2; // Iniciando a multiplicação pelo valor que não pode mais ser dividido por 2 e somando com a sobra da divisão. } Chamada: cout << bin(12) << endl; PS: Vale lembrar que, se estiver utilizando um compilador 32 bits, o valor máximo em binário são 32 casas binárias (Dããã pra mim!! :P ). Mas acredito que vale a atenção, caso queira fazer testes com números grandes, pois é um detalhe que costuma passar batido. Att. -
Sua struct está limitada em dois valores para 'preço' e dois caracteres para armazenar 'local' e outros dois para 'atracao'. Além disso, está criando um vetor de struct. Troque sua struct por: struct ingresso { float preco; char local[100]; char atracao[100]; }; Uma outra coisa em seu código que talvez dê problema, é o fato de usar caracteres sinalizados, como no caso da variável "preço". Se o compilador não reconhecer essa codificação (unicode) de maneira correta, pode ocorrer erro na execução. Aconselho manter o código todo no padrão ASCII, sem as extensões. Que vai do valor 0 a 127, conforme tabela ASCII.