Dúvidas EP

Dúvidas EP

by Marlon Ribas Vismari -
Number of replies: 5
Olá professor / monitor.

Eu estou com várias dúvidas no EP.

- Para leitura do arquivo txt, estou deixando o newline como momento de pausa. Ou seja, pego um vetor, coloco a linha inteira e depois manipulo para num1 e num2. O problema é qual é a pausa que eu dou para ´avisar´ que meu arquivo terminou de ser lido? ou seja, todas linhas já foram lidas e, então, eu aborto o while?

- Nesta função le_linha_arquivo(FILE *arq, int num1[], int num2[], char *op), o fato de mexer com num1 e num2 várias vezes, eu não terei problemas com posições? Pq quando leio a primeira linha e guardo em num1[1] e num[2] um valor, quando eu ler a proxima linha, digamos que só tenha um valor, então só guardarei em num1[1]. E o num1[2] ficará com o mesmo valor anterior. Isso irá acontecer ou terei de usar o malloc e free antes de avançar pra próxima linha?


- Nesta função int divide(int num1[], int num2[], int quoc[], int resto[]), o enunciado fala para fazer subtrações sucessivas. Você tem um exemplo desse método de divisão?

Por enquanto só essas dúvidas. (rsrs)

Obrigado
Marlon
In reply to Marlon Ribas Vismari

Re: Dúvidas EP

by Natan Costa Lima -
- Para leitura do arquivo txt, estou deixando o newline como momento de pausa. Ou seja, pego um vetor, coloco a linha inteira e depois manipulo para num1 e num2. O problema é qual é a pausa que eu dou para ´avisar´ que meu arquivo terminou de ser lido? ou seja, todas linhas já foram lidas e, então, eu aborto o while?

Não entendi muito bem. mas acho que o que vc está procurando é o EOF,
por exemplo o getchar() devolve EOF se não existir mais caracteres a serem lidos do arquivo.
O scanf geralmente devolve quantos parametros ele conseguiu ler.
Por exemplo:
scanf("%d %d",&a,&b) devolve 2 se conseguir ler a e b, portanto se devolver diferente de 2 quer dizer q ele chegou no fim do arquivo.


- Nesta função le_linha_arquivo(FILE *arq, int num1[], int num2[], char *op), o fato de mexer com num1 e num2 várias vezes, eu não terei problemas com posições? Pq quando leio a primeira linha e guardo em num1[1] e num[2] um valor, quando eu ler a proxima linha, digamos que só tenha um valor, então só guardarei em num1[1]. E o num1[2] ficará com o mesmo valor anterior. Isso irá acontecer ou terei de usar o malloc e free antes de avançar pra próxima linha?

Pode assumir que a entrada sempre vem com o seguinte formato:

<numerograde1> <operador> <numerogrande2>

- Na função int multiplica_digito(int num[], int d, int k, int res[], eu não entendi esse k. O que seria exatamente esse 10^k?

significa "Dez elevado a k".

- Nesta função int divide(int num1[], int num2[], int quoc[], int resto[]), o enunciado fala para fazer subtrações sucessivas. Você tem um exemplo desse método de divisão?

155 / 50:

155 - 50 = 105
105 - 50 = 55
55 - 50 = 5

logo 155 / 50 = 3
esse método pode ser usado pelo resto da divisão também (%) onde
155 % 50 = 5

In reply to Natan Costa Lima

Re: Dúvidas EP

by Marlon Ribas Vismari -

Natan,

antes de mais nada obrigado por responder.

Então, na verdade nós que cursamos MAC0115 não aprendemos a manipular arquivos. Ai eu estava seguindo o que o professor falou no EP: fscanf(entrada,...). Foi exatamente o problema. Se vc puder disponibilizar algum material que tiver ou algum link, ficaria grato. Mas terei de ir atrás. Essas funções estão em <string.h>?

Obrigado

In reply to Marlon Ribas Vismari

Re: Dúvidas EP

by Natan Costa Lima -
Eu falei que scanf le de arquivo mas na verdade le da entrada padrão.
O terminal no linux, ou aquela janelinha do DOS no windows.

para ler de arquivo realmente precisa do fscanf.

Com fscanf serve oq eu falei para scanf, quando chega o final do arquivo ela devolve EOF ou quantos argumentos conseguiu ler.

Uma referencia : http://www.cplusplus.com/reference/clibrary/cstdio/fscanf/

ai tem bastante informações sobre bibliotecas de c e c++

fscanf está em <stdio.h>

io vem de input output
In reply to Natan Costa Lima

Re: Dúvidas EP

by Marlon Ribas Vismari -
Natan,
vc não entendeu minha dúvida em relação a função le_linha_arquivo.

Digamos que fizemos a primeira chamada a esta função e suponhamos:

num1: -3| 2 | 4 | 5 | ? | ?
num2: -2| 1 | 3 | ? | ? | ?

Ai na segunda chamada a função, suponhamos que a conta da próxima linha seja 1 + 1. Então teremos:

num1: 1| 1 | 4 | 5 | ? | ?
num2: 1| 1 | 3 | ? | ? | ?

Repara que o que foi colocado antes no vetor, na primeira chamada, não foi liberado. O que não aconteceria se eu tivesse usado malloc e depois um Free(). Existe algum modo de eu 'Desalocar' toda a memória que meu vetor ocupou? Uma espécie de um Free?

Obrigado
In reply to Marlon Ribas Vismari

Re: Dúvidas EP

by Francisco Reverbel -
Marlon,

Nós ainda não vimos as funções malloc e free. Neste EP você não precisa (e nem deve) usá-las.

Não há problema algum com o exemplo que você deu acima. Os valores em vermelho, que eram do primeiro vetor, não serão usados na segunda operação! Como a primeira posição dos vetores agora contém 1, só mais uma posição de cada vetor será usada. As posições seguintes serão ignoradas. Para efeito da segunda operação, os valores em vermelho são lixo, assim como os valores denotados por "?".

Reverbel