Listing du fichier index.php
00001 <?php
00002 # # (gH) -_- index.php ; TimeStamp (unix) : 07 Juin 2018 vers 11:48
00003 error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00004 include("../../std7.php") ;
00005 include("../../statuno7.php") ;
00006
00007 ###########################################################################################
00008
00009 # redirection éventuelle de www.info vers forge.info (à cause de montersource.php)
00010
00011 $host = getenv("HTTP_HOST") ; #echo " HOST : $host " ;
00012
00013 if ($host=="www.info.univ-angers.fr") {
00014
00015 $titre = "gh Warm-up session in R" ;
00016 $temps = 0 ;
00017 $newUrl = "http://forge.info.univ-angers.fr/~gh/wstat/R-warmup/" ;
00018
00019 debutPageRedir($titre,$temps,$newUrl) ;
00020
00021 } ; # fin si
00022
00023 ###########################################################################################
00024
00025 $R = s_span("R","grouge") ;
00026 $Python = s_span("Python","gvertf") ;
00027 debutPage("R warm up session","strict") ;
00028 debutSection() ;
00029
00030 h1("$R warm up session for the Bioinformatics Summer School","strict") ;
00031
00032 p() ;
00033 nbsp(7) ;
00034 echo s_span(" gilles.hunault@univ-angers.fr","gvert plusgros") ;
00035 finp() ;
00036
00037 div("cadre") ;
00038 blockquote() ;
00039
00040 p() ;
00041 echo " Remember that with " ;
00042 echo href("https://www.rdocumentation.org/trends","more than 2 millions of functions") ;
00043 echo " distributed as " ;
00044 echo href("https://cran.r-project.org/web/packages/index.html","packages") ;
00045 echo " grouped in " ;
00046 echo href("https://cran.r-project.org/web/views","task views") ;
00047 echo " $R is a fantastic tool... but not the only one." ;
00048 finp() ;
00049
00050 p() ;
00051 echo "There is even a site dedicated to $R and bioinformatics called " ;
00052 echo href("https://www.bioconductor.org","Bioconductor")."." ;
00053 finp() ;
00054
00055 p() ;
00056 echo "Official documentation (many languages) is " ;
00057 echo href("https://cran.r-project.org/other-docs.html",b("here"),"gnoir")."." ;
00058 finp() ;
00059
00060 finblockquote() ;
00061 findiv() ;
00062
00063 ######################################################################################################
00064
00065 blockquote() ;
00066 table(0,30,"collapse") ;
00067 tr() ;
00068 td("C") ;
00069 p() ;
00070 $img = "../Programmation_R/Programmation_introduction/rlogo.png" ; echo img($img,"",100) ;
00071 finp() ;
00072 pvide() ;
00073 p() ;
00074 $img = "../Programmation_R/Programmation_introduction/rstudio.jpg" ; echo img($img,"",80) ;
00075 finp() ;
00076 pvide() ;
00077 p() ;
00078 $img = "../R15/bioconductor.png" ; echo img($img,"",100) ;
00079 finp() ;
00080 fintd() ;
00081 td() ;
00082 h2(b("Very very short lectures"),"bleu") ;
00083
00084 blockquote() ;
00085
00086 h3("About $R and bioinformatics") ;
00087
00088 ul() ;
00089 debutli() ; p() ;
00090 echo href("../R15/indexen.php","in English") ;
00091 finp() ; finli() ;
00092 debutli() ; p() ;
00093 echo href("../R15/index.php","in French") ;
00094 finp() ; finli() ;
00095 finul() ;
00096
00097 h3("About $R and [bio]statistics") ;
00098
00099 ul() ;
00100 debutli() ; p() ;
00101 echo href("../R15/r5en.php","in English") ;
00102 finp() ; finli() ;
00103 debutli() ; p() ;
00104 echo href("../R15/r5.php","in French") ;
00105 finp() ; finli() ;
00106 finul() ;
00107
00108 finblockquote() ;
00109 fintd() ;
00110 fintr() ;
00111 fintable() ;
00112 finblockquote() ;
00113
00114 ######################################################################################################
00115
00116 pvide() ;
00117 p() ;
00118 echo " You can follow ".href("http://publicifsv.sund.ku.dk/~jufo/courses/exp2019/R-notes-nup.pdf","this link") ;
00119 echo " to have a short reference card for R and Rstudio. " ;
00120 echo " A local copy is ".href("R-notes.pdf","here")."." ;
00121 finp() ;
00122
00123
00124 pvide() ;
00125
00126 h2("Choose the section that suits you best:") ;
00127
00128 $tableauDesRubriques = array() ;
00129 $idr = 0 ;
00130 $idr++; $tableauDesRubriques[$idr] = "I don't know $R" ;
00131 $idr++; $tableauDesRubriques[$idr] = "I think I know $R for statistics and bioinformatics" ;
00132 $idr++; $tableauDesRubriques[$idr] = "I think I know how to program in $R" ;
00133 $idr++; $tableauDesRubriques[$idr] = "I know $Python better than $R" ;
00134 $tdmCRLM = new tdm($tableauDesRubriques) ;
00135 $tdmCRLM->menu("oui","oui","nou") ;
00136 pvide() ;
00137
00138 ######################################################################################################
00139
00140 ## -------------------------------------------------------------------------------------------
00141
00142 $tdmCRLM->afficheRubrique("oui") ; #
00143
00144 ## -------------------------------------------------------------------------------------------
00145
00146 blockquote() ;
00147
00148 p("texte") ;
00149 echo " OK, you need a gentle introduction to $R. " ;
00150 echo " So ".b("practice")." is the best solution. Read the " ;
00151 echo " following document " ;
00152 echo href("r-intro.pdf","r-intro") ;
00153 echo " based on Frédéric PROIA's warm up document " ;
00154 echo " and type the code in ".href("https://www.rstudio.com","Rstudio","gvert")." to see what $R answers. " ;
00155 finp() ;
00156
00157 p("texte") ;
00158 echo " You can load the file ".href("warmup.r")." with all its $R code if you don't want to type the code -- " ;
00159 echo " but usually to write things helps to remember them. " ;
00160 echo " You can also cut and paste the following lines, each instruction at a time:" ;
00161 finp() ;
00162
00163 p() ;
00164 textarea_fichier("intro","cadrebleu",20,120,"intro","warmup.r") ;
00165 finp() ;
00166
00167 $numExo = 0 ;
00168
00169 p("texte") ;
00170 echo " Then try to solve these exercises:" ;
00171 finp() ;
00172
00173 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00174 blockquote() ;
00175 p("texte") ;
00176 echo " Use the ".b("iris")." dataset. Compute the mean of the fourth column. " ;
00177 echo " Why is the ".b("summary")." function a ".em("«good but limited function»")."?" ;
00178 finp() ;
00179 p("texte") ;
00180 echo " Compute now the median of the fourth column. " ;
00181 echo " Does $R help you to decide how to choose between the mean and the median (or another computation) as the best descriptor of the values?" ;
00182 echo " Does $R show the unit of the petals' width?" ;
00183 finp() ;
00184 finblockquote() ;
00185
00186 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00187 blockquote() ;
00188 p("texte") ;
00189 echo " Read the ".href("http://forge.info.univ-angers.fr/~gh/Datasets/elf.dar","elf.dar")." data file " ;
00190 echo " using the explanations given at the end of the page ".href("http://forge.info.univ-angers.fr/~gh/Datasets/elf.htm","elf.htm").". " ;
00191 echo " Convert the ".b("SEXE")." column of the dataframe into a factor: 0=male and 1=female. " ;
00192 echo " Use the ".b("table")." and ".b("prop.table")." functions to compute absolute and relative counts. How to sort them in decreasing order?" ;
00193 finp() ;
00194 finblockquote() ;
00195
00196 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00197 blockquote() ;
00198 p("texte") ;
00199 echo "Compute the ".b("GC content")." of gene ".b("X94991.1").". Use all nice bioinformatics functions of $R to do it with a minimum of instructions." ;
00200 finp() ;
00201 p("texte") ;
00202 echo em(" Hint:")." use the $R code from ".href("../R15/indexen.php","R15")." and install the ".b("ape")." package. " ;
00203 finp() ;
00204 finblockquote() ;
00205
00206 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00207 blockquote() ;
00208 p("texte") ;
00209 echo " Use again the ".b("elf")." data. " ;
00210 echo " Compare the age of women and men with the help of the ".b("t.test")." function. Comment the output. " ;
00211 finp() ;
00212 p("texte") ;
00213 echo " Does $R check that the assumptions of the test are fullfilled?" ;
00214 finp() ;
00215 finblockquote() ;
00216
00217 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00218 blockquote() ;
00219 p("texte") ;
00220 echo "What is the purpose of the ".b("msaR")." and ".b("AlignStat")." packages?" ;
00221 finp() ;
00222 finblockquote() ;
00223
00224 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00225 blockquote() ;
00226 p("texte") ;
00227 echo "Explain in which cases it is better to use ".b("beanplots")." than boxplots. Use $R to show it." ;
00228 echo " You have to install the ".b("beanplot")." package. " ;
00229 finp() ;
00230 finblockquote() ;
00231
00232 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00233 blockquote() ;
00234 p("texte") ;
00235 echo " Install and then load the ".b("rms")." package. Why does the installation take so long?" ;
00236 echo " Which datasets are included?" ;
00237 finp() ;
00238 p("texte") ;
00239 echo " This package is associated to a Springer book. What is its name?" ;
00240 finp() ;
00241 p("texte") ;
00242 finp() ;
00243 finblockquote() ;
00244
00245 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00246 blockquote() ;
00247 p("texte") ;
00248 echo " Install and then load the ".b("faraway")." package. " ;
00249 echo " Which datasets are included?" ;
00250 finp() ;
00251 p("texte") ;
00252 echo " This package is associated to a CRC book. What is its name?" ;
00253 finp() ;
00254 p("texte") ;
00255 echo " How do you remove all lines with NA values with $R in the ".b("diabetes")." dataset of this package?" ;
00256 echo " Is it a good idea to do so?" ;
00257 finp() ;
00258 finblockquote() ;
00259
00260
00261 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00262 blockquote() ;
00263 p("texte") ;
00264 echo " Load the ".b("survival")." package. " ;
00265 echo " Check that you don't need to install it. Why?" ;
00266 echo " Is there also a book associated to this package?" ;
00267 finp() ;
00268 p("texte") ;
00269 echo " Try to find the class and the dimensions of two of its dataset, named ".b("kidney") ;
00270 echo " and ".b("leukemia").". " ;
00271 finp() ;
00272 p("texte") ;
00273 echo "How can you find the class and the dimensions of all the datasets of this package?" ;
00274 finp() ;
00275 finblockquote() ;
00276
00277 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00278 blockquote() ;
00279 p("texte") ;
00280 echo "Why should you avoid ".b("for loops")." as much as possible in $R if you are dealing with columns or lines of data frames?" ;
00281 finp() ;
00282 finblockquote() ;
00283
00284 finblockquote() ; # de section
00285
00286 ## -------------------------------------------------------------------------------------------
00287
00288 $tdmCRLM->afficheRubrique("oui") ; #
00289
00290 ## -------------------------------------------------------------------------------------------
00291
00292 blockquote() ;
00293
00294 p("texte") ;
00295 echo " There are some good and some bad practices in $R to compute statistics and produce bioinformatics results. " ;
00296 echo " Check how you do things with these exercises." ;
00297 finp() ;
00298 p("texte") ;
00299 echo "No programming is needed here." ;
00300 echo " Use ".href("https://www.rstudio.com","Rstudio","gvert")." to edit and run your code. " ;
00301 finp() ;
00302
00303 $numExo = 0 ;
00304
00305 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00306 blockquote() ;
00307 p("texte") ;
00308 echo " Use the ".b("iris")." dataset. Compute the means of the four first columns with a single instruction. " ;
00309 finp() ;
00310 p("texte") ;
00311 echo " Can you apply the ".b("summary")." function on the first column for each species with a single instruction?" ;
00312 finp() ;
00313 finblockquote() ;
00314
00315 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00316 blockquote() ;
00317 p("texte") ;
00318 echo " Use the ".b("cars")." dataset. " ;
00319 echo " Write a single instruction to have the ".b("row names")." showing ".b("Car001 Car002...") ;
00320 echo " No loop accepted." ;
00321 finp() ;
00322 finblockquote() ;
00323
00324 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00325 blockquote() ;
00326 p("texte") ;
00327 echo " What is the shortest way to see the columns' name and their index, such as in this example:" ;
00328 finp() ;
00329 pre_fichier("iris.sor","cadre") ;
00330 p("texte") ;
00331 echo " You may use the ".b("iris")." dataset. Remember: neither programming nor for loop here." ;
00332 finp() ;
00333 finblockquote() ;
00334
00335 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00336 blockquote() ;
00337 p("texte") ;
00338 echo " Read the ".b("diabetes")." dataset at the address ".href("http://forge.info.univ-angers.fr/~gh/wstat/Eda/diabetes.dar").". " ;
00339 finp() ;
00340 p("texte") ;
00341 echo " Beware that the first line is the name of the columns and that the first column gives the names of the lines." ;
00342 finp() ;
00343 p("texte") ;
00344 echo " Remove all the lines with ".b("NA")." for the ".b("bp.1s")." variable. Which column has then the maximum of NA values?" ;
00345 finp() ;
00346 p("texte") ;
00347 echo em(" Hint:")." use ".b("apply")." and an anonymous function." ;
00348 finp() ;
00349 finblockquote() ;
00350
00351 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00352 blockquote() ;
00353 p("texte") ;
00354 echo " Use again the ".b("diabetes")." dataset. Compute and add to this dataset with a single instruction the categorical variable ".b("ageCL") ;
00355 echo " based on the rule ".b("'young'")." if age<18, ".b("'old'")." otherwise. " ;
00356 finp() ;
00357 p("texte") ;
00358 echo "When you modify a data frame, what are the differences between the ".b("transform")." and ".b("mutate")." functions?" ;
00359 finp() ;
00360 finblockquote() ;
00361
00362 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00363 blockquote() ;
00364 p("texte") ;
00365 echo " What is the most efficient way to compute and display the maximal value and the number of times it occurs in a vector with many many values?" ;
00366 echo " How can you prove it?" ;
00367 finp() ;
00368 finblockquote() ;
00369
00370 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00371 blockquote() ;
00372 p("texte") ;
00373 echo " Describe an ordinal variable with counts, percentages and cumulated frequencies without any for loop " ;
00374 echo " like the following table." ; # for the ??? variable in the ??? dataset." ;
00375 #echo " As usual, no loops. Don't forget the NA values." ;
00376 echo " Don't forget the NA values." ;
00377 finp() ;
00378 pre_fichier("decritordinal.sor","cadrebleu") ;
00379 finblockquote() ;
00380
00381 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00382 blockquote() ;
00383 p("texte") ;
00384 echo " Build a graphical description of a continuous variable with the curve for the estimation of the density and the normal candidate " ;
00385 echo " curve like the one below." ; # , using the ??? variable in the ??? dataset." ;
00386 finp() ;
00387 p() ;
00388 $img = "decritqt.png" ;
00389 nbsp(7) ;
00390 echo href($img,img($img,"",400)) ;
00391 finp() ;
00392 p("texte") ;
00393 echo " Make a function of your instructions. Which parameters are needed?" ;
00394 finp() ;
00395 finblockquote() ;
00396
00397 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00398 blockquote() ;
00399 p("texte") ;
00400 echo "What are the pros and cons of the ".b("ggplot2")." and ".b("lattice")." packages compared to classical plots in $R?" ;
00401 finp() ;
00402 finblockquote() ;
00403
00404 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00405 blockquote() ;
00406 p("texte") ;
00407 echo " Are you able to use ".b("Shiny")." and a ".b("Jupyter $R notebook")." to have a small app in $R?" ;
00408 echo " Prove it." ;
00409 finp() ; http://biostat.mc.vanderbilt.edu/tmp/course.pdf
00410 finblockquote() ;
00411
00412 finblockquote() ; # de section
00413
00414 ## -------------------------------------------------------------------------------------------
00415
00416 $tdmCRLM->afficheRubrique("oui") ; #
00417
00418 ## -------------------------------------------------------------------------------------------
00419
00420 blockquote() ;
00421
00422 p("texte") ;
00423 echo " Let's check it. " ;
00424 echo " Use ".href("https://www.rstudio.com","Rstudio","gvert")." to edit, run, debug and profile (you said you were a programmer, right?) your code. " ;
00425 finp() ;
00426 $numExo = 0 ;
00427
00428 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00429 blockquote() ;
00430 p("texte") ;
00431 echo " Use the ".b("iris")." dataset. " ;
00432 echo " Apply the ".b("summary")." function for all numeric columns for each species with a single instruction. " ;
00433 finp() ;
00434 p("texte") ;
00435 echo em(" Hint:")." use an anonymous function for ".b("tapply")."." ;
00436 finp() ;
00437 finblockquote() ;
00438
00439 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00440 blockquote() ;
00441 p("texte") ;
00442 echo " Create a ".b("cats")." function that underlines a string with a given character, use \"=\" as default." ;
00443 finp() ;
00444 p("texte") ;
00445 echo " Example:" ;
00446 finp() ;
00447 pre_fichier("cats.sor","cadre") ;
00448 finblockquote() ;
00449
00450 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00451 blockquote() ;
00452 p("texte") ;
00453 echo " Create a ".b("timer")." function that prints the date and time before and after executing " ;
00454 echo " some code and that computes the duration of the execution." ;
00455 finp() ;
00456 pre_fichier("timer.sor","cadre") ;
00457 p("texte") ;
00458 echo em(" Hint:")." use the ellipsis for the parameter of the function." ;
00459 finp() ;
00460 finblockquote() ;
00461
00462 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00463 blockquote() ;
00464 p("texte") ;
00465 echo " Create a function ".b("extractPvalue")." that extracts the p-value of a t-test. For example : " ;
00466 finp() ;
00467 pre_fichier("pvalue1.sor","cadre") ;
00468 p("texte") ;
00469 echo " Create a function ".b("extractPvalues")." that produces a table of all t-tests for the columns of a data frame, using the name of the factor as a parameter. ";
00470 echo " For example: " ;
00471 finp() ;
00472 pre_fichier("pvalue2.sor","cadre") ;
00473 p("texte") ;
00474 echo " The iris2 data frame corresponds to the iris dataset without the \"setosa\" flowers. " ;
00475 echo " Define it with a single instruction." ;
00476 finp() ;
00477 p("texte") ;
00478 echo em(" Hint:")." in ".b("extractPvalues")." use ".b("apply")." with an anonymous function that calls the ".b("extractPvalue")." function from previous exercise." ;
00479 finp() ;
00480 finblockquote() ;
00481
00482 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00483 blockquote() ;
00484 p("texte") ;
00485 echo " Define a function that uses a quantitative variable and two factors and displays the boxplots side by side " ;
00486 echo " as in the example of the tooth growth for the guinea pigs found in ".b('example("boxplot")').". " ;
00487 echo " Don't forget the legend." ;
00488 finp() ;
00489 finblockquote() ;
00490
00491 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00492 blockquote() ;
00493 p("texte") ;
00494 echo " The chi-square test function computes only the value of the test statistic but doesn't show where the main differences between the theoretical " ;
00495 echo " and the observed values are. Define a function that details the contribution (theo-obs)²/theo for each level and that sorts them by relative importance. " ;
00496 echo " As usual, no loops. " ;
00497 echo " Here is an example:" ;
00498 finp() ;
00499 pre_fichier("chisq.sor","cadre") ;
00500 finblockquote() ;
00501
00502 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00503 blockquote() ;
00504 p("texte") ;
00505 echo " Define a function that displays all the subsets of a given set. For example for ".b('givenSet <- c("a","b","c")') ;
00506 echo " it must display something like:" ;
00507 finp() ;
00508 pre_fichier("subsets.sor","cadre") ;
00509 p("texte") ;
00510 echo " The subsets must be numbered and produced with an increasing number of elements (variant: decreasing) and displayed " ;
00511 echo " in alphabetic order. " ;
00512 finp() ;
00513 p("texte") ;
00514 echo " Which part of the biostatistics or bioinformatics may need these subsets?" ;
00515 echo " Try to produce both iterative and recursive solutions." ;
00516 finp() ;
00517 finblockquote() ;
00518
00519 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00520 blockquote() ;
00521 p("texte") ;
00522 echo " Run the ".b('library("gdata")')." instruction and check that it displays some information. " ;
00523 echo " Define a function ".b(".library")." (yes, with a dot at the beginning) that " ;
00524 echo " loads silently the libray, that is that supresses the warning outputs." ;
00525 echo " What is the use of the dot at the beginning of the function's name?" ;
00526 finp() ;
00527 finblockquote() ;
00528
00529 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00530 blockquote() ;
00531 p("texte") ;
00532 echo " Write a function that finds the longest common subsequence of n (greater than two) aminoacid sequences. " ;
00533 echo " Beware that this is not the same problem as finding the longest common substring. " ;
00534 echo " Describe first the method and its complexity using ".em("O(n)")." notation. " ;
00535 echo " Is it possible to use it for DNA sequences which may be very very long?" ;
00536 echo " Prove that it is ".ghvert("fast")." by profiling your code." ;
00537 finp() ;
00538 finblockquote() ;
00539
00540 $numExo++ ; h3("Exercise $numExo","gbleu") ;
00541 blockquote() ;
00542 p("texte") ;
00543 echo " Build a small example for a class of statistical objets (continuous, factor...) with basic methods (size, describe, plot... ) " ;
00544 echo " using R4, R5 and R6 formalism in order to explain the pros and cons of these three object oriented mecanisms in $R." ;
00545 finp() ;
00546 p("texte") ;
00547 echo "Why must every $R programmer decide to learn ".b("tidyverse")." or not?" ;
00548 finp() ;
00549
00550 p("texte") ;
00551 echo " What is the best $R package to run \"".b("serious")."\" tests (unit tests, integration tests...) in $R?" ;
00552 finp() ;
00553 finblockquote() ;
00554
00555 finblockquote() ; # section
00556
00557 ## -------------------------------------------------------------------------------------------
00558
00559 $tdmCRLM->afficheRubrique("oui") ; #
00560
00561 ## -------------------------------------------------------------------------------------------
00562
00563 blockquote() ;
00564
00565 p("texte") ;
00566 echo "Great. So use $Python to solve the exercises " ;
00567 echo " from section 2 (".em("« I think I know $R for statistics and bioinformatics»").") and " ;
00568 echo " from section 3 (".em("« I think I know how to program in $R»")."). " ;
00569 echo " Then send me at ".b("gilles.hunault@univ-angers.fr")." your scripts so I can check your programming skills." ;
00570 finp() ;
00571
00572 finblockquote() ; # section
00573
00574
00575 ######################################################################################################
00576
00577 pvide() ;
00578 p("texte") ;
00579 echo b(ghRouge("Final note:")) ;
00580 echo " selected answers to the exercises are hidden but clickable on " ;
00581 echo href("answers.r","this","noir nou")." page. " ;
00582 echo " Do you like to ".href("answers.txt"," play ","bouton_fin bleu_pastel nou")." hide and seek?" ;
00583 finp() ;
00584
00585 $sol = 0 ;
00586 if (isset($_GET["sol"])) { $sol = 1 ; } ;
00587 if (isset($_GET["solution"])) { $sol = 1 ; } ;
00588 if (isset($_GET["solutions"])) { $sol = 1 ; } ;
00589 if ($sol==1) {
00590 p() ;
00591 echo "All solutions are " ;
00592 echo href("answers.txt","here")."." ;
00593 finp() ;
00594 } ; # fin si
00595
00596 ######################################################################################################
00597
00598 p() ;
00599 echo href("montresource.php?nomfic=index.php","Source code for this page (php)","orange_stim nou") ;
00600 finp() ;
00601
00602 ######################################################################################################
00603
00604 finSection() ;
00605 finPage() ;
00606 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)