Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 24 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok NapísalOffline : 25.06.2015 18:28

Caute

Mam nasledovny program:
Kód:
#include <stdio.h>

main()
{
FILE *fr1, *fr2;
int z;

z=0;


fr1 = fopen("pismena1.txt", "r");
fr2 = fopen("pismena2.txt", "r");

while (feof(fr1) == 0  ||  feof(fr2) == 0){   
if(getc(fr1) != getc(fr2)){
        z++;
    }
}
if (z == 0)
    printf("subory su naprosto zhodne");
else
    printf("subory sa nezhoduju v %d znakoch", z);

    return 0;
}


No a v prvom rade otazka znie makro feof funguje tak ze nulova hodnota je pokial nedosiahol konca subora a nenulova pokial dosiahol ale cital som nieco ze to dava nenulovu az potom ako precita eof a ze sa to potom nejak pokazi a slucka ide odznova stale. Keby mi to mohol niekto objasnit prosim.

No a druha vec je v tom mojom programe kde je podmienka while tak vlastne ked mam subory z roznou dlzkou, povedzme ten prvy obsahuje menej znakov tak logicky kedze tam je OR a v prvom sa uz nema co citat feof sa rovna 1 a cyklus sa ukonci bez toho aby sa docital ten druhy subor dokonca. No ale nie on sa nejako zazracne cita dalej lebo ked program spustim tak vypise spravne o kolko znakov sa subory lisia. Pre mna by mi tam viac sedelo AND akoze ked su obidva docitane tak skonci cyklus. Takze tomu nechapem. Mohol by mi to prosim niekto vysvetlit?


Offline

Užívateľ
Užívateľ
makro feof a cyklus

Registrovaný: 01.10.06
Prihlásený: 19.02.24
Príspevky: 6562
Témy: 15
Bydlisko: Bratislava
Príspevok NapísalOffline : 25.06.2015 18:58

Ked tam mas OR tak while to pojde dovtedy dokym je aspon jedna z podmienok splnena to znamena ze cyklus fici ak oba subory sa == 0, aspon prvy zo suborov sa == 0, aspon druhy zo suborov sa == 0. Cyklus sa ukonci az vtedy ked sa dosiahol koniec v oboch suboroch.
Ked tam das AND tak while pojde len do vtedy kym oba subory nie su docitane cize oba sa == 0. Akonahle aspon jeden dosiahne koniec cyklus konci.







_________________
PC: Intel Q6600@3,33GHz, MSI GTX 670 OC (TwinFrozr IV), DDR2 1066 A-data 8Gb, Seagate Barracuda 7200.12 2000GB, Kingston 240GB SSD, Gigabyte EP35-DS4, MSI OPTIX G273QF , Logitech G502 Proteus Spectrum
Notebook: Sony VAIO CW Series (VPC-CW1S1E/B) / LENOVO Legion 5 Pro 16ACH6H Stingray White || Mobil: Samsung Galaxy S21 FE || Auto: Audi S5 Sportback
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 19:05

Tak ja som nauceny tak ze : 0 0 = 0
1 0 = 1
0 1 = 1
1 1 = 1
kde =1 znamena ze opusta cyklus v cecku to funguje teda opacne?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 20:41

Zdravím,

teraz ti ten while funguje týmto spôsobom:

napr. v 1. subore sú 2 znaky, v 2. subore sú 3 znaky

vezmem prvý znak a skontrolujem prvú podmienku je splnená pokračujem (druha podmienka ma nezaújma)
vezmem druhý znak a skontrolujem prvú podmienku je splnená pokračujem (druha podmienka ma nezaújma)
vezmem tretí znak a skontrolujem prvú podmienku nieje splnená tak skontrolujem druhú podmienku tá je splnená
chcem zobrat štvrý znak a skontrolujem prvú podmienku nieje splnená tak skontrolujem druhú podmienku tá tiež nieje splnená koniec

posledná vec pri práci so súbormi NEZABUDAJ ICH ZATVORIT!!!!!!!!


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 20:51

A preco ho ta druha podmienka nezaujima ? v cecku teda ked vysledok sa rovna 0 tak opusta cyklus a 1 ked neopusta?

K tomu makru feof neviete nic nasiel som nieco taketo ale nepochopil som to http://www.gidnetwork.com/b-58.html


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 20:57

Ked mas OR:

1 cast podmienky || 2 cast podmienky

pri OR staci ze je splnena prva cast podmienky druhu nepotrebujes kontrolovat.

while(1) cyklus bezi

takze ak je splnena prva cast

while (1 || 0) = while (1) podla tych podmienok co si si napisal tak to plati


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 21:04

NO okej takze si to teda zapametam 0 opusta, 1 zostava v cykle dakujem ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 21:06

V C som už dlho nerobil ale pozri si feof tu

http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1046476070&id=1043284351


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 21:10

Len tak pre zaujimavost, v akom jazyku je to naopak?
A btw koniec suboru mozes kontrolovat aj s getc rovno ;)


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 21:18

Vies co ani sam neviem som mal nejako zafixovane v hlave ze to je takto ale zda sa mi ze v pascale to je naopak

myslis ako ked getc == EOF?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 22:24

Ano, alebo nerovna.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 22:41

