Ir para conteúdo
Fórum Script Brasil

isrnick

Membros
  • Total de itens

    72
  • Registro em

  • Última visita

Tudo que isrnick postou

  1. Não ficou claro pra mim qual a diferença entre o OUTPUT NORMAL e o OUTPUT REAL no exemplo de mau funcionamento. Qual é o erro?
  2. Só para complementar o que o @ArteEN disse, você está se confundindo por causa do nome que escolheu dar a variável ni, o 'i' no nome ni não tem nada a ver com a variável i do seu ciclo while, o nome ni não muda por causa do valor da variável i. Você pode mudar o nome ni para qualquer outra coisa, como n ou num (lembrando de mudar em todos os lugares do código onde ni é usado), e o código vai continuar fazendo exatamente a mesma coisa, pois se trata apenas do nome de uma única variável, que só pode armazenar 1 valor. Fora isso, você criou o seu tópico no subfórum errado, este é o subfórum para postar sobre as linguagens C e C++, tópicos sobre a linguagem Python devem ser postados no subfórum de Python.
  3. isrnick

    Tutoriais

    Tem um livro open source/livre bom pra quem está começando em Python, ou até aprendendo a programar em geral, chamado Think Python (Pense Python) também conhecido como How to Think Like a Computer Scientist (Como Pensar Como um Cientista da Computação) originalmente escrito por Allen B. Downey para Java, e posteriormente adaptado para Python por Jeffrey Elkner, Chris Meyers, e Peter Wentworth. Recomendo especialmente as versões online interativas em inglês ou português, que permitem executar os exemplos do livro, assim como resolver e rodar os exercícios propostos, no próprio navegador. Português: Versão em português: https://penseallen.github.io/PensePython2e/ (Contém versão para ler online, ou link para comprar a versão impressa.) Versão EPUB em português: https://github.com/PenseAllen/PensePython2e/blob/master/ebooks/PenseEmPython2e.epub Versão PDF em português: http://eltonminetto.net/docs/pythontut.pdf (Acredito que esse PDF seja uma tradução diferente.) Versão online interativa em português: https://panda.ime.usp.br/pensepy/static/pensepy/index.html (Dispinibilizado pelo IME-USP para ser usado pelos alunos de introdução a programação, traduzida da versão interativa em inglês. Link para a página contendo outros recursos para estudo: https://panda.ime.usp.br/panda/python ) Inglês: Versão original em inglês: http://greenteapress.com/wp/think-python-2e/ (Contém links para download de PDF, ler online em HTML, ou comprar a versão impressa.) Versão modificada por Peter Wentworth em inglês: http://openbookproject.net/thinkcs/python/english3e/ (Por se tratar de um livro open source outros autores tem a possibilidade de fazer versões modificadas ou ampliadas baseadas no original. As versões interativas por sua vez basearam-se nessa versão.) Versão online interativa em inglês: https://runestone.academy/runestone/static/thinkcspy/index.html Outro livro livre online que é recomendado mais pra quem já tem algum conhecimento de linguagem de programação é o "Dive Into Python 3" (http://www.diveintopython3.net/), mas não encontrei tradução dele.
  4. Aqui eu fiz uma função simples para comparar datas: struct Data{ int dia, mes, ano; }; /*Retorna 0 se data1 == data2, um número positivo se data1 > data2, ou negativo se data1 < data2. */ int compara_datas(Data data1, Data data2){ int delta_anos, delta_meses, delta_dias; delta_anos = data1.ano - data2.ano; delta_meses = data1.mes - data2.mes; delta_dias = data1.dia - data2.dia; if (delta_anos != 0) return delta_anos; if (delta_meses != 0) return delta_meses; return delta_dias; }
  5. É um programa simples, seu conhecimento é mais que suficiente. O tipo char nada mais é que um número inteiro, a diferença do o tipo char para o tipo int é que ele tem apenas 8 bits em forma binária, enquanto o int tem pelo menos 16 bits (normalmente tem 32 bits na arquitetura x86), quando você manda imprimir um caractere, por exemplo usando "%c" no printf() o que ele faz é usar uma tabela de conversão que pega esse número inteiro e acha o caractere correspondente na tabela, e então imprime o caractere na tela. Existem várias tabelas de caracteres, e uma bem básica e conhecida é a tabela ASCII. Então seu programa deve simplesmente pegar todos os caracteres digitados pelo usuário e imprimir na tela o número inteiro correspondente, usando "%u" (inteiro sem sinal) no printf(). Por exemplo: #include <stdio.h> int main() { unsigned char c = '\0'; while(c != '\n'){ c = getchar(); if (c != '\n') printf(" %c\t%u\n", c, c); } return 0; }
  6. O valor está de x está fixo, logo x%20 vai calcular o número de notas de 20 do valor total, não apenas do que restou. Faça assim: x = int(input()) a = x//100 x = x%100 b = x//50 x = x%50 c = x//20 x = x%20 d = x//10 x = x%10 e = x//5 x = x%5 f = x//2 g = x%2 print(a, b, c, d, e, f, g)
  7. Se a primeira letra vai ser lida antes do ciclo, o valor inicial de cont deve ser 1. E nesse caso também poderia fazer assim: #include<stdio.h> int main(void){ int cont=1; char letra; scanf("%c",&letra); while(letra != 'A' && letra != 'a'){ scanf("%c",&letra); if (letra != '\n') cont = cont + 1; } printf("Foram feitas %d tentativas",cont); return 0; } Para descartar os '\n' que ficam como lixo na entrada padrão, e contar apenas as letras. Dessa maneira você pode entrar tanto 1 letra por vez seguidas de Enter, quanto digitar todas as letras de uma vez e só então da Enter: b c d e a ou então assim: bcdea Ambos resultam em: Foram feitas 5 tentativas
  8. Ok, o problema é que o comprimento do array/vetor é muito grande, ou seja quando você faz prohibited[N], com N tendo valor de mais de 1 milhão, está tentando reservar espaço demais no stack da memória para armazenar os valores, e isso causa o erro. Nesse caso é necessário alocar memória dinamicamente, usando malloc() (da biblioteca stdlib.h), a fim de guardar os valores no heap da memória, onde grandes quantidades de dados podem ser armazenados: #define L 1024 /* linear lattice size */ #define ofile "ZProhibited.10" /* output binary file name */ #include <stdio.h> #include <ctype.h> #include <stdlib.h> int main() { int N=L*L, *prohibited, i; FILE *fdata; prohibited = malloc(N * sizeof(*prohibited)); for(i=0 ; i<3L+1 ; i++) { prohibited[i]=0; } for(i=3L+1 ; i<3L+12 ; i++) { prohibited[i]=1; } for(i=3L+12 ; i<4L+1 ; i++) { prohibited[i]=0; } for(i=4L+1 ; i<4L+12 ; i++) { prohibited[i]=1; } for(i=4L+12 ; i<N ; i++) { prohibited[i]=0; } fdata=fopen(ofile,"wb"); fwrite(prohibited, sizeof(int), N,fdata); fclose(fdata); free(prohibited); return 0; } OBS: Lembre-se que é necessário usar free() para liberar a memória alocada dinamicamente.
  9. Aqui está gerando o arquivo, que problema está tendo?
  10. Para postar códigos use a tag CODE apertando o botão <> no topo do campo de respostas, assim você preserva a formatação do código e evita que o fórum faça alterações nele. Por exemplo, o fórum "comeu" todos os [ i ] (sem espaços) do seu código pois no fórum isso é a tag para deixar o texto em itálico, então o texto do seu código está em itálico a partir do primeiro que foi encontrado (os demais apenas somem porque o texto já tá em itálico). Mas já posso ver alguns erros no programa, onde você está colocando comparações no primeiro parâmetro dos ciclos for, como i>4L, imagino que queria colocar i = 4L+1? E talvez seria melhor fazer um único ciclo for com alguns ifs dentro...
  11. O objeto arquivo (ftest) já é iterável, e quando iterado sobre retorna uma linha a cada iteração, logo não é necessário usar read ou readlines. Logo teste isso: def search(): filetest = "C:/Python33/exemplo.txt" #demanded codes file #read the demanded codes file ftest = open(filetest, 'r') for i, line in enumerate(ftest): print(i, line) A saída na tela deveria ser o número da linha seguido do texto da linha: Por exemplo para exemplo.txt: abcde ferd sfdasf gfdgrt gfdg A saída será: 0 abcde 1 ferd 2 sfdasf 3 gfdgrt 4 gfdg
  12. Tenta assim: typedef struct node{ char dado; struct node *esq; struct node *dir; } Node;
  13. O problema é que você não definiu o que a função primeiroPilha retorna se algum dos ifs dentro da função não for satisfeito. Ou seja, se alguma condição dos ifs da função não for VERDADEIRO, esta função não retornará nada, pois o único return está dentro dos ifs, e essa função tem tipo char (não é void) e sempre precisa retornar algum valor.
  14. O problema provavelmente é que está usando o especificador de formato errado para imprimir na tela o tipo unsigned long long. Veja, esse código funcionou como esperado aqui: #include <stdio.h> int main(){ unsigned long long i = 1; printf("%llu\n", i<<60); return 0; } Um site contendo a tabela de especificadores de formato do printf() e sua família de funções: http://pt.cppreference.com/w/c/io/fprintf
  15. Em outras linguagens é usado abre e fecha chaves { }, ou algo do tipo "comando e fim_do_comando", para indicar onde começa e termina um bloco de comandos. Mas em Python a indentação é que indica quais comandos pertencem a um mesmo bloco. <comando 1> if <condicao>: <comando 1 dentro do bloco de comandos do if> <comando 2 dentro do bloco de comandos do if> <comando 2> <comando 3> Ex: a = 7 print "fora do if" if a < 10: print "dentro do if" a = 15 print "ainda dentro do if" print "fora do if novamente" Logo, é muito importante sempre usar a indentação corretamente, de forma consistente. E isso é muito bom pra quem está aprendendo a programar, pois aprende dês de cedo a deixar o código bem organizado, já que em Python indentar corretamente é obrigatório.
  16. A mensagem de erro já diz o que é, ou seja, significa que você colocou algum espaço em branco no começo da primeira linha quando você copiou e colou, e não deveria.
  17. Aqui compilou e rodou normalmente, sem erros.
  18. Seus erros provavelmente estão acontecendo por causa de má indentação do código. Ou seja, o número de espaços em branco no começo de cada linha tem ser consistentes e indicar corretamente a que agrupamento os comandos pertencem. Em Python essa sintaxe é válida sim: elif 0 <= temp <= 20: E funciona exatamente como esperado, ou seja a condição será satisfeita se o valor de temp for maior ou igual a 0 e menor ou igual a 20. (Obs: Em várias outras linguagens de programação essa sintaxe não funciona.) E o operador 'E/AND lógico' em Python é o operador and, enquanto o operador & é um operador 'E/AND binário'. Logo, o modo alternativo de escrever a mesma comparação acima em Python corretamente seria assim: elif (temp >= 0) and (temp <= 20): Mas ambos farão a mesma coisa em Python. Fora a indentação errada a única coisa que está faltando no seu código original é converter o valor obtido pelo raw_input() para um número inteiro, visto que essa função retorna uma string não um número. Pra isso basta usar a função int(), e o código fica assim (em Python 2): temp = int( raw_input('Entre com a temperatura:') ) if temp < 0: print 'Congelando...' elif 0 <= temp <= 20: print 'Frio' elif 21 <= temp <= 25: print 'Normal' elif 26 <= temp <= 35: print 'Quente' else: print 'Muito quente!' E em Python 3 ficaria assim: temp = int( input('Entre com a temperatura:') ) if temp < 0: print('Congelando...') elif 0 <= temp <= 20: print('Frio') elif 21 <= temp <= 25: print('Normal') elif 26 <= temp <= 35: print('Quente') else: print('Muito quente!')
  19. Sua função não verifica se é palíndromo, apenas gera o número invertido (com um zero a mais), então ou muda o nome da função para "reverso" ou muda a lógica dela pra verificar se é palíndromo... int palindromo (int num){ int rev = 0, cnum = num; while (num){ //O erro de colocar 0 a mais estava nessa linha //multiplicando tudo por 10, ao invés de apenas rev rev = num % 10 + rev * 10; num /= 10; } if (cnum == rev) return -1; // Valor != de 0 é VERDADEIRO else return 0; // 0 = FALSO }
  20. Isso foi introduzido na versão C99 da linguagem (antes não era permitido), então modifique as configurações do codeblocks (Settings > Compiler...) para compilar usando esse padrão (ou o C11 que é mais recente). O parâmetro a ser passado para o compilador deve ser um desses: Para C99: -std=c99 Para C11: -std=c11 Para C99 com extensões GNU: -std=gnu99 Para C11 com extensões GNU: -std=gnu11
  21. #include <iostream> using namespace std; int main() { cout << fixed; cout << 1456345.65 << endl; cout << scientific; cout << 1456345.65 << endl; return 0; } http://en.cppreference.com/w/cpp/io/manip/fixed
  22. Acredito que seja algo assim o que o enunciado pede: O objetivo seria criar 10 ponteiros e fazer cada um deles apontar para uma linha/palavra da matriz, tal que o primeiro ponteiro aponte para a posição da matriz que tem a primeira palavra em ordem alfabética, o segundo ponteiro aponte para a posição da matriz com a segunda palavra em ordem alfabética, etc. Assim quando você chamar esses ponteiros em seqüência para imprimir a palavra, você vai imprimir as palavras em ordem alfabética, mas a matriz original nunca foi alterada, e não foi necessário copiar nenhuma string. #include <stdio.h> #include <string.h> int main() { int i, j; char M[10][15] = {"brasil", "argentina", "colombia", "russia", "china", "bolivia", "franca", "portugal", "espanha", "israel"}; char *p[10]; // Ordenando os ponteiros usando o algoritmo de ordenação por inserção: for (i=0; i<10; i++){ for (j=i; j > 0 && strcmp(M[i], p[j-1]) < 0; j--){ p[j] = p[j-1]; } p[j] = M[i]; } printf("Imprimindo a partir dos ponteiros:\n\n"); for (i=0; i<10; i++) printf("%s ", p[i]); printf("\n\n\nMas a matriz original não foi modificada:\n\n"); for (i=0; i<10; i++) printf("%s ", M[i]); printf("\n"); return 0; }
  23. Quando se usa & antes do nome de uma variável, como &a no seu programa, está sendo obtida a referência/endereço de memória desta variável, para acessar o valor guardado na variável deve-se usar o nome da variável sem &. Logo, no printf() não se deve usar &a, pois você quer imprimir o valor armazenado na variável, não a referência dessa variável. O motivo pelo qual você usa &a no scanf() é porque nesse caso o objetivo é informar para esta função o endereço de memória onde o valor capturado pela função deve ser guardado, assim quando a função guardar um valor nesse local da memória estará de fato guardando um valor no espaço da memória reservado para a variável "a", logo posteriormente esse valor poderá ser obtido acessando essa variável.
  24. O if anterior ao else não está abrindo chaves {...
×
×
  • Criar Novo...