arandoble 0 Denunciar post Postado Março 30, 2012 Estou tento dificuldades em resolver esse algoritmo. Ele deve somar dois vetores de tamanho n. No arquivo de entrada são passados (2n+1) números: o primeiro número int é o tamanho de posições de um array de float; os demais números float são o conteúdo de dois arrays. A resposta é a soma desses dois arrays. Exemplo: seja 3 o número de dimensões do vetor, logo o primeiro vetor v1 = (2.1; 2.4; 5.6) e o segundo vetor v2 = (4.1; 3.4; 9.6), logo o arquivo de saída será v1+v2 = (6.2; 5.8; 15.2) aqui está o que eu conseguir fazer. #include <stdio.h> #include <stdlib.h> #define TAM 5 int main(int argc, char *argv[]) { float vt1[TAM], vt2[TAM], vtS[TAM]; int i; for(i=0; i<TAM; i++){ printf("digite os valores de VT1:"); scanf("%f", &vt1[i]); } printf("\n\n"); for(i=0; i<TAM; i++){ printf("digite os valores de VT2:"); scanf("%f", &vt2[i]); } for(i=0; i<TAM; i++){ vtS[i] = (vt1[i] + vt2[i]); } printf("%f\n Saída", vtS); system("PAUSE"); return 0; } Exemplo de Entrada 3 2.1 2.4 5.6 4.1 3.4 9.6 Exemplo de Saída 6.2 5.8 15.2 Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Março 30, 2012 Ao meu ver, o código está certo. qual a sua dificuldade? Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Março 30, 2012 O problema grande está na seguinte linha: printf("%f\n Saída", vtS); Na chamada acima, printf recebe o valor de vtS. E o valor de qualquer array em C é um ponteiro para seu primeiro elemento. A linha acima faz tanto sentido quanto o código abaixo (ou seja, nenhum): float a = 10.0f, *f = &a; printf("%f", f); O que você deve estar querendo é imprimir cada elemento do vetor de floats resultantes. Compartilhar este post Link para o post Compartilhar em outros sites
eversonwolf 0 Denunciar post Postado Abril 1, 2012 Estou tento dificuldades em resolver esse algoritmo. Ele deve somar dois vetores de tamanho n. No arquivo de entrada são passados (2n+1) números: o primeiro número int é o tamanho de posições de um array de float; os demais números float são o conteúdo de dois arrays. A resposta é a soma desses dois arrays. Exemplo: seja 3 o número de dimensões do vetor, logo o primeiro vetor v1 = (2.1; 2.4; 5.6) e o segundo vetor v2 = (4.1; 3.4; 9.6), logo o arquivo de saída será v1+v2 = (6.2; 5.8; 15.2) aqui está o que eu conseguir fazer. #include <stdio.h> #include <stdlib.h> #define TAM 5 int main(int argc, char *argv[]) { float vt1[TAM], vt2[TAM], vtS[TAM]; int i; for(i=0; i<TAM; i++){ printf("digite os valores de VT1:"); scanf("%f", &vt1[i]); } printf("\n\n"); for(i=0; i<TAM; i++){ printf("digite os valores de VT2:"); scanf("%f", &vt2[i]); } for(i=0; i<TAM; i++){ vtS[i] = (vt1[i] + vt2[i]); } // É bem aqui que você esqueceu de colocar o for. for (i=0; i<TAM; i++) { printf(" Saida %f\n", vtS[i]); } system("PAUSE"); return 0; } Exemplo de Entrada 3 2.1 2.4 5.6 4.1 3.4 9.6 Exemplo de Saída 6.2 5.8 15.2 A modificação que fiz esta como comentario no programa acima. Compartilhar este post Link para o post Compartilhar em outros sites
arandoble 0 Denunciar post Postado Abril 1, 2012 A modificação que fiz esta como comentario no programa acima. Agradeço pela a ajuda. Porém se possível peço mais uma ajuda, como posso determinar a dimensão do vetor. por exemplo: Os vetores vt1 e vt2 tenham o tamanho para eu digitar. Exemplo de Entrada 3 <------------------dimensão do vetor ( ou seja os vetores vt1 e vt2 terão tamanhos 3) 2.1 2.4 5.6 4.1 3.4 9.6 Exemplo de Saída 6.2 5.8 15.2 Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Abril 1, 2012 Não entendi sua dúvida. Compartilhar este post Link para o post Compartilhar em outros sites
arandoble 0 Denunciar post Postado Abril 2, 2012 Não entendi sua dúvida. Antes de colocar os números no vetor vt1 e os números no vt2, preciso determinar os tamanhos desses vetores ou seja: 1º eu digito o tamanho dos vetores: 3 (então nesse caso eu só posso colocar três números no vt1 e três números no vt2) Como eu crio e aplico essa variável(que determina o tamanho dos vetores) no programa, e se ela pode ser um outro vetor? Compartilhar este post Link para o post Compartilhar em outros sites
GBecker 51 Denunciar post Postado Abril 2, 2012 Entendi. Acho que no seu caso não pode ser um vetor declarado de forma estática. Tem que declará-lo como vetor dinâmico utilizando a variável tamanho digitada pelo usuário. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Abril 2, 2012 Tipo, pelo o que eu entendi, você pode utilizar um vetor da C99, que você pode inicializar com uma variável ao invés de um literal, ou então utilizar alocação dinâmica, que já é mais complexo... #include <stdio.h> int main(void) { int n = 1; for(;;) { printf("Digite o tamanho do vetor: "); scanf(" %d", &n); if(n > 0) break; } int vetor_int[n]; return 0; } Para compilar: gcc -WAll -WExtra -WError -pedantic -ansi -std=c99 -o <nome_do_arquivo_de_saida> <nome_da_source> Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
guidjos 65 Denunciar post Postado Abril 3, 2012 Não sabia que o problema era a alocação baseada no conteúdo dos arquivos. Segue o exemplo. Baseie-se nele para fazer o resto do programa: #include <stdio.h> #include <stdlib.h> #define BUFFSZ 256 int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "\n\tEspecifique o nome do arquivo de entrada.\n"); exit(EXIT_FAILURE); } FILE *input = NULL; if ((input = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "\n\tErro ao tentar abrir o arquivo '%s'.\n", argv[1]); exit(EXIT_FAILURE); } char buff[bUFFSZ]; if (fgets(buff, sizeof buff, input) == NULL) { fprintf(stderr, "\n\tErro de leitura.\n"); exit(EXIT_FAILURE); } unsigned int n = 0; if (sscanf(buff, "%u ", &n) == 0) { fprintf(stderr, "\n\tFormato de arquivo de entrada invalido.\n"); exit(EXIT_FAILURE); } printf("\n\tAlocando vetores de %u ints.\n\n", n); int vetor_a[n], vetor_b[n]; } Para compilar este exemplo, use: gcc -std=c99 -Wall -Wextra -pedantic -Werror -Wno-unused [arquivo.c] -o [executavel] Compartilhar este post Link para o post Compartilhar em outros sites
arandoble 0 Denunciar post Postado Abril 9, 2012 Não sabia que o problema era a alocação baseada no conteúdo dos arquivos. Segue o exemplo. Baseie-se nele para fazer o resto do programa: #include <stdio.h> #include <stdlib.h> #define BUFFSZ 256 int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "\n\tEspecifique o nome do arquivo de entrada.\n"); exit(EXIT_FAILURE); } FILE *input = NULL; if ((input = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "\n\tErro ao tentar abrir o arquivo '%s'.\n", argv[1]); exit(EXIT_FAILURE); } char buff[bUFFSZ]; if (fgets(buff, sizeof buff, input) == NULL) { fprintf(stderr, "\n\tErro de leitura.\n"); exit(EXIT_FAILURE); } unsigned int n = 0; if (sscanf(buff, "%u ", &n) == 0) { fprintf(stderr, "\n\tFormato de arquivo de entrada invalido.\n"); exit(EXIT_FAILURE); } printf("\n\tAlocando vetores de %u floats.\n\n", n); int vetor_a[n], vetor_b[n]; } Para compilar este exemplo, use: gcc -std=c99 -Wall -Wextra -pedantic -Werror -Wno-unused [arquivo.c] -o [executavel] Muito obrigado! a você e a todos que me ajudaram, conseguir resolver o problema. Queria ter postado isso antes mas não estava conseguindo entrar no site. Abaixo está como ficou o código. #include "Arquivo.h" #include <stdio.h> #include <stdlib.h> int main() { FILE *entrada = abrirArquivoEntrada(); FILE *saida = abrirArquivoSaida(); float *vt1, *vt2, *vt1ini=NULL, *vt2ini=NULL; int i; int control=0, cont=0, cont2, tamanho; while(control<= 1){ if(cont==0){ fscanf(entrada, "%d", &tamanho); vt1=(float *) calloc (tamanho, sizeof(float *)); vt2=(float *) calloc (tamanho, sizeof(float *)); vt1ini=vt1; vt2ini=vt2; cont=0; } else{ if((fscanf(entrada, "%f", vt1))!=EOF){ (*vt2)=(*vt1)+(*vt2); vt1++; vt2++; if(cont>=tamanho){ vt1=vt1ini; vt2=vt2ini; cont=0; } } else{ control=3; } } cont++; } vt2=vt2ini; for(cont=1; cont<=tamanho; cont++){ fprintf(saida, "%0.1f\n", *vt2); vt2++; } fclose(entrada); fclose(saida); printf("Sua saida:"); print(nomeSaida); compararSaidaResposta(); system("PAUSE"); } Compartilhar este post Link para o post Compartilhar em outros sites