
Arrk
Membros-
Total de itens
47 -
Registro em
-
Última visita
Tudo que Arrk postou
-
Bom, a galera ajudou pra caramba, só vou comentar sobre algumas perguntas que acho que não foram bem discutidas. MinhaClasse é o nome da classe para o qual você vai alocar memória. Quando memória é alocada para um objeto, na realidade dados são alocados. Ao objeto só pertencem mesmo os dados, as funções membro são compartilhadas entre os objetos da classe. O compilador passa o ponteiro this implicitamente para a função membro de forma que ela saiba que objeto modificar. Quando você aloca memória para o objeto, o construtor dele é chamado, se você não defininiu um construtor, o construtor padrão "criado" pelo compilador é acionado como já foi mencionado pelo pessoal. Da mesma forma que você inicializa os dados do objeto através de construtores chamados na alocação, você também o pode fazer com tipos fundamentais, ex.: int *integerPtr = new int(5); Vi num post seu que você entende perfeitamente como alocar memória para vetores com new: int *vetor = new int[5]; Pra desalocar a memória de um vetor não é coisa de outro mundo, basta acrescentar o operador de subscrito []: delete [] vetor; Espero que tenha ajudado. Abraços.
-
Também há a possibilidade de cascateamento de sentenças com cout e cin devido a sobrecarga de operadores do C++, cada operação com << ou >> retorna uma referencia para o respectivo objeto, ou seja, o próprio objeto: cout << "eu " << "estou " << "testando " << "cout " << "\n"; Então a senteça acima seria gradualmente avaliada da esquerda pra direita: primeiro: cout << "eu " e então a instrução é "transformada" em: cout << "estou " << "testando " << "cout " << "\n"; e assim por diante....
-
Olha, não sei se o código foi você quem fez, mas quem fez estava um tanto confuso, porque na leitura trata a matriz como se fosse 10x20 e na hora de escrever, escreve como se fosse 10x2 ^^' Na hora da leitura os primeiros laços que são usados pra percorrer a matriz no código encaram ela como 10x20, mas ao que me parece dentro dos laços a pessoa tratou como se fosse 10x2. Se foi você que escreveu o código, sugiro que estruture melhor sua linha de raciocínio nos dizendo o que você realmente quis fazer, se não, esqueca o código e pergunte alguma coisa coisa que você queira saber de matrizes, uma dúvida sua. ;D
-
Cara, elimina aqueles cases um dentro do outro O.o Pra evitar o problema da diferenciação entre maiúsculas e minúsculas usa a função toupper() da ctype.h pra transformar os caracteres lidos em maiúsculos, antes do switch: ch = toupper(ch); mais informações aqui: http://www.cplusplus.com/reference/clibrary/cctype/toupper/ Se não der certo ou ainda tiver dúvidas, poste o código inteiro. Abraço.
-
Tá ok, então. Precisando é só perguntar. Abraço.
-
Pois é. Como foi mencionado antes, você lê a string duas vezes, uma com fgets e outra com scanf, escolha uma das duas maneiras. Seu programa está certo, só estou vendo estranho o fato de você ler a string duas vezes. Escolha uma das maneiras pra ler. Tente fazer com fgets e use a função mencionada pelo nuts - a strchr - pra remover o '\n'. Abraço.
-
Cara, primeiro pense no que você vai precisar pra resolver o problema, em termos de implementação. Quais variáveis utilizar? Quais seus respectivos tipos? Como relacionar essas variáveis? Como processar a entrada? Como apresentar a saída? Começe aos poucos, não tenha pressa. Quando tiver feito alguma coisa e tiver alguma dúvida, poste o código e pergunte. Abraço.
-
Desculpa, mas o quê que não deu certo? você ainda está lendo o nome duas vezes e você não usou a strchr pra remover o '\n' caso queira usar o fgets. - Voce pode estruturar melhor o código que obrigue o usuário a digitar um valor correto, tente usar um do-while em vez de while. ( na parte que obriga que a nota digitada tem que ser válida ) - E já que o while mais externo só é reponsável por mera contagem use um for em vez dele. - Existem notas maiores que 10? =] Abraço.
-
Algumas sugestões: - Use endentação no seu código, facilita muito a compreensão do código. - Reveja o tipo das suas variáveis, altura e peso devem mesmo ser inteiras? Cara, tipo... na boa, eu não acredito que você tá vindo num fórum pedir a uma pessoa que faça um trabalho pra ti (sendo que é muito básico) em vez de seguir o exemplo do seu colega de turma e se esforçar pra fazer.
-
Não vai necessariamente perder a representação, é só guardar o valor como fiz no exemplo. A função retorna um ponteiro para o primeiro caractere '\n' na string nome caso encontre, caso contrário, retorna NULL, com isso você pode remover o '\n' fazendo: ptr = strchr(nome, '\n'); *ptr = *(ptr+1); Eu fiz do jeito que tá aí, mas foi só pra você ver, quando for fazer, verifique o valor de retorno. Abraço.
-
marc0gt40, você está armazenando sempre um valor constante na matriz. Você pega a hora, seja lá qual for e dependendo dela, coloca 1 ou 0 na matriz em todas as posições, pra gerar números aleatórios você usa a função rand(). Essa função retorna um número entre zero e RAND_MAX, uma macro que está definida na stdlib.h. Então o código a seguir geraria um número, possivelmente, enorme:int aleatorio = rand(); int aleatorio = rand(); Mas isso não é o que a gente quer =] . Então usamos o operador de resto como você usou antes. Agora, se você perceber bem, a rand() gera valores pseudo-aleatórios, começando por um semente. O que acontece é que pra melhorar a geração desses números você pode especificar essa "semente" de forma a "inicilizar" a geração dos números, usando a função srand() e enviando como parâmetro a semente pra iniciar a sequencia, mas ainda assim, só com o que a gente tem não conseguimos gerar números o mais aleatório possível, então pra ficar legal, passamos a hora devolvida pela time() como argumento da srand(), uma vez, antes de usar o rand(), geralmente no início do programa. Com essas informações, tente fazer a geração da matriz, depois poste o código caso não der certo ou você tiver alguma dúvida =] Mais informações sobre as funções: srand() - http://www.cplusplus.com/reference/clibrary/cstdlib/srand/ rand() - http://www.cplusplus.com/reference/clibrary/cstdlib/rand/ time() - http://www.cplusplus.com/reference/clibrary/ctime/time/ Espero ter ajudado.
-
Aew luiz eduardooo, beleza cara? Cara, o compilador tá acusando erro porque na sua função ajuda() você era pra ignorar o retorno de valor, mas você tá tentando retornar um valor, o valor da printf, que em caso de sucesso retorna a quantidade de caracteres lidos, reveja se essa era mesmo a sua intenção. Agora, no segundo código, não tem como você colocar um string inteira num case do switch, o que você pode fazer é antes do switch verificar qual string foi digitada e guardar um código pra identificar aquele comando, tipo, ajuda seria 1, remover 2, sair 3, etc., pra depois num switch tratar cada comando. Isso se você quiser mesmo usar um switch. Espero ter ajudado. =]
-
Cara, não tá legal não, você mostra os resultados sem mesmo ter calculado cara. E outra, só uma sugestão, não seria melhor se você lesse os dados enquanto a pessoa quisesse continuar não?
-
Que nada cara, não precisa se desculpar, no que puder a gente ajuda =] Se você quiser verificar um se um número é inteiro ou não uma solução seria se valer das conversões implícitas que o C faz: subtraindo do número real a sua parte inteira e verificando se sobrou alguma coisa, se tiver sobrado é porque o número tem parte fracionária, não sendo então inteiro: #include <stdio.h> int main(void){ float fnum, temp; int parte_inteira; printf("Numero em ponto flutuante: "); scanf("%f", &fnum); temp = fnum; if(fnum < 0) fnum = -fnum; parte_inteira = fnum; fnum = fnum - parte_inteira; if(fnum) printf("Voce digitou um numero não inteiro: %.3f", temp); else printf("Voce digitou um numero inteiro: %.0f", temp); return 0; } Há uma função da math.h que já faz isso, a modf(). Ela recebe dois parâmetros: o número a ser quebrado, o endereço de uma variável que conterá a parte inteira do número e retorna a parte fracionária do número: #include <stdio.h> #include <math.h> int main (){ double param, fractpart, intpart; param = 3.14159265; fractpart = modf (param , &intpart); printf ("%lf = %lf + %lf n", param, intpart, fractpart); return 0; } O exemplo acima foi tirado de: http://www.cplusplus.com/reference/clibrary/cmath/modf/ Espero ter ajudado.
-
Cara, você tá limpando a tela depois de mostrar os traços? Se não, tente limpar a tela antes de imprimir a string traco, se não funcionar envie seu código inteiro assim podemos ter uma noção maior do problema.
-
Cara, não tire conclusões precipitadas =] O site é realmente sobre C++, o nome dele já diz tudo. Mas ele cobre a biblioteca do C também. Ele usa alguns dos conceitos nascidos no C++ para descrever as funções do C, como por exemplo quando ele chama a struct FILE de objeto e tal, e quando em vez de falar arquivo, fala stream. O site não é exclusivamente sobre C++, se você prestar bem atenção os códigos de exemplo sobre as funções do C são escritos no próprio C mesmo. Todos os headers do C em vez de <header>.h, no C++ são incluidos de forma diferente, colocando-se um c antes e omitindo o .h , daí a forma diferente de mencionar as bibliotecas. Quando eu estudava C eu usava o site sem problemas, recomendei porque além do conteúdo nele ser excelente, li bastante os exemplos =] O "erro" é quando você iguala o valor de strcmp() a 1. A strcmp() retorna um valor positivo se a segunda string for maior, negativo se a primeira for maior e zero se as duas forem iguais. Se eu bem entendi o que você quer fazer, você quer ler outro número se o usuário digitar sim e sair do do...while se ele digitar não, então seu código ficaria assim: strcmp() #include <stdio.h> #include <string.h> int fat,num,num1,fat1,rep; main(){ char re[20]; do{ printf("Entre com um número: "); scanf("%d", &num); num1 = num; fat = 1; while(num!=0){ fat=fat*num; num=num-1; fat1=fat; } printf("Fatorial de %d é %d.\n",num1,fat1); printf("Outro número (sim/não)?\n"); scanf("%s", re); }while(strcmp(re,"não") && strcmp(re,"NÃO")); return 0; } Tenha cuidado com o valor de retorno da strcmp(), porque alí no while final você só passava pra leitura do próximo número se a string re fosse menor que não e o certo seria continuar enquanto o usuário digitasse algo diferente de não e NÃO. Espero que tenha ajudado. Qualquer coisa estamos aqui ;D
-
Italoo, a função scanf() quando usada pra ler uma string, pára a leitura ao encontrar um espaço em branco qualquer, seja um TAB, um espaço ou um enter. Se você quiser ler a palavra até ser precionado o ENTER com o scanf() você deve usar o que algumas literaturas chamam de scanset: #include <stdio.h> int main(void){ char string[30]; printf("Digite uma frase: "); scanf("%[^\n]", string); printf("String digitada: %s\n", string); return 0; } No código acima, o scanf irá ler todo e qualquer caractere da entrada pra string até que o caractere ENTER (\n) seja precionado, ao ser precionado o scanf não o processa. Porém outras funções são aconselháveis em se tratando de leitura de strings, pesquise sobre fgets() e gets() para saber mais sobre o assunto. Há uma ótima referencia da biblioteca padrão do C aqui nesse site: http://www.cplusplus.com/reference/clibrary/cstdio/ Espero ter ajudado. =] EDIT: Da mesma forma com que excluimos o \n do processamento no scanf, podemos fazer com que ele leia apenas alguns caracteres, por ex.: scanf("%[aeiou]", string), para ler somente vogais e etc. Espero que tenha compreendido. T+
-
cara, primeiro tenho umas sugestões a fazer com relação a organização do código e alguns aspectos da linguagem: primeiro, use endentação no seu código pra facilitar o entendimento de outras pessoas que forem lê-lo, só dando dois espaços a direita depois de cada estrutura de controle já deixa seu código legal pra se ler. Segundo, ainda sobre a legibilidade, quando possível separe declarações de variáveis locais dos comandos e de preferência, declare todas as variáveis no início do bloco da função. E por úlitmo, ainda por questão de legibilidade cole o seu código entre tags code. Desculpe pelos avisos, até porque não são avisos, são conselhos =] Pelo que eu entendi, me corrija se eu estiver errado, você quer parar de ler os números quando o usuário exceder o limite de 200 números, certo? Se for só isso é só inserir a condição no seu laço for para i <= 200 ou então se você preferir inserir um if dentro do seu laço, enfim, tanto faz, mas seria melhor a condição, já que você economizaria uma linha =] #include <stdio.h> #include <stdlib.h> float ask_numbers(int vet[]); int main (){ int p[200]; if(!p){ printf("falha na alocacao de memoria"); exit(1); } printf("A media aritimetica dos valores ditigados vale %.2f\n", ask_numbers(p)); system("pause"); return 0; } float ask_numbers(int vet[]){ int i, soma = 0; for(i = 1; i <= 200; i++){ printf("%do. numero: ", i); scanf("%d", &vet[i]); /*COMO FAZER PARA QUE O PROGRAMA FUNCIONE PARA n>200?*/ if(vet[i] != -1) soma += vet[i]; else break; } if(--i) return soma / i; else return 0; } Como o tamanho do seu vetor é fixo, então você pode usar alocação estática mesmo, sem precisar usar o malloc(). Se a sua dúvida era passar um vetor para uma função e a função saber qual o tamanho do seu vetor você pode passar outro parâmetro para a função indicando o tamanho do vetor que foi fornecido a ela ou então convencionar para que o primeiro elemento do vetor represente o tamanho dele. Espero ter ajudado.
-
beleza, ficamos no aguardo =]
-
Aew marc0gt40, beleza? você quer só mostrar a matriz ou quer criar? você pode usar as funções srand() e rand() da stdlib.h e time() da time.h pra gerar os 1's e 0's aleatórios e pode percorrer a matriz normalmente pra imprimir, não tem segredo. Tente fazer, se não conseguir, poste suas dúvidas.
-
Concordo plenamente. Gaili, tente fazer. Depois, se não conseguir, ou surgirem dúvidas, poste o código pra que comentem. Começe vendo que estrutura de iteração você vai utilizar e como quer que essa iteração ocorra. Abraço.
-
Já mandei email. Esperando resposta...