<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=utf-8" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18975">
<STYLE></STYLE>
</HEAD>
<BODY>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>"Vilius Jakas" <</FONT><A
href="mailto:vilius@anet.lt"><FONT size=2
face=Arial>vilius@anet.lt</FONT></A><FONT size=2 face=Arial>> wrote in
message </FONT><A href="news:icltku$o8r$1@trimpas.omnitel.net"><FONT size=2
face=Arial>news:icltku$o8r$1@trimpas.omnitel.net</FONT></A><FONT size=2
face=Arial>...</FONT></DIV>
<DIV><FONT size=1 face=Arial><EM>> On 11/25/2010 04:55 PM, Jornada Del Muerto
wrote:<BR>>> O cia kokia C ? gal dosine kokia ir islendi per segmento dydi
ar kazkas tokio...<BR>>><BR>>><BR>>> "Vilius
Jakas"<</EM></FONT><A href="mailto:vilius@anet.lt"><FONT size=1
face=Arial><EM>vilius@anet.lt</EM></FONT></A><FONT size=1
face=Arial><EM>> wrote in message </EM></FONT><A
href="news:iclt82$nju$1@trimpas.omnitel.net"><FONT size=1
face=Arial><EM>news:iclt82$nju$1@trimpas.omnitel.net</EM></FONT></A><FONT size=1
face=Arial><EM>...<BR>>>> Sveiki. Band=iau spresti IT olimpiados
uzdavinius ir su tam tikrais<BR>>>> testais gaunu arba blogą atsakymą
arba segmentation fault<BR>>>><BR>>>> Štai
kodas<BR>>>><BR>>>>
#include<stdio.h><BR>>>><BR>>>> int
main(){<BR>>>><BR>>>> int
Pi[100],Ti[100], N,
S,i,sum=0,max=0;<BR>>>> FILE *in,
*out;<BR>>>>
in=fopen("keliautojas-vyr.in","r");<BR>>>>
out=fopen("keliautojas-vyr.out","w");<BR>>>><BR>>>><BR>>>>
//Nuskaitymas<BR>>>> fscanf(in,"%d %d",&N,&S);<BR>>>>
for(i=0;i<N;i++)<BR>>>> fscanf(in,"%d
%d",&Pi[i],&Ti[i]);<BR>>>>
for(i=0;i<N;i++)<BR>>>> printf("%d
%d\n",Pi[i],Ti[i]);<BR>>>> //zaidziam<BR>>>> S=S-1; //nes
masyve skaiciai pradedami nuliu<BR>>>><BR>>>>
for(i=0;i<N;i++){<BR>>>> sum=sum+(Pi[S]); //prideda
pinigus<BR>>>> if(sum>max)max=sum;<BR>>>> Pi[S]=0;
//panaikina laukelio reiksme<BR>>>> S=Ti[S]; //sekantis
laukelis<BR>>>> }<BR>>>><BR>>>>
//fprintf(out,"%d\n",sum);<BR>>>><BR>>>> printf("suma %d
\n",sum);<BR>>>>
//for(i=0;i<N;i++)<BR>>>> // printf("%d
%d\n",Pi[i],Ti[i]);<BR>>>><BR>>>> getchar();<BR>>>>
getchar();<BR>>>> return
0;<BR>>>> }<BR>>>><BR>>>> O štai čia
keliautojas-vyr.in su kuriuo gaunu seg fault<BR>>>><BR>>>> 5
3<BR>>>> 2 5<BR>>>> 1 1<BR>>>> -7 5<BR>>>>
-4 2<BR>>>> 2 4<BR>>>><BR>> Taip, dosinė(iš terminalo
leidžiu) Supratau klaidą<BR>> >>
for(i=0;i<N;i++){<BR>> >> sum=sum+(Pi[S]); //prideda
pinigus<BR>> >> if(sum>max)max=sum;<BR>> >>
Pi[S]=0; //panaikina laukelio reiksme<BR>> >> S=Ti[S]; //sekantis
laukelis<BR>> o turėtu būti<BR>> >>
for(i=0;i<N;i++){<BR>> >> sum=sum+(Pi[S-1]); //prideda
pinigus<BR>> >> if(sum>max)max=sum;<BR>> >>
Pi[S-1]=0; //panaikina laukelio reiksme<BR>> >> S=Ti[S-1];
//sekantis laukelis<BR>> <BR>> dėl tos pačios masyvo numeravimo
savybės</EM></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>Siaip del kodo stiliaus tureciau kelis
komentarus:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial><STRONG>1. Hardcodinimas teksto i
koda:</STRONG></FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2
face=Arial>in=fopen("keliautojas-vyr.in","r");<BR>out=fopen("keliautojas-vyr.out","w");</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>Geriau yra kurtis konstantas, kurios butu vienoje
vietoje, o dar geriau 1 faile, o ne rasyti hardcodintas reiksmes i
koda:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>sukuri koki: defauts.c</FONT></DIV>
<DIV><FONT size=2 face=Arial>ir surasai:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>/**</FONT></DIV>
<DIV><FONT size=2 face=Arial> * Failai</FONT></DIV>
<DIV><FONT size=2 face=Arial> */</FONT></DIV>
<DIV><FONT size=2 face=Arial>#define
MY_IN_FILE "keliautojas-vyr.in"
// Ieinantis failas</FONT></DIV>
<DIV><FONT size=2 face=Arial>#define MY_OUT_FILE
"keliautojas-vyr.out" // Iseinantis failas</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>/**</FONT></DIV>
<DIV><FONT size=2 face=Arial> * Kazkas kita</FONT></DIV>
<DIV><FONT size=2 face=Arial> */<BR>#define
MY_KAZKOKI_KITI_NUSTATYMAI 10</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial> Ir taip viska graziai su
komentarais, tada ka turesi tai kad kode nereikes ieskoti kur ka pakeisti
panorejus nes viska turesi 1 vietoje ir siaip programuojant blasko demesi
kazkoks pasalinis tekstas kuris ner programos dalis o duomenys.</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial><STRONG>2. Rasineti salygas ir ciklus be lauztiniu
skliaustu gal ir kruta, bet daro prasciau skaitoma koda</STRONG>,
pvz.:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT color=#ff0000 size=2 face=Arial>>>>
//Nuskaitymas<BR>>>> fscanf(in,"%d %d",&N,&S);<BR>>>>
for(i=0;i<N;i++)<BR>>>> fscanf(in,"%d
%d",&Pi[i],&Ti[i]);<BR>>>>
for(i=0;i<N;i++)<BR>>>> printf("%d
%d\n",Pi[i],Ti[i]);<BR>>>> //zaidziam<BR>>>> S=S-1; //nes
masyve skaiciai pradedami nuliu<BR></FONT></DIV>
<DIV><FONT size=2 face=Arial>Cia jau tenka siek tiek laiko pamastyt kas
parasyta, 1 dalykas viena funkcija sulipdyta su kita, ta prasme tik 1
komentaras, kas bus aisku ka tai daro pirma menesi bet ne po metu laiko, 2
norint plesti funkcionaluma vistiek teks dadelioti skliaustus, tai daug graziau
ir suprantamiau atrodytu taip:</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT color=#008000 size=2 face=Arial>// Darbas su nuskaitomu
failu</FONT></DIV>
<DIV><FONT color=#008000 size=2 face=Arial>// Skaitoma informacija</FONT></DIV>
<DIV><FONT size=2 face=Arial>fscanf(in,"%d %d",&N,&S);</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial><FONT color=#008000>// Atliekamas toks anoks
ciklas<BR></FONT>for(i=0;i<N;i++) {<BR> fscanf(in,"%d
%d",&Pi[i],&Ti[i]);</FONT></DIV>
<DIV><FONT size=2 face=Arial>}</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial><FONT color=#008000>// Atliekamas ciklas b - daro
ta ana<BR></FONT>for(i=0;i<N;i++) {<BR> printf("%d
%d\n",Pi[i],Ti[i]);</FONT></DIV>
<DIV><FONT size=2 face=Arial>}</FONT></DIV>
<DIV><BR><FONT size=2 face=Arial><FONT color=#008000>//
zaidziam<BR></FONT>S=S-1; //nes masyve skaiciai pradedami nuliu<BR></FONT></DIV>
<DIV><FONT size=2 face=Arial> Nes kai viska sumala zmones i
kuva poto ir kyla klausimai kodel kazkas neveikia, nes paciam baisu ziureti i
savo kurini ir sunku jame ka nors suprasti, gal cia ir kodas olimpiadai bet kaip
iprasi rasyti taip rasysi visada, del to geriau pradzioj pakenteti pasistengti o
su laiku taip iprasi ir negalesi kitaip, tada kolegos uz nugaros taves nekeiks
kad nenori tavo kodo taisinet nes jame velnias galva nusisuktu ;)</FONT></DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>JDM.</FONT></DIV></BODY></HTML>