Diskuze: programovanie funkcie C
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Po dlouhé době vidím nějaké rozumné příklady do školy, které umožnují procvičit si širší část jazyka C (práce s funkcemi, se soubory, s ukazateli, s dynamickou alokací a logické uvažování).
Zkusil jsem: skúšal som to robiť sam pomocou prezentácií, bohužiaľ neúspešne
To že si se to snažil řešit sám je naprosto v pořádku. Neúspěšně je však ne moc konkrétní pojem. Co máš hotového, co konkrétně nevíš?
neviem akú ma ten program mať štruktúru, ako volať tie funkcie, neviem
ako funguje smerník, funkciu na výpis poľa viem, párne nepárne, max min tie
základne veci budem vedieť.
ďakujem
Však také o struktuře programu nic vědět nemusíš, program psát nemáš. Zadání jasně říká, že máš napsat 5 funkcí. A to jak mají vypadat jejich deklarace, tedy jejich prototyp, je uvedeno na konci každého bodu úkolu. Ale abys ověřil funkčnost tebou napsaných funkcí, je dobré si nějaký svůj program napsat. Jak pak volat v programu uvedené funkce bys ale znát měl. Stejně tak jako to co jsou to ukazatele, bez toho se při zpracování úkolů neobjedeš.
určite by mi pomohlo nejaké vzorové riešenie hoci podobného problemu.
To jak se pracuje s poly, soubory, ukazately a dynamickou alokací paměti, toho je v praktické podobě dost ode mě v sekci C. Doporučuji se na to minimálně podívat a pokusit se pochopit.
Zkus 1. příklad, bod 1a - otevření a zavření souboru.
Zde je malá nápověda:
ukazatel na FILE, fopen(), fclose(), NULL
Domnívám se, že nevíš jak vůbec začít.. Zkusím Tě trochu víc
nakopnout..
Tak pojďme na to...
Nejprve si vytvoř testovací soubor nums.txt a naplň ho např. těmito daty:
-10
20
0
30
-40
50
-60
-70
80
-90
Pro testování můžeš použít následující kód:
#define _CRT_SECURE_NO_WARNINGS
#define DEBUG 0 // ladeni - DEBUG 1
#define SIZE 500 // velikost pole
#include <stdio.h>
#include <stdlib.h>
// Prototypy
int * AlokujNapln(char *subor, int *velkost);
void Vypis(int *pole, int velkost);
int main(void) {
int n = 0; // pocet prvku ulozenych v poli
int *arr = NULL; // dynamicke pole
arr = AlokujNapln("nums.txt", &n);
// Kontrolni vypis obsahu promenne n
#if DEBUG == 1
printf("%d\n", n);
#endif
Vypis(arr, n);
free((void *)arr);
arr = NULL;
return 0;
}
Chceš-li vidět počet prvků uložených v poli, nastav makro DEBUG
na 1.
Pro testování měň hodnotu makra SIZE v rozsahu <0,11>
a sleduj co se děje.
Zde je kompletní bod 1:
// Alokace pameti a nacteni dat do pole ze souboru
int * AlokujNapln(char *subor, int *velkost) {
FILE *fp = NULL;
int tmp, *pole = NULL;
// Alokace pameti
pole = (int*)malloc(SIZE * sizeof(int));
if (!pole) {
fprintf(stderr, "Chyba alokace pameti.");
exit(1);
}
// Otevreni souboru pro cteni
fp = fopen(subor, "r");
if (!fp) {
fprintf(stderr, "Soubor nelze otevrit.");
free((void *)pole);
pole = NULL;
exit(1);
}
// Cteni dat ze souboru
while (!feof(fp) && (*velkost < SIZE)) {
if (fscanf(fp, "%d", &tmp) != 1) {
fprintf(stderr, "Chyba cteni dat.");
free((void *)pole);
pole = NULL;
exit(1);
}
if (tmp >= 0) {
*(pole + *velkost) = tmp;
(*velkost)++;
}
}
// Uzavreni souboru
if (fclose(fp) == EOF) {
fprintf(stderr, "Soubor nelze uzavrit.");
free((void *)pole);
pole = NULL;
exit(1);
}
return pole;
}
Zde je kompletní bod 2:
// Vypis pole na obrazovku
void Vypis(int *pole, int velkost) {
for (int i = 0; i < velkost; i++) printf("%d ", *(pole + i));
putchar('\n');
}
Nyní máš vše potřebné k tomu, abys mohl pokračovat dále v řešení úlohy (body 3,4,5).
Poznámka:
Abys mohl svoji úlohu obhájit, musíš porozumět tomu, co se v programu
děje. Toto ber pouze jako doporučení a instruktáž. Snaž se to
napsat svým vlastním způsobem. Zlepšíš tím své programové
dovednosti, které se ti budou později hodit. A o to jde! V opačném
případě ztratí zadání úlohy svůj smysl a také Ti velmi reálně hrozí
to, že Tě profesor snadno nachytá na tom, že to není tvá práce.
Stále platí, že pokud Ti cokoli nebude jasné, ptej se...
Zobrazeno 8 zpráv z 8.