Anonymní profil AB – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil AB – Programujte.comAnonymní profil AB – Programujte.com

 

Příspěvky odeslané z IP adresy 2a00:102a:4003:e938:61dd:a1a4:7543:392a...–

AB
C / C++ › Úlohy v jazyce C
2. 10. 2021   #388693

#6 TheOndrap
Nelze než souhlasit. Konkrétně jazyk C je kvůli jeho záludnosti třeba poznávat pomalu a podrobně, nikoli jednotlivé kapitoly uspěchat a snažit se stavět na hliněných nohách. Pro úplného začátečníka by byl vhodnější jiný jazyk (Python, PHP, JavaScript, C#), kde je možné klást větší důraz na samotnou algoritmizaci, netrávit spoustu času nad základními kameny a "někam se dopracovat". Jak široká problematika se v C týká třeba textu - formátovací řetězce, ukončovací znak, ukazatele, správa paměti...

Jen tak pro představu, možná produkční podoba daného programu s ošetřením výjimek (za naprostou bezchybnost stejně neručím, jelikož jsem jen trochu pokročilejší student než autor vlákna) :) :

#include <stdio.h>
#define SOUBOR_FR "hmotnost.txt"
#define SOUBOR_FW "vysledek.txt"
#define NORMA 100.0
#define TOLERANCE 1

int main()
{
  int
    main_return = 0, /* návratová hodnota fce main */
    pocet_spravne = 0,
    pocet_hodnot = 0;
  double
    nactena_hodnota = 0;
  FILE
    *fr, /* soubor pro čtení hodnot */
    *fw; /* soubor pro zápis výsledku */
  
  fr = fw = NULL;

  /* otevření souborů */
  if ((fr = fopen(SOUBOR_FR, "r")) == NULL) {
    fprintf(stderr, "Nepodařilo se otevřít soubor \"%s\".\n",
            SOUBOR_FR);
    return 1;
  }
  if ((fw = fopen(SOUBOR_FW, "w")) == NULL) {
    fprintf(stderr, "Nepodařilo se otevřít soubor \"%s\".\n",
            SOUBOR_FW);
    if (fclose(fr) == EOF)
      fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
              SOUBOR_FR);
    return 1;
  }

  /* počítání správných kusů */
  while (feof(fr) == 0) {
    if (fscanf(fr, " %lf g\n", &nactena_hodnota) == 1) {
      pocet_hodnot++;
      if (nactena_hodnota >= NORMA - TOLERANCE
          && nactena_hodnota <= NORMA + TOLERANCE) {
        pocet_spravne++;
      }
    }
    else
      fprintf(stderr, "Chyba při čtení hodnoty...\n");
  }
  /* zápis výsledku do souboru */
  if (fprintf(fw, "%d\n", pocet_hodnot - pocet_spravne) < 0)
    fprintf(stderr, "Nepodařilo se zapsat výsledek do souboru \"%s\".\n",
            SOUBOR_FW);

  /* uzavření souborů */
  if (fclose(fr) == EOF) {
    fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
            SOUBOR_FR);
    main_return = 1;
  }
  if (fclose(fw) == EOF) {
    fprintf(stderr, "Nepodařilo se uzavřít soubor \"%s\".\n",
            SOUBOR_FW);
    main_return = 1;
  }

  return main_return;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý