[{"data":1,"prerenderedAt":1091},["ShallowReactive",2],{"doc:\u002Fex01":3},{"id":4,"title":5,"body":6,"description":1084,"extension":1085,"meta":1086,"navigation":120,"path":1087,"seo":1088,"stem":1089,"__hash__":1090},"docs\u002Fex01.md","Ejercicio 01: ft_print_alphabet",{"type":7,"value":8,"toc":1065},"minimark",[9,13,20,82,88,93,342,346,353,369,375,393,407,420,431,437,482,488,494,504,507,513,520,541,547,554,648,661,667,677,682,689,701,705,729,741,745,753,757,819,834,838,931,935,1035,1048,1052,1061],[10,11,5],"h1",{"id":12},"ejercicio-01-ft_print_alphabet",[14,15,16],"blockquote",{},[17,18,19],"p",{},"Muestra el alfabeto en minúsculas en una sola línea, en orden creciente,\nempezando por la letra «a».",[21,22,23,36],"table",{},[24,25,26],"thead",{},[27,28,29,33],"tr",{},[30,31,32],"th",{},"Dato",[30,34,35],{},"Valor",[37,38,39,51,61,71],"tbody",{},[27,40,41,45],{},[42,43,44],"td",{},"Carpeta",[42,46,47],{},[48,49,50],"code",{},"ex01\u002F",[27,52,53,56],{},[42,54,55],{},"Archivo",[42,57,58],{},[48,59,60],{},"ft_print_alphabet.c",[27,62,63,66],{},[42,64,65],{},"Prototipo",[42,67,68],{},[48,69,70],{},"void ft_print_alphabet(void);",[27,72,73,76],{},[42,74,75],{},"Funciones autorizadas",[42,77,78,79],{},"solo ",[48,80,81],{},"write",[17,83,84],{},[85,86,87],"em",{},"Hecho con amor para Laura, por Bogdan.",[89,90,92],"h2",{"id":91},"el-archivo","El archivo",[94,95,100],"pre",{"className":96,"code":97,"language":98,"meta":99,"style":99},"language-c shiki shiki-themes github-light github-dark","#include \u003Cunistd.h>\n\n\u002F*\n** Copia local de ft_putchar: el enunciado solo permite entregar este archivo.\n** Escribe un unico caracter en la salida estandar.\n*\u002F\nstatic void put_char(char c)\n{\n    write(1, &c, 1);\n}\n\n\u002F*\n** Muestra el alfabeto en minusculas en una sola linea, de la 'a' a la 'z'.\n** Las letras son consecutivas en ASCII, asi que basta con sumar uno.\n*\u002F\nvoid    ft_print_alphabet(void)\n{\n    char    letter;\n\n    letter = 'a';\n    while (letter \u003C= 'z')\n    {\n        put_char(letter);\n        letter++;\n    }\n}\n","c","",[48,101,102,115,122,129,135,141,147,174,180,206,212,217,222,228,234,239,254,259,268,273,288,305,311,320,331,337],{"__ignoreMap":99},[103,104,107,111],"span",{"class":105,"line":106},"line",1,[103,108,110],{"class":109},"szBVR","#include",[103,112,114],{"class":113},"sZZnC"," \u003Cunistd.h>\n",[103,116,118],{"class":105,"line":117},2,[103,119,121],{"emptyLinePlaceholder":120},true,"\n",[103,123,125],{"class":105,"line":124},3,[103,126,128],{"class":127},"sJ8bj","\u002F*\n",[103,130,132],{"class":105,"line":131},4,[103,133,134],{"class":127},"** Copia local de ft_putchar: el enunciado solo permite entregar este archivo.\n",[103,136,138],{"class":105,"line":137},5,[103,139,140],{"class":127},"** Escribe un unico caracter en la salida estandar.\n",[103,142,144],{"class":105,"line":143},6,[103,145,146],{"class":127},"*\u002F\n",[103,148,150,153,156,160,164,167,171],{"class":105,"line":149},7,[103,151,152],{"class":109},"static",[103,154,155],{"class":109}," void",[103,157,159],{"class":158},"sScJk"," put_char",[103,161,163],{"class":162},"sVt8B","(",[103,165,166],{"class":109},"char",[103,168,170],{"class":169},"s4XuR"," c",[103,172,173],{"class":162},")\n",[103,175,177],{"class":105,"line":176},8,[103,178,179],{"class":162},"{\n",[103,181,183,186,188,192,195,198,201,203],{"class":105,"line":182},9,[103,184,185],{"class":158},"    write",[103,187,163],{"class":162},[103,189,191],{"class":190},"sj4cs","1",[103,193,194],{"class":162},", ",[103,196,197],{"class":109},"&",[103,199,200],{"class":162},"c, ",[103,202,191],{"class":190},[103,204,205],{"class":162},");\n",[103,207,209],{"class":105,"line":208},10,[103,210,211],{"class":162},"}\n",[103,213,215],{"class":105,"line":214},11,[103,216,121],{"emptyLinePlaceholder":120},[103,218,220],{"class":105,"line":219},12,[103,221,128],{"class":127},[103,223,225],{"class":105,"line":224},13,[103,226,227],{"class":127},"** Muestra el alfabeto en minusculas en una sola linea, de la 'a' a la 'z'.\n",[103,229,231],{"class":105,"line":230},14,[103,232,233],{"class":127},"** Las letras son consecutivas en ASCII, asi que basta con sumar uno.\n",[103,235,237],{"class":105,"line":236},15,[103,238,146],{"class":127},[103,240,242,245,248,250,252],{"class":105,"line":241},16,[103,243,244],{"class":109},"void",[103,246,247],{"class":158},"    ft_print_alphabet",[103,249,163],{"class":162},[103,251,244],{"class":109},[103,253,173],{"class":162},[103,255,257],{"class":105,"line":256},17,[103,258,179],{"class":162},[103,260,262,265],{"class":105,"line":261},18,[103,263,264],{"class":109},"    char",[103,266,267],{"class":162},"    letter;\n",[103,269,271],{"class":105,"line":270},19,[103,272,121],{"emptyLinePlaceholder":120},[103,274,276,279,282,285],{"class":105,"line":275},20,[103,277,278],{"class":162},"    letter ",[103,280,281],{"class":109},"=",[103,283,284],{"class":113}," 'a'",[103,286,287],{"class":162},";\n",[103,289,291,294,297,300,303],{"class":105,"line":290},21,[103,292,293],{"class":109},"    while",[103,295,296],{"class":162}," (letter ",[103,298,299],{"class":109},"\u003C=",[103,301,302],{"class":113}," 'z'",[103,304,173],{"class":162},[103,306,308],{"class":105,"line":307},22,[103,309,310],{"class":162},"    {\n",[103,312,314,317],{"class":105,"line":313},23,[103,315,316],{"class":158},"        put_char",[103,318,319],{"class":162},"(letter);\n",[103,321,323,326,329],{"class":105,"line":322},24,[103,324,325],{"class":162},"        letter",[103,327,328],{"class":109},"++",[103,330,287],{"class":162},[103,332,334],{"class":105,"line":333},25,[103,335,336],{"class":162},"    }\n",[103,338,340],{"class":105,"line":339},26,[103,341,211],{"class":162},[89,343,345],{"id":344},"línea-por-línea","Línea por línea",[347,348,350],"h3",{"id":349},"include-unistdh",[48,351,352],{},"#include \u003Cunistd.h>",[17,354,355,356,358,359,362,363,368],{},"Declara ",[48,357,81],{},". Sin esta línea el compilador no conoce la función y, con\n",[48,360,361],{},"-Werror",", el archivo no se genera. Está explicado a fondo en\n",[364,365,367],"a",{"href":366},"\u002Fex00","el ejercicio 00",".",[347,370,372],{"id":371},"static-void-put_charchar-c",[48,373,374],{},"static void put_char(char c)",[17,376,377,378,381,382,384,385,387,388,392],{},"Es la misma función que ",[48,379,380],{},"ft_putchar",", pero con ",[48,383,152],{}," delante. ",[48,386,152],{}," aquí\nsignifica: ",[389,390,391],"strong",{},"esta función solo existe dentro de este archivo",". Dos motivos:",[394,395,396,400],"ul",{},[397,398,399],"li",{},"Cada ejercicio se entrega solo, así que necesita su propia forma de escribir.",[397,401,402,403,406],{},"Si compilas varios archivos juntos, dos ",[48,404,405],{},"put_char"," internos no chocan.",[17,408,409,410,412,413,415,416,419],{},"El cuerpo es la llamada a ",[48,411,81],{}," de siempre: descriptor ",[48,414,191],{},", la dirección\n",[48,417,418],{},"&c"," y un byte.",[14,421,422],{},[17,423,424,425,427,428,430],{},"Se llama ",[48,426,405],{}," y no ",[48,429,380],{}," para no confundirla con la función\npública del ejercicio 00. Hace lo mismo, pero es privada.",[347,432,434],{"id":433},"void-ft_print_alphabetvoid",[48,435,436],{},"void ft_print_alphabet(void)",[21,438,439,449],{},[24,440,441],{},[27,442,443,446],{},[30,444,445],{},"Parte",[30,447,448],{},"Significado",[37,450,451,461,471],{},[27,452,453,458],{},[42,454,455,457],{},[48,456,244],{}," antes del nombre",[42,459,460],{},"no devuelve nada",[27,462,463,468],{},[42,464,465],{},[48,466,467],{},"ft_print_alphabet",[42,469,470],{},"el nombre que pide el subject",[27,472,473,479],{},[42,474,475,478],{},[48,476,477],{},"(void)"," entre paréntesis",[42,480,481],{},"no recibe argumentos",[17,483,484,485,487],{},"Sí, C usa ",[48,486,244],{}," para dos cosas distintas: «no devuelve» y «no recibe». Aquí\naparecen las dos a la vez.",[347,489,491],{"id":490},"char-letter",[48,492,493],{},"char letter;",[17,495,496,497,499,500,503],{},"Declara una variable de tipo ",[48,498,166],{},", la caja donde se guarda la letra que toca\nimprimir. La declaración ",[389,501,502],{},"no"," le da valor: por dentro hay basura hasta que la\ninicialices.",[17,505,506],{},"Se declara arriba del bloque porque el estilo de la piscina (basado en C89) pide\ntodas las declaraciones al principio de la función.",[347,508,510],{"id":509},"letter-a",[48,511,512],{},"letter = 'a';",[17,514,515,516,519],{},"Le da el primer valor. Sin esta línea, ",[48,517,518],{},"letter"," contendría lo que quedó de otro\nprograma y el bucle haría cualquier cosa.",[17,521,522,523,526,527,530,531,534,535,538,539,368],{},"Comillas simples: ",[48,524,525],{},"'a'"," es ",[389,528,529],{},"un carácter",". ",[48,532,533],{},"\"a\""," con comillas dobles es un\n",[389,536,537],{},"string"," de dos bytes y no cabe en un ",[48,540,166],{},[347,542,544],{"id":543},"while-letter-z",[48,545,546],{},"while (letter \u003C= 'z')",[17,548,549,550,553],{},"Un bucle: repite su cuerpo mientras la condición sea verdadera. La condición se\nevalúa ",[389,551,552],{},"antes"," de cada vuelta.",[21,555,556,575],{},[24,557,558],{},[27,559,560,563,567,572],{},[30,561,562],{},"Vuelta",[30,564,565],{},[48,566,518],{},[30,568,569],{},[48,570,571],{},"letter \u003C= 'z'",[30,573,574],{},"Qué hace",[37,576,577,591,605,616,630],{},[27,578,579,581,585,588],{},[42,580,191],{},[42,582,583],{},[48,584,525],{},[42,586,587],{},"verdadero",[42,589,590],{},"imprime y suma",[27,592,593,596,601,603],{},[42,594,595],{},"2",[42,597,598],{},[48,599,600],{},"'b'",[42,602,587],{},[42,604,590],{},[27,606,607,610,612,614],{},[42,608,609],{},"…",[42,611,609],{},[42,613,609],{},[42,615,609],{},[27,617,618,621,626,628],{},[42,619,620],{},"26",[42,622,623],{},[48,624,625],{},"'z'",[42,627,587],{},[42,629,590],{},[27,631,632,635,640,645],{},[42,633,634],{},"—",[42,636,637],{},[48,638,639],{},"'{'",[42,641,642],{},[389,643,644],{},"falso",[42,646,647],{},"sale del bucle",[17,649,650,651,653,654,656,657,660],{},"El ",[48,652,299],{}," incluye la ",[48,655,625],{},". Con ",[48,658,659],{},"\u003C"," te dejarías la última letra, que es uno de los\ndos errores clásicos de este ejercicio.",[347,662,664],{"id":663},"put_charletter",[48,665,666],{},"put_char(letter);",[17,668,669,670,672,673,676],{},"Llama a la función auxiliar con el valor actual. ",[48,671,518],{}," se pasa ",[389,674,675],{},"por valor",":\nla función recibe una copia y escribirla no cambia la variable original.",[347,678,679],{"id":518},[48,680,681],{},"letter++;",[17,683,684,685,688],{},"Es la forma corta de ",[48,686,687],{},"letter = letter + 1;",". Avanza a la siguiente letra.",[17,690,691,694,695,697,698,700],{},[389,692,693],{},"Si te olvidas de esta línea, el programa nunca termina",": ",[48,696,518],{}," se queda en\n",[48,699,525],{}," para siempre y la condición siempre es verdadera. El enunciado prohíbe el\nbucle infinito de forma explícita.",[89,702,704],{"id":703},"por-qué-funciona-sin-ninguna-tabla","Por qué funciona sin ninguna tabla",[17,706,707,708,711,712,714,715,717,718,721,722,724,725,728],{},"Las letras minúsculas están ",[389,709,710],{},"consecutivas"," en ASCII: ",[48,713,525],{}," es 97, ",[48,716,600],{}," es 98,\n",[48,719,720],{},"'c'"," es 99. Sumar uno a un ",[48,723,166],{}," pasa a la siguiente. No necesitas un array ni\nun ",[48,726,727],{},"if"," por letra.",[17,730,731,732,734,735,737,738,740],{},"Cuando el bucle acaba, ",[48,733,518],{}," vale ",[48,736,639],{},", el carácter que va después de ",[48,739,625],{},".\nEse valor no se imprime nunca: la condición se comprueba antes de entrar.",[89,742,744],{"id":743},"salida-esperada","Salida esperada",[94,746,751],{"className":747,"code":749,"language":750,"meta":99},[748],"language-text","abcdefghijklmnopqrstuvwxyz\n","text",[48,752,749],{"__ignoreMap":99},[89,754,756],{"id":755},"casos-límite","Casos límite",[21,758,759,769],{},[24,760,761],{},[27,762,763,766],{},[30,764,765],{},"Detalle",[30,767,768],{},"Decisión",[37,770,771,779,794,805],{},[27,772,773,776],{},[42,774,775],{},"Salto de línea final",[42,777,778],{},"no se imprime: el enunciado pide el alfabeto, no una línea terminada",[27,780,781,785],{},[42,782,783],{},[48,784,571],{},[42,786,787,788,790,791,793],{},"incluye la ",[48,789,625],{},"; con ",[48,792,659],{}," te dejarías la última letra",[27,795,796,799],{},[42,797,798],{},"Bucle infinito",[42,800,801,802],{},"imposible mientras exista ",[48,803,804],{},"letter++",[27,806,807,810],{},[42,808,809],{},"26 vueltas",[42,811,812,813,815,816,818],{},"exactas: de ",[48,814,525],{}," a ",[48,817,625],{}," hay 26 letras",[17,820,821,822,825,826,829,830,833],{},"Si tu corrector espera un ",[48,823,824],{},"'\\n'"," al final, añade ",[48,827,828],{},"put_char('\\n');"," después del\n",[48,831,832],{},"while",". Es un cambio de una línea.",[89,835,837],{"id":836},"errores-típicos","Errores típicos",[21,839,840,853],{},[24,841,842],{},[27,843,844,847,850],{},[30,845,846],{},"Mensaje o síntoma",[30,848,849],{},"Causa",[30,851,852],{},"Solución",[37,854,855,874,887,905,918],{},[27,856,857,863,869],{},[42,858,859,860],{},"falta la ",[48,861,862],{},"z",[42,864,865,866],{},"usaste ",[48,867,868],{},"letter \u003C 'z'",[42,870,871,872],{},"cambia a ",[48,873,299],{},[27,875,876,879,884],{},[42,877,878],{},"el programa no termina",[42,880,881,882],{},"olvidaste ",[48,883,804],{},[42,885,886],{},"añádelo en el cuerpo",[27,888,889,895,902],{},[42,890,891,894],{},[48,892,893],{},"too many errors"," \u002F tipos",[42,896,865,897,899,900],{},[48,898,533],{}," en vez de ",[48,901,525],{},[42,903,904],{},"comillas simples",[27,906,907,912,915],{},[42,908,909],{},[48,910,911],{},"implicit declaration of put_char",[42,913,914],{},"definiste la función después de usarla",[42,916,917],{},"ponla antes",[27,919,920,925,928],{},[42,921,922],{},[48,923,924],{},"unused variable 'letter'",[42,926,927],{},"la declaraste y no la usaste",[42,929,930],{},"úsala en el bucle",[89,932,934],{"id":933},"comprobarlo","Comprobarlo",[94,936,940],{"className":937,"code":938,"language":939,"meta":99,"style":99},"language-sh shiki shiki-themes github-light github-dark","cat > \u002Ftmp\u002Fmain.c \u003C\u003C'EOF'\nvoid    ft_print_alphabet(void);\n\nint main(void)\n{\n    ft_print_alphabet();\n    return (0);\n}\nEOF\ncc -Wall -Wextra -Werror ex01\u002Fft_print_alphabet.c \u002Ftmp\u002Fmain.c -o \u002Ftmp\u002Fex01\n\u002Ftmp\u002Fex01 | cat -A\n","sh",[48,941,942,959,964,968,973,977,982,987,991,996,1021],{"__ignoreMap":99},[103,943,944,947,950,953,956],{"class":105,"line":106},[103,945,946],{"class":158},"cat",[103,948,949],{"class":109}," >",[103,951,952],{"class":113}," \u002Ftmp\u002Fmain.c",[103,954,955],{"class":109}," \u003C\u003C",[103,957,958],{"class":113},"'EOF'\n",[103,960,961],{"class":105,"line":117},[103,962,963],{"class":113},"void    ft_print_alphabet(void);\n",[103,965,966],{"class":105,"line":124},[103,967,121],{"emptyLinePlaceholder":120},[103,969,970],{"class":105,"line":131},[103,971,972],{"class":113},"int main(void)\n",[103,974,975],{"class":105,"line":137},[103,976,179],{"class":113},[103,978,979],{"class":105,"line":143},[103,980,981],{"class":113},"    ft_print_alphabet();\n",[103,983,984],{"class":105,"line":149},[103,985,986],{"class":113},"    return (0);\n",[103,988,989],{"class":105,"line":176},[103,990,211],{"class":113},[103,992,993],{"class":105,"line":182},[103,994,995],{"class":113},"EOF\n",[103,997,998,1001,1004,1007,1010,1013,1015,1018],{"class":105,"line":208},[103,999,1000],{"class":158},"cc",[103,1002,1003],{"class":190}," -Wall",[103,1005,1006],{"class":190}," -Wextra",[103,1008,1009],{"class":190}," -Werror",[103,1011,1012],{"class":113}," ex01\u002Fft_print_alphabet.c",[103,1014,952],{"class":113},[103,1016,1017],{"class":190}," -o",[103,1019,1020],{"class":113}," \u002Ftmp\u002Fex01\n",[103,1022,1023,1026,1029,1032],{"class":105,"line":214},[103,1024,1025],{"class":158},"\u002Ftmp\u002Fex01",[103,1027,1028],{"class":109}," |",[103,1030,1031],{"class":158}," cat",[103,1033,1034],{"class":190}," -A\n",[17,1036,1037,1040,1041,1044,1045,1047],{},[48,1038,1039],{},"cat -A"," marca el final de cada línea con ",[48,1042,1043],{},"$",". Como no hay salto, la salida\naparece sin ",[48,1046,1043],{}," al final.",[89,1049,1051],{"id":1050},"descargar","Descargar",[394,1053,1054],{},[397,1055,1056],{},[364,1057,1059],{"href":1058,"download":60},"..\u002Fcode\u002Fft_print_alphabet.c",[48,1060,60],{},[1062,1063,1064],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":99,"searchDepth":117,"depth":117,"links":1066},[1067,1068,1078,1079,1080,1081,1082,1083],{"id":91,"depth":117,"text":92},{"id":344,"depth":117,"text":345,"children":1069},[1070,1071,1072,1073,1074,1075,1076,1077],{"id":349,"depth":124,"text":352},{"id":371,"depth":124,"text":374},{"id":433,"depth":124,"text":436},{"id":490,"depth":124,"text":493},{"id":509,"depth":124,"text":512},{"id":543,"depth":124,"text":546},{"id":663,"depth":124,"text":666},{"id":518,"depth":124,"text":681},{"id":703,"depth":117,"text":704},{"id":743,"depth":117,"text":744},{"id":755,"depth":117,"text":756},{"id":836,"depth":117,"text":837},{"id":933,"depth":117,"text":934},{"id":1050,"depth":117,"text":1051},"El alfabeto de la a a la z, con un bucle y la consecutividad de ASCII.","md",{},"\u002Fex01",{"title":5,"description":1084},"ex01","bKCboq3UittxR2PfaJAsEqj-IZAevjGqRSz074-5-xM",1793539815757]