Ir para conteúdo
Fórum Script Brasil

jth.

Membros
  • Total de itens

    20
  • Registro em

  • Última visita

Tudo que jth. postou

  1. jth.

    Strings

    Wendell, Na verdade é só trocar L1 por L2 mesmo, e não as duas entre si... Até mais, ;D
  2. jth.

    Strings

    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.
  3. jth.

    String

    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
  4. jth.

    Vetor intersecção

    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.
  5. jth.

    String

    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
  6. jth.

    string

    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
  7. jth.

    string

    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...
  8. jth.

    string

    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.
  9. 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
  10. jth.

    string

    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
  11. 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
  12. jth.

    Prolema com matriz

    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
  13. jth.

    Matriz

    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
  14. jth.

    Matriz

    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,
  15. 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)
  16. Hã? Estou fazendo Engenharia de Computação pelo CEFET... E nosso curso é de 5 anos, mais do que a maioria dos cursos da área... tsc... Eu sei que pelo menos aqui no CEFET é um curso novo, entrei nesse último semestre e somos a 4ª turma, mas já devem ter outros cursos de Engenharia de Computação reconhecidos país afora... porque ficamos de fora? =p Fuiz =)
  17. jth.

    IDE

    Sim, o DevC++ é uma IDE... mais detalhes pela wiki Acho que o Beraldo está certo, também sou iniciante e até semana passada usava o DevC++, quando vim pro linux fiquei usando só o editor de textos e o compilador GCC via linha de comando mesmo, acho uma boa que assim você acaba aprendendo detalhes da "compilação" que não aprenderia simplesmente usando um atalho do DevC++, por exemplo... É claro que para projetos maiores as IDE's são uma mão na roda, mas no começo com programas bem simples usar o editor de textos e compilar na mão é uma boa opção, ainda mais se C for sua primeira linguagem, como é o meu caso. Até mais, ;D
  18. Sim, acho que já tinha tentado instalar antes esses pacotes, de qualquer maneira agora funcionou. Porém a quantidade de manpages traduzidas parece que ainda é limitada. Mas ainda assim é uma ótima dica, melhor 50% que 0%, valeu! Até mais, =)
  19. Ráh! Fico feliz em saber que a minha dúvida pode inspirar algum tipo de "desafio". :D Eu não conhecia nenhuma dessas funções que você apresentou para resolver o problema, meu inglês ainda é muito deficiente para estudar através dos "man", é uma pena, pois parece que é possível tirar muitas dúvidas apenas consultando esses manuais... Obrigado novamente pelo esforço Beraldo. Até mais, ;)
  20. Obrigado pela resposta rápida Beraldo. =D O scrollok é uma saída, mas não é a mesma coisa né... É uma pena não poder usar a barra de rolagem com a ncurses. Eu ainda estou fazendo a transição do win p/ o linux e essas dúvidas pintam direto. Como estou aprendendo o básico sobre C, o uso da função getch() era bem freqüente antes de fazer a transição. Então fui buscar a mesma função na ncurses, mas aparentemente ela é uma biblioteca bem difrente e um pouco mais avançada para quem está começando agora... Bom, pelo menos essa é a minha impressão. Até mais ;D
  21. Olá, sou um iniciante em C (primeiro semestre de eng. de computação =p) e no mundo Linux/GNU e estou tendo alguns problemas com a "ncurses". O que está acontecendo parece bobagem, mas não sei resolver, já andei lendo por aí, mas até agora nada. Quando uso ncurses e a função initscr(), para inicializar a biblioteca, ele cria uma nova "window" no terminal e é nessa window que o resto do programa roda usando funções de saída e entrada diferentes das habituais (printw() em vez de printf, por exemplo). Até aí tudo bem, o meu problema é que essa nova "window" não habilita a "barra de rolagem" quando necessário. Quando a janelinha "enche" a barra de rolagem não é ativada para continuar lendo as saídas que aparecem abaixo... Deu para entender? Eis um exemplo de programa: #include <stdio.h> #include <curses.h> int main(void) { char r; initscr(); do { printw("\n\n\tTestando...\n\n\n\n\n\n\n\n\tDeseja repetir? (s/n)"); noecho(); r = getch(); while(r!='s' && r!='n') { printw("\n\tResponda usando 's' para 'sim' e 'n' para 'não'.\n\tE então? Deseja repetir?"); r = getch(); } } while('s' == r); endwin(); } Nesse caso, se eu continuo apertando "s" a mensagem inicial se repete até que fica "cortada" pela tela, que não me deixa ver o "resto" da mensagem... A imagem de como fica o terminal: Bom... é isso aí... O problema é com o terminal ou com o code? Se é o código o que tenho que fazer para habilitar essa "barra de rolagem"? Até mais, ;) P.S.: Estou usando o Ubuntu 8.10 como S.O. e o GCC para compilar os programas.
×
×
  • Criar Novo...