No tak dal som to cez to EOF a vyhadzuje vacsi pocet znakov jak ma :
Kód:
while ((a = getc(fr1)) != EOF  ||  (b = getc(fr2) != EOF)){
    if(a != b){
        z++;
    }


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 22:54

a, b su akeho typu ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 22:56

integer


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 23:13

V cecku sa OR vyhodnocuje tak, ze ak je hned prvy vyraz true, druhy uz ani nepocita. Takze v jednom subore sa zacne pocuvat az ked je prvy vyraz false.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 23:20

Možes poslať vstup aj vysup?

ten while by mal byt takto ozatvorkovany:

Kód:
while (((a = getc(fr1)) != EOF)  ||  ((b = getc(fr2)) != EOF)){
    if(a != b){
        z++;
    }


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 23:21

cize najprv spocita znaky v prvom potom v druhom subore spolu je to 37 v mojom pripade a to vypise. cize z getc to nebude fungovat len s feof?

// Spojený príspevok Štv 25.06.15 23:24

Kód:
#include <stdio.h>

main()
{
FILE *fr1, *fr2;
int a, b, z;

z = 0;
fr1 = fopen("pismena1.txt", "r");
fr2 = fopen("pismena2.txt", "r");

while (((a = getc(fr1)) != EOF)  ||  ((b = getc(fr2) != EOF))){
    if(a != b){
        z++;
    }
}
if (z == 0)
    printf("subory su naprosto zhodne");
else
    printf("subory sa nezhoduju v %d znakoch", z);

    return 0;
}


vystup je: subory sa nezhoduju v 37 znakoch


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 23:24

No ono celkovo musis domysliet, co sa stane ak niesu rovnakej dlzky. Ci sa odignoruje ten ostatok alebo to budes osetrovat. Da sa to spravit oboma sposobmi.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 23:29

No osetrim to volako alebo tam necham fakt to feof


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 23:35

Kludne to pouzi ale aj tak to neriesi ten povodny problem a je to nebezpecne. getc() vrati EOF aj ked nastane chyba v citani, feof() iba na konci suboru.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 23:38

Ak feof funguje tak ako si pisal v prvom prispevku tak skus toto

Kód:
while (feof(fr1) =! 1  &&  feof(fr2) =! 1){
        if(getc(fr1) != getc(fr2)){
              z++;
        }
}

fclose (fr1);
fclose (fr2);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 26.06.15
Príspevky: 14
Témy: 4
Príspevok Napísal autor témyOffline : 25.06.2015 23:40

zasa ked pouzijem EOF v binarnom subore mozes skoncit citanie skorej ked sa nieco bude rovnat 255


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.08.13
Prihlásený: 13.02.16
Príspevky: 24
Témy: 6
Bydlisko: Svidnik
Príspevok NapísalOffline : 25.06.2015 23:41

sorry toto je blbost

Spown3 píše:
Ak feof funguje tak ako si pisal v prvom prispevku tak skus toto

Kód:
while (feof(fr1) =! 1  &&  feof(fr2) =! 1){
        if(getc(fr1) != getc(fr2)){
              z++;
        }
}

fclose (fr1);
fclose (fr2);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.08.11
Prihlásený: 14.12.23
Príspevky: 2361
Témy: 11
Príspevok NapísalOffline : 25.06.2015 23:43

Kód:
while(!feof(fr1) && !feof(fr2))

V Ccku je true vsetko okrem 0, takze ak to porovnas s 1 nemusi to byt spravne.
A EOF je -1 a kedze getc vracia integer, ktory nema urcite len 1 byte tak to absolutne nevadi.


Odpovedať na tému [ Príspevkov: 24 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. makro

v Assembler, C, C++, Pascal, Java

2

336

30.05.2012 11:17

ewil Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. excel makro

v Ostatné programy

0

516

15.02.2011 16:22

kyjak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Excel, vyhladavacie makro

v Delphi, Visual Basic

2

884

10.06.2014 21:26

bartimeus Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Makro-excel-VisualBasic

v Delphi, Visual Basic

2

3447

11.01.2006 13:47

zeman Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Makro-odstranenie diakritiky v excely

v Ostatné programy

4

1012

24.01.2012 15:13

kati123 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nekonečný cyklus

v JavaScript, VBScript, Ajax

8

611

04.09.2011 9:49

camo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. VB - cyklus

v Delphi, Visual Basic

3

735

21.05.2009 11:19

Patkoo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. diagram cyklus

v Ostatné

2

370

13.06.2018 17:14

void Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [pascal] nekonecny cyklus

v Assembler, C, C++, Pascal, Java

3

596

02.04.2010 13:24

vama Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. C cyklus for

v Assembler, C, C++, Pascal, Java

10

830

26.11.2011 13:57

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PHP cyklus for

v PHP, ASP

8

530

20.11.2010 16:13

venom2 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. JAVA, FOREACH CYKLUS

v Assembler, C, C++, Pascal, Java

2

598

25.08.2017 8:20

mitko Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. nekonečný cyklus v jave

v Assembler, C, C++, Pascal, Java

2

850

01.01.2010 16:58

jarrro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. EXCEL - cyklus na combobox

v Ostatné programy

1

1046

28.07.2009 17:10

PaloPa Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Cyklus v dopyte na databazu

v PHP, ASP

5

369

08.10.2010 17:37

shaggy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Excel - VBA - ako riesit cyklus?

v Ostatné

3

708

17.05.2018 16:11

Winnetou Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  
cron

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra