<!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>