Risolto Esercizio Trapezio - C

k35p0n33

Utente Iron
22 Febbraio 2022
16
4
2
14
Ultima modifica:
Buongiorno ragazzi, sono alle prese con questo esercizio che ho provato a risolvere. Qualcuno potrebbe indicarmi gli errori? Io l'ho 'risolto' in questo modo:

C:
/*
 Un file contiene su ogni riga 3 valori reali float corrispondono a base magg,
 base minore, e altezza di un trapezio, A (somma basi, per altezza, diviso due)
 vogliamo cercare in tutton il file i trapezi di area maggiore, minore e indicare
 in quale riga si trovano, e il valore dell'area.
 */

#include <stdio.h>
#include <stdlib.h>
#include <float.h>

int main() {
    float baseMin,baseMax,altezza,max,trapezio;
    FILE* fp;
   
    if((fp=fopen("trapezio.txt","r"))==NULL){
        printf("Impossibile aprire il file!\n");
        return EXIT_FAILURE;
    }
    int pos=0,posmax;
    while(fscanf(fp,"%f%f%f\n", &baseMin,&baseMax,&altezza)!=EOF){
        trapezio=((baseMin+baseMax)*altezza)/2;
        max=trapezio;
        pos++;
        if(trapezio>max){
            max=trapezio;
            posmax=pos;
        }
    }
   
    fclose(fp);
   
    printf("L'area del trapezio max vale %f in riga %d", trapezio,posmax);

    return EXIT_SUCCESS;
}
 
Hai fatto un po' di casini all'interno del while (max=trapezio sia fuori che dentro l'if e altri errori di questo tipo), ma per il resto eri vicino alla soluzione.
C:
#include <float.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  FILE *fp = fopen("trapezio.txt", "r");
  if (fp == NULL) {
    printf("Impossibile aprire il file!\n");
    return EXIT_FAILURE;
  }

  int posmax = -1;
  float areamax = 0;

  float baseMin, baseMax, altezza;
  for (int pos = 1; fscanf(fp, "%f%f%f", &baseMin, &baseMax, &altezza) != EOF; pos++) {
    float area = (baseMin + baseMax) * altezza / 2;
    if (area > areamax) {
      areamax = area;
      posmax = pos;
    }
  }

  fclose(fp);
  printf("L'area del trapezio max vale %f in riga %d\n", areamax, posmax);
  return EXIT_SUCCESS;
}
 
  • Mi piace
Reazioni: Hastro e k35p0n33
Hai fatto un po' di casini all'interno del while (max=trapezio sia fuori che dentro l'if e altri errori di questo tipo), ma per il resto eri vicino alla soluzione.
C:
#include <float.h>
#include <stdio.h>
#include <stdlib.h>

int main() {
  FILE *fp = fopen("trapezio.txt", "r");
  if (fp == NULL) {
    printf("Impossibile aprire il file!\n");
    return EXIT_FAILURE;
  }

  int posmax = -1;
  float areamax = 0;

  float baseMin, baseMax, altezza;
  for (int pos = 1; fscanf(fp, "%f%f%f", &baseMin, &baseMax, &altezza) != EOF; pos++) {
    float area = (baseMin + baseMax) * altezza / 2;
    if (area > areamax) {
      areamax = area;
      posmax = pos;
    }
  }

  fclose(fp);
  printf("L'area del trapezio max vale %f in riga %d\n", areamax, posmax);
  return EXIT_SUCCESS;
}
Grazie mille St3ve!