
jth.
Membros-
Total de itens
20 -
Registro em
-
Última visita
Sobre jth.

Perfil
-
Gender
Male
jth.'s Achievements
0
Reputação
-
Wendell, Na verdade é só trocar L1 por L2 mesmo, e não as duas entre si... Até mais, ;D
-
Em relação ao segundo problema... Olha... aqui o segundo não está nem compilando (usando o GCC/Linux)... Faltam "chaves"... O código também está estranho, parece que não foi a mesma pessoa que escreveu ele inteiro... O primeiro "for" está meio sem sentido... Pra que ele serve? Você usou o scanf para ler a string, mas ele ele não funciona se a string tiver mais de uma palavra... Troquei pelo gets, mas esse também é perigoso... #include <stdio.h> #include <string.h> int main(void) { char l1,l2, frase[31]; int i, k = 0, cont=0; printf("Digite uma letra qualquer: "); scanf("%c",&l1); getchar(); printf("Digite outra letra qualquer: "); scanf("%c",&l2); getchar(); printf("Digite uma frase com ate 30 digitos: "); gets(frase); for(i=0;frase[i]!=''; i++) { /* Essas duas chaves são redundantes */ if (frase[i]==' ') { cont++; } } /* Essas duas chaves são redundantes */ for(i=0;frase[i]!=''; i++) if ( frase[i] == l1 ) { frase[i] = l2; ++k; } printf("\nO numero de letras trocadas foi: %d\nA nova stringe é: %s\nAs letras trocadas são %c e %c",k,frase,l1,l2); } Tipo... nas condições coloque \ 0 (sem o espaço) entre as aspas simples.
-
Você tem razão Durub, eu escrevi sem pensar... Minha intenção só era ajudar... Eu não entendi o uso da comparação s != '\ 0' ==================== edição (comentando o post abaixo) Entendi Durub... Eu viajei aqui, estava imaginando outra coisa... Pra falar a verdade estou com raiva da minha burrice, mas é assim mesmo que a gente "avança". Até mais ;D
-
Cara... intersecção que você diz é algo tipo: V = {1,2,4,6} e M = {3,1,6} conjunto intersecção: I = {1,6} Se é isso o seu laço ali está errado por isso: 1) Você só está comparando a igualdade de elementos que tem o mesmo índice ao invés de percorer o vetor inteiro atrás de um número "igual" 2) Você está guardando o valor encontrado em uma variável comum do tipo int. Mesmo que o laço estivesse certo ele só iria retornar o último valor encontrado, e se existitem mais de 1? Tente pensar em um laço dentro do outro... uma estrutura tipo: for(i=0,k=0;i<10;i++) for(j=0;j<10;j++) if (v[j] == m[i]) { in[k] = v[i]; k++; } Onde o v e j seriam os dois vetores à serem comparados e o in o vetor intersecção. Não é a primeira questão que você manda assim... Acho que o seu problema não está em matrizes, mas sim em estruturas de repetição. Tente revisar o laço while e o for, entender bem como funcionam. Se você está fazendo algum curso de lógica da programação ou algo assim peça ajuda ao professor ou à algum colega para te ensinar detalhadamente como escanear um vetor ou matrizes usando laços, como e quando usar laços dentro de laços ou coisas assim... Bom... é só uma dica.
-
Percorrer a string procurando o caractere? Cara, uma string é um vetor de caracteres terminado com um "\ 0' (nulo) que identifica aquele o vetor como uma string. E como qualquer vetor ele tem vários elementos que são alocados em diferentes endereços da memória (endereços sequenciados). se eu tenho algo tipo: char s[]="Teste"; Posso dizer que essa string tem 6 elementos, os 5 da palavra "Teste" mais um do "\ 0". E cada um desses elementos pode ser representado usando o índice do vetor: s[0] -> 'T' s[1] -> 'e' s[2] -> 's' s[3] -> 't' s[4] -> 'e' s[5] -> '\ 0' Então se você quer percorrer a string verificando cada caractere, para ver se ele é igual à 'b' por exemplo, é só fazer um laço tipo... for(i=0;i<=strlen(s);i++) /* o strlen retorna a quantidade de if(s[i] == 'b') { * caracteres da string, sem contar o "\ 0" */ . . . Espero ter ajudado em algo... Até ;D
-
int func1(char *v, char *m) Até onde eu sei, quando eu faço isso estou criando dois ponteiros, v e m para serem usados dentro dessa função, que no caso vão apontar para o índice zero de dois vetores (as strings) que a função receberá como argumento. Quando eu uso "v" e "m" dentro desse meu bloco ele simplesmente deveria apontar para os vetores originais, não? Só que nos meus testes, quando eu uso sizeof(v), por exemplo, ele não retorna o tamanho em bytes do vetor para o qual o ponteiro "v" está apontando, mas sim o valor 4... O que eu teria que fazer para ele retornar o tamanho do vetor "original"? Eis um exemplo do mesmo problema: int main() { char t[]="Testando...",*p; printf("sizeof(%s):%d sizeof(p):%d \n",t,sizeof(t),sizeof(p)); p = t; printf("sizeof(%s):%d sizeof(%s):%d \n",t,sizeof(t),p,sizeof(p)); /* Repare que mesmo depois de atribuir um valor à "p", sizeof(p) continua voltando '4'. * Minha dúvida esta aí... */ } Até mais ;D
-
Sim, Beraldo, eu tinha me ligado do "\ O"... tanto que usei "i<size" e não "i<=size"... Toda a minha preocupação com o sizeof é por causa disso... Não conhecia o strlen, na verdade ainda não estudei strings nem suas funções de verdade... o meu código atualizado ficou assim: int func1(char *v, char *m) { int size,i; if (strlen(v) > strlen(m)) size = strlen(m); else size = strlen(v); for(i=0;i<=size;i++) if (v[i] != m[i]) { return i; } return 0; } O código verifica inclusive no índice da string em que existe o "\ O" na tentativa de ver se as strings não são iguais... acho que assim ficou OK... Mas ainda testando isso fiquei confuso. porque não posso usar o sizeof com os ponteiros? Fica retornando 4 sempre...
-
Cara... eu fiz aqui do meu jeito, usando só o sizeof mesmo... não sei se tá certo: int func1(char *v, char *m) { int size,i; if (sizeof v >= sizeof m) size = sizeof m; else size = sizeof v; for(i=0;i<size;i++) if (v[i] != m[i]) { return i; } return 0; } Edição 2ª: Aff... é bem minha 2ª ou 3ª edição. Fiz novos testes, tem um erro... (tentando reparar)] Edição 3ª: É, parece que tenho que estudar mais ponteiros... quando uso o sizeof v ele não remete ao tamanho da string mesmo... aqui fica só retornando valor 4... Obs.: Se você não conhece o "sizeof" ele retorna o tamanho de uma varável ou um vetor em bytes. Como uma string é uma cadeira de "chars" (cada char pesa 1 byte) então eu usei ele para saber a "quantidade de elementos" da string.
-
[DUVIDA / C ] Que comando usar para limpar a tela?
pergunta respondeu ao GabrielCardelli de jth. em C, C++
Sim, pelo o que eu li aqui a conio do Dev é muito limitada e não tem todas as funções da conio da Borland. Em relação ao linux, acho que é só trocar o "cls" por "clear" Até ;D -
Cara, eu ainda não estudei strings e não conheço as funções de maniputação de strings muito bem. Mas o que deu a entender é que ele quer que você faça sua própria função para comparar duas strings, verificando a igualdade caractere por caractere... Algo tipo um laço que vá comparando os caracteres um por um e se eles forem diferentes retorna o indice daquele caractere, se não retorna zero mesmo. Até mais, ;D
-
[DUVIDA / C ] Que comando usar para limpar a tela?
pergunta respondeu ao GabrielCardelli de jth. em C, C++
Cara, dá pra ver que você não tentou pesquisar. Esse é o tipo de dúvida que você tira em 3 minutos com o Google. Na sua assinatura diz que você está tentando se tornar programador. Muito legal, eu também. E como companheiro de empreitada digo uma coisa: prefira sempre pesquisar antes de perguntar, você pode até demorar mais fazendo isso, mas normalmente aprende-se muito mais coisas funçando que esperando respostas. Não estou querendo dar lição em ninguém, mas fica aí minha "dica". Ah... acho que a função clrscr() da conio.h no windows resolve... No linux acho que já usei a clear() da ncurses(aí eu não tenho certeza =x). http://scriptbrasil.com.br/forum/index.php?showtopic=4199 -
Cara, o problema está nos laços de soma. 1) Você não definiu os elementos do vetor que está guardando a soma como zero (antes de começar a somar você tem que definir como 0). 2) Os laços estão meio que trocados... Para conseguir a soma da linha, por exemplo, você não devia fazer o laço mais externo em cima do "j", mas sim do "i". 3) É mais prático colocar um laço dentro do outro. Imagina se fosse uma matriz 20x20? O trabalho que você teria de escrever as 20 somas... /* Fazendo a soma das linhas e guardando no vetor a */ for(i=0;i<5;i++) for(j=0,a[i]=0;j<5;j++) a[i] += m[i][j]; /* Fazendo a soma das colunas e guardando no vetor b */ for(j=0;j<5;j++) for(i=0,b[j]=0;i<5;i++) b[j] += m[i][j]; Até mais ;D
-
Hã? Multiplicar e dividir pelo maior elemento da linha? Mas se você multiplica e divide y por x o resultado é y... No caso seria multiplicar ou dividir, não? Acho que o laço fica algo assim (usando a mesma idéia do problema anterior): for(i=0;i<LINHA;i++) { for(j=0,max=v[i][0];j<COLUNA;j++) if(v[i][j] > max) max = v[i][j]; for(j=0;j<COLUNA;j++) v[i][j] = v[i][j]*max; /*Aqui você decide se é multiplicar ou dividir */ } espero ter ajudado... bye
-
Tenho que assumir que não parei para olhar e analisar bem onde poderia estar o erro no código, ou até mesmo se ele está errado. Estou aprendendo matrizes agora em Lógica da Programação e resolvi fazer o exercício. Se eu entendi bem é essa a questão: Uma vez tendo uma matriz qualquer você deve somar todos os elementos da coluna e depois multiplicar cada elemento da matriz por a soma da respectiva coluna. É isso? eu tentei e ficou assim (só que eu fiz tudo em uma função só =x): #include <stdio.h> #define LINHA 4 #define COLUNA 5 int main(void) { int v[LINHA][COLUNA],s[COLUNA],i,j; /* Só tomando os valores para o vetor */ for(i=0;i<LINHA;i++) for(j=0;j<COLUNA;j++) { printf("\n\tDigite o M[%d][%d]\t",i+1,j+1); scanf("%d",&v[i][j]); } /* Abaixo só mostrando a matriz digitada pelo usuário */ printf("\n\tSua matriz:\n\n"); for(i=0;i<LINHA;i++) { for(j=0;j<COLUNA;j++) printf("%6d",v[i][j]); putchar('\n'); } /* Aqui começa a brincadeira, vou somar os valores das * colunas e armazenar no vetor "s" que foi criado, anteriormente, * com o tamanho da quantidade de colunas. */ for(j=0;j<COLUNA;j++) for(i=0,s[j]=0;i<LINHA;i++) s[j] = s[j] + v[i][j]; /* Uma vez o vetor com a soma de todas as colunas concluído * é hora de refazer a matriz */ for(i=0;i<LINHA;i++) for(j=0;j<COLUNA;j++) v[i][j] = v[i][j]*s[j]; /* Imprimindo a nova matriz...;D */ printf("\n\tSua nova matriz:\n\n"); for(i=0;i<LINHA;i++) { for(j=0;j<COLUNA;j++) printf("%6d",v[i][j]); putchar('\n'); } return 0; } No exercício você falou 20x10... mas 20x10 é muito grande pra fazer os testes... aí fiz os testes com matrizes pequenas tipo 4x5 e 5x5... deu certo... espero estar ajudando em algo... (se acharem algum erro tosco no meu código postem, também estou aprendendo agora matrizes xD). Até mais,
-
Se você estiver na dúvida, acho que é válido baixar na internet o ebook do livro pra dar uma olhada por cima antes de comprar. O C++: Como Programar eu já vi aí pela net... O do Herbert eu nunca vi, apenas o "C Completo e total". (Não estou falando para você simplesmente baixar o livro na internet, mas conferir se o conteúdo atende a suas expectativas é válido, afinal o livro do Deitel é mais de 250 reais)