[{"data":1,"prerenderedAt":1954},["ShallowReactive",2],{"doc:\u002Fex08":3},{"id":4,"title":5,"body":6,"description":1947,"extension":1948,"meta":1949,"navigation":131,"path":1950,"seo":1951,"stem":1952,"__hash__":1953},"docs\u002Fex08.md","Ejercicio 08: ft_print_combn",{"type":7,"value":8,"toc":1905},"minimark",[9,13,32,93,99,104,895,899,906,912,918,925,931,937,951,961,967,973,976,1027,1033,1043,1049,1052,1135,1141,1151,1157,1166,1180,1186,1189,1195,1198,1204,1207,1213,1234,1243,1246,1252,1260,1266,1269,1277,1283,1288,1291,1297,1300,1306,1318,1327,1336,1345,1361,1367,1370,1377,1509,1520,1524,1590,1600,1604,1660,1664,1766,1770,1861,1864,1872,1885,1889,1901],[10,11,5],"h1",{"id":12},"ejercicio-08-ft_print_combn",[14,15,16],"blockquote",{},[17,18,19,20,24,25,27,28,31],"p",{},"Muestra todas las combinaciones de ",[21,22,23],"code",{},"n"," dígitos en orden creciente, sin\nrepeticiones. El valor de ",[21,26,23],{}," cumple ",[21,29,30],{},"0 \u003C n \u003C 10",".",[33,34,35,48],"table",{},[36,37,38],"thead",{},[39,40,41,45],"tr",{},[42,43,44],"th",{},"Dato",[42,46,47],{},"Valor",[49,50,51,62,72,82],"tbody",{},[39,52,53,57],{},[54,55,56],"td",{},"Carpeta",[54,58,59],{},[21,60,61],{},"ex08\u002F",[39,63,64,67],{},[54,65,66],{},"Archivo",[54,68,69],{},[21,70,71],{},"ft_print_combn.c",[39,73,74,77],{},[54,75,76],{},"Prototipo",[54,78,79],{},[21,80,81],{},"void ft_print_combn(int n);",[39,83,84,87],{},[54,85,86],{},"Funciones autorizadas",[54,88,89,90],{},"solo ",[21,91,92],{},"write",[17,94,95],{},[96,97,98],"em",{},"Hecho con amor para Laura, por Bogdan.",[100,101,103],"h2",{"id":102},"el-archivo","El archivo",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"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* Escribe los n digitos que hay guardados en el array. *\u002F\nstatic void print_combination(char *digits, int n)\n{\n    int index;\n\n    index = 0;\n    while (index \u003C n)\n    {\n        put_char(digits[index]);\n        index++;\n    }\n}\n\n\u002F*\n** Rellena la posicion indicada con todos los digitos posibles y baja un nivel.\n** El tope de cada posicion deja sitio a los digitos que faltan a la derecha:\n** asi nunca se pasa de '9' y cada combinacion sale ordenada y sin repetir.\n*\u002F\nstatic void build_combinations(char *digits, int position, int n, int *first)\n{\n    char    digit;\n    char    last;\n\n    last = '0' + 10 - (n - position);\n    if (position == 0)\n        digit = '0';\n    else\n        digit = digits[position - 1] + 1;\n    while (digit \u003C= last)\n    {\n        digits[position] = digit;\n        if (position == n - 1)\n        {\n            if (!*first)\n            {\n                put_char(',');\n                put_char(' ');\n            }\n            *first = 0;\n            print_combination(digits, n);\n        }\n        else\n            build_combinations(digits, position + 1, n, first);\n        digit++;\n    }\n}\n\n\u002F*\n** Muestra todas las combinaciones de n digitos distintos en orden creciente.\n** El enunciado garantiza 0 \u003C n \u003C 10; fuera de ese rango no se dibuja nada.\n*\u002F\nvoid    ft_print_combn(int n)\n{\n    char    digits[10];\n    int     first;\n\n    if (n \u003C= 0 || n >= 10)\n        return ;\n    first = 1;\n    build_combinations(digits, 0, n, &first);\n    put_char('\\n');\n}\n","c","",[21,112,113,126,133,140,146,152,158,185,191,217,223,228,234,264,269,278,283,298,313,319,332,343,349,354,359,364,370,376,382,387,429,434,443,451,456,485,501,513,519,547,561,566,580,599,605,620,626,639,651,657,672,681,687,693,709,719,724,729,734,739,745,751,756,773,778,795,803,808,831,840,852,872,890],{"__ignoreMap":110},[114,115,118,122],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"szBVR","#include",[114,123,125],{"class":124},"sZZnC"," \u003Cunistd.h>\n",[114,127,129],{"class":116,"line":128},2,[114,130,132],{"emptyLinePlaceholder":131},true,"\n",[114,134,136],{"class":116,"line":135},3,[114,137,139],{"class":138},"sJ8bj","\u002F*\n",[114,141,143],{"class":116,"line":142},4,[114,144,145],{"class":138},"** Copia local de ft_putchar: el enunciado solo permite entregar este archivo.\n",[114,147,149],{"class":116,"line":148},5,[114,150,151],{"class":138},"** Escribe un unico caracter en la salida estandar.\n",[114,153,155],{"class":116,"line":154},6,[114,156,157],{"class":138},"*\u002F\n",[114,159,161,164,167,171,175,178,182],{"class":116,"line":160},7,[114,162,163],{"class":120},"static",[114,165,166],{"class":120}," void",[114,168,170],{"class":169},"sScJk"," put_char",[114,172,174],{"class":173},"sVt8B","(",[114,176,177],{"class":120},"char",[114,179,181],{"class":180},"s4XuR"," c",[114,183,184],{"class":173},")\n",[114,186,188],{"class":116,"line":187},8,[114,189,190],{"class":173},"{\n",[114,192,194,197,199,203,206,209,212,214],{"class":116,"line":193},9,[114,195,196],{"class":169},"    write",[114,198,174],{"class":173},[114,200,202],{"class":201},"sj4cs","1",[114,204,205],{"class":173},", ",[114,207,208],{"class":120},"&",[114,210,211],{"class":173},"c, ",[114,213,202],{"class":201},[114,215,216],{"class":173},");\n",[114,218,220],{"class":116,"line":219},10,[114,221,222],{"class":173},"}\n",[114,224,226],{"class":116,"line":225},11,[114,227,132],{"emptyLinePlaceholder":131},[114,229,231],{"class":116,"line":230},12,[114,232,233],{"class":138},"\u002F* Escribe los n digitos que hay guardados en el array. *\u002F\n",[114,235,237,239,241,244,246,248,251,254,256,259,262],{"class":116,"line":236},13,[114,238,163],{"class":120},[114,240,166],{"class":120},[114,242,243],{"class":169}," print_combination",[114,245,174],{"class":173},[114,247,177],{"class":120},[114,249,250],{"class":120}," *",[114,252,253],{"class":180},"digits",[114,255,205],{"class":173},[114,257,258],{"class":120},"int",[114,260,261],{"class":180}," n",[114,263,184],{"class":173},[114,265,267],{"class":116,"line":266},14,[114,268,190],{"class":173},[114,270,272,275],{"class":116,"line":271},15,[114,273,274],{"class":120},"    int",[114,276,277],{"class":173}," index;\n",[114,279,281],{"class":116,"line":280},16,[114,282,132],{"emptyLinePlaceholder":131},[114,284,286,289,292,295],{"class":116,"line":285},17,[114,287,288],{"class":173},"    index ",[114,290,291],{"class":120},"=",[114,293,294],{"class":201}," 0",[114,296,297],{"class":173},";\n",[114,299,301,304,307,310],{"class":116,"line":300},18,[114,302,303],{"class":120},"    while",[114,305,306],{"class":173}," (index ",[114,308,309],{"class":120},"\u003C",[114,311,312],{"class":173}," n)\n",[114,314,316],{"class":116,"line":315},19,[114,317,318],{"class":173},"    {\n",[114,320,322,325,327,329],{"class":116,"line":321},20,[114,323,324],{"class":169},"        put_char",[114,326,174],{"class":173},[114,328,253],{"class":180},[114,330,331],{"class":173},"[index]);\n",[114,333,335,338,341],{"class":116,"line":334},21,[114,336,337],{"class":173},"        index",[114,339,340],{"class":120},"++",[114,342,297],{"class":173},[114,344,346],{"class":116,"line":345},22,[114,347,348],{"class":173},"    }\n",[114,350,352],{"class":116,"line":351},23,[114,353,222],{"class":173},[114,355,357],{"class":116,"line":356},24,[114,358,132],{"emptyLinePlaceholder":131},[114,360,362],{"class":116,"line":361},25,[114,363,139],{"class":138},[114,365,367],{"class":116,"line":366},26,[114,368,369],{"class":138},"** Rellena la posicion indicada con todos los digitos posibles y baja un nivel.\n",[114,371,373],{"class":116,"line":372},27,[114,374,375],{"class":138},"** El tope de cada posicion deja sitio a los digitos que faltan a la derecha:\n",[114,377,379],{"class":116,"line":378},28,[114,380,381],{"class":138},"** asi nunca se pasa de '9' y cada combinacion sale ordenada y sin repetir.\n",[114,383,385],{"class":116,"line":384},29,[114,386,157],{"class":138},[114,388,390,392,394,397,399,401,403,405,407,409,412,414,416,418,420,422,424,427],{"class":116,"line":389},30,[114,391,163],{"class":120},[114,393,166],{"class":120},[114,395,396],{"class":169}," build_combinations",[114,398,174],{"class":173},[114,400,177],{"class":120},[114,402,250],{"class":120},[114,404,253],{"class":180},[114,406,205],{"class":173},[114,408,258],{"class":120},[114,410,411],{"class":180}," position",[114,413,205],{"class":173},[114,415,258],{"class":120},[114,417,261],{"class":180},[114,419,205],{"class":173},[114,421,258],{"class":120},[114,423,250],{"class":120},[114,425,426],{"class":180},"first",[114,428,184],{"class":173},[114,430,432],{"class":116,"line":431},31,[114,433,190],{"class":173},[114,435,437,440],{"class":116,"line":436},32,[114,438,439],{"class":120},"    char",[114,441,442],{"class":173},"    digit;\n",[114,444,446,448],{"class":116,"line":445},33,[114,447,439],{"class":120},[114,449,450],{"class":173},"    last;\n",[114,452,454],{"class":116,"line":453},34,[114,455,132],{"emptyLinePlaceholder":131},[114,457,459,462,464,467,470,473,476,479,482],{"class":116,"line":458},35,[114,460,461],{"class":173},"    last ",[114,463,291],{"class":120},[114,465,466],{"class":124}," '0'",[114,468,469],{"class":120}," +",[114,471,472],{"class":201}," 10",[114,474,475],{"class":120}," -",[114,477,478],{"class":173}," (n ",[114,480,481],{"class":120},"-",[114,483,484],{"class":173}," position);\n",[114,486,488,491,494,497,499],{"class":116,"line":487},36,[114,489,490],{"class":120},"    if",[114,492,493],{"class":173}," (position ",[114,495,496],{"class":120},"==",[114,498,294],{"class":201},[114,500,184],{"class":173},[114,502,504,507,509,511],{"class":116,"line":503},37,[114,505,506],{"class":173},"        digit ",[114,508,291],{"class":120},[114,510,466],{"class":124},[114,512,297],{"class":173},[114,514,516],{"class":116,"line":515},38,[114,517,518],{"class":120},"    else\n",[114,520,522,524,526,529,532,534,537,540,543,545],{"class":116,"line":521},39,[114,523,506],{"class":173},[114,525,291],{"class":120},[114,527,528],{"class":180}," digits",[114,530,531],{"class":173},"[position ",[114,533,481],{"class":120},[114,535,536],{"class":201}," 1",[114,538,539],{"class":173},"] ",[114,541,542],{"class":120},"+",[114,544,536],{"class":201},[114,546,297],{"class":173},[114,548,550,552,555,558],{"class":116,"line":549},40,[114,551,303],{"class":120},[114,553,554],{"class":173}," (digit ",[114,556,557],{"class":120},"\u003C=",[114,559,560],{"class":173}," last)\n",[114,562,564],{"class":116,"line":563},41,[114,565,318],{"class":173},[114,567,569,572,575,577],{"class":116,"line":568},42,[114,570,571],{"class":180},"        digits",[114,573,574],{"class":173},"[position] ",[114,576,291],{"class":120},[114,578,579],{"class":173}," digit;\n",[114,581,583,586,588,590,593,595,597],{"class":116,"line":582},43,[114,584,585],{"class":120},"        if",[114,587,493],{"class":173},[114,589,496],{"class":120},[114,591,592],{"class":173}," n ",[114,594,481],{"class":120},[114,596,536],{"class":201},[114,598,184],{"class":173},[114,600,602],{"class":116,"line":601},44,[114,603,604],{"class":173},"        {\n",[114,606,608,611,614,617],{"class":116,"line":607},45,[114,609,610],{"class":120},"            if",[114,612,613],{"class":173}," (",[114,615,616],{"class":120},"!*",[114,618,619],{"class":173},"first)\n",[114,621,623],{"class":116,"line":622},46,[114,624,625],{"class":173},"            {\n",[114,627,629,632,634,637],{"class":116,"line":628},47,[114,630,631],{"class":169},"                put_char",[114,633,174],{"class":173},[114,635,636],{"class":124},"','",[114,638,216],{"class":173},[114,640,642,644,646,649],{"class":116,"line":641},48,[114,643,631],{"class":169},[114,645,174],{"class":173},[114,647,648],{"class":124},"' '",[114,650,216],{"class":173},[114,652,654],{"class":116,"line":653},49,[114,655,656],{"class":173},"            }\n",[114,658,660,663,666,668,670],{"class":116,"line":659},50,[114,661,662],{"class":120},"            *",[114,664,665],{"class":173},"first ",[114,667,291],{"class":120},[114,669,294],{"class":201},[114,671,297],{"class":173},[114,673,675,678],{"class":116,"line":674},51,[114,676,677],{"class":169},"            print_combination",[114,679,680],{"class":173},"(digits, n);\n",[114,682,684],{"class":116,"line":683},52,[114,685,686],{"class":173},"        }\n",[114,688,690],{"class":116,"line":689},53,[114,691,692],{"class":120},"        else\n",[114,694,696,699,702,704,706],{"class":116,"line":695},54,[114,697,698],{"class":169},"            build_combinations",[114,700,701],{"class":173},"(digits, position ",[114,703,542],{"class":120},[114,705,536],{"class":201},[114,707,708],{"class":173},", n, first);\n",[114,710,712,715,717],{"class":116,"line":711},55,[114,713,714],{"class":173},"        digit",[114,716,340],{"class":120},[114,718,297],{"class":173},[114,720,722],{"class":116,"line":721},56,[114,723,348],{"class":173},[114,725,727],{"class":116,"line":726},57,[114,728,222],{"class":173},[114,730,732],{"class":116,"line":731},58,[114,733,132],{"emptyLinePlaceholder":131},[114,735,737],{"class":116,"line":736},59,[114,738,139],{"class":138},[114,740,742],{"class":116,"line":741},60,[114,743,744],{"class":138},"** Muestra todas las combinaciones de n digitos distintos en orden creciente.\n",[114,746,748],{"class":116,"line":747},61,[114,749,750],{"class":138},"** El enunciado garantiza 0 \u003C n \u003C 10; fuera de ese rango no se dibuja nada.\n",[114,752,754],{"class":116,"line":753},62,[114,755,157],{"class":138},[114,757,759,762,765,767,769,771],{"class":116,"line":758},63,[114,760,761],{"class":120},"void",[114,763,764],{"class":169},"    ft_print_combn",[114,766,174],{"class":173},[114,768,258],{"class":120},[114,770,261],{"class":180},[114,772,184],{"class":173},[114,774,776],{"class":116,"line":775},64,[114,777,190],{"class":173},[114,779,781,783,786,789,792],{"class":116,"line":780},65,[114,782,439],{"class":120},[114,784,785],{"class":180},"    digits",[114,787,788],{"class":173},"[",[114,790,791],{"class":201},"10",[114,793,794],{"class":173},"];\n",[114,796,798,800],{"class":116,"line":797},66,[114,799,274],{"class":120},[114,801,802],{"class":173},"     first;\n",[114,804,806],{"class":116,"line":805},67,[114,807,132],{"emptyLinePlaceholder":131},[114,809,811,813,815,817,819,822,824,827,829],{"class":116,"line":810},68,[114,812,490],{"class":120},[114,814,478],{"class":173},[114,816,557],{"class":120},[114,818,294],{"class":201},[114,820,821],{"class":120}," ||",[114,823,592],{"class":173},[114,825,826],{"class":120},">=",[114,828,472],{"class":201},[114,830,184],{"class":173},[114,832,834,837],{"class":116,"line":833},69,[114,835,836],{"class":120},"        return",[114,838,839],{"class":173}," ;\n",[114,841,843,846,848,850],{"class":116,"line":842},70,[114,844,845],{"class":173},"    first ",[114,847,291],{"class":120},[114,849,536],{"class":201},[114,851,297],{"class":173},[114,853,855,858,861,864,867,869],{"class":116,"line":854},71,[114,856,857],{"class":169},"    build_combinations",[114,859,860],{"class":173},"(digits, ",[114,862,863],{"class":201},"0",[114,865,866],{"class":173},", n, ",[114,868,208],{"class":120},[114,870,871],{"class":173},"first);\n",[114,873,875,878,880,883,886,888],{"class":116,"line":874},72,[114,876,877],{"class":169},"    put_char",[114,879,174],{"class":173},[114,881,882],{"class":124},"'",[114,884,885],{"class":201},"\\n",[114,887,882],{"class":124},[114,889,216],{"class":173},[114,891,893],{"class":116,"line":892},73,[114,894,222],{"class":173},[100,896,898],{"id":897},"línea-por-línea","Línea por línea",[900,901,903],"h3",{"id":902},"include-unistdh",[21,904,905],{},"#include \u003Cunistd.h>",[17,907,908,909,911],{},"Declara ",[21,910,92],{},", la única función de librería permitida.",[900,913,915],{"id":914},"static-void-put_charchar-c",[21,916,917],{},"static void put_char(char c)",[17,919,920,921,924],{},"Copia privada de ",[21,922,923],{},"ft_putchar",", igual que en los demás ejercicios.",[900,926,928],{"id":927},"static-void-print_combinationchar-digits-int-n",[21,929,930],{},"static void print_combination(char *digits, int n)",[17,932,933,934,936],{},"Imprime los ",[21,935,23],{}," dígitos guardados en el array.",[17,938,939,942,943,947,948,31],{},[21,940,941],{},"char *digits"," es un ",[944,945,946],"strong",{},"puntero",": la dirección donde empieza el array. Se usa\npara no copiar los diez caracteres en cada llamada y para que la función vea los\ncambios que hace ",[21,949,950],{},"build_combinations",[900,952,954,957,958],{"id":953},"int-index-y-while-index-n",[21,955,956],{},"int index;"," y ",[21,959,960],{},"while (index \u003C n)",[17,962,963,964,966],{},"Recorre las ",[21,965,23],{}," casillas que están en uso. Las demás del array pueden tener\nbasura: no se tocan.",[900,968,970],{"id":969},"static-void-build_combinationschar-digits-int-position-int-n-int-first",[21,971,972],{},"static void build_combinations(char *digits, int position, int n, int *first)",[17,974,975],{},"Es la función recursiva que genera las combinaciones. Parámetros:",[33,977,978,988],{},[36,979,980],{},[39,981,982,985],{},[42,983,984],{},"Parámetro",[42,986,987],{},"Qué es",[49,989,990,999,1009,1018],{},[39,991,992,996],{},[54,993,994],{},[21,995,253],{},[54,997,998],{},"el array donde se va montando la combinación",[39,1000,1001,1006],{},[54,1002,1003],{},[21,1004,1005],{},"position",[54,1007,1008],{},"qué casilla se está llenando ahora",[39,1010,1011,1015],{},[54,1012,1013],{},[21,1014,23],{},[54,1016,1017],{},"cuántos dígitos tiene la combinación",[39,1019,1020,1024],{},[54,1021,1022],{},[21,1023,426],{},[54,1025,1026],{},"la dirección de la bandera del separador",[900,1028,1030],{"id":1029},"char-digit-char-last",[21,1031,1032],{},"char digit; char last;",[17,1034,1035,1038,1039,1042],{},[21,1036,1037],{},"digit"," es el valor que prueba la casilla actual; ",[21,1040,1041],{},"last",", el máximo que puede\ntomar sin quedarse sin sitio a la derecha.",[900,1044,1046],{"id":1045},"last-0-10-n-position",[21,1047,1048],{},"last = '0' + 10 - (n - position);",[17,1050,1051],{},"El cálculo clave. Reserva hueco para los dígitos que faltan:",[33,1053,1054,1073],{},[36,1055,1056],{},[39,1057,1058,1062,1066,1070],{},[42,1059,1060],{},[21,1061,23],{},[42,1063,1064],{},[21,1065,1005],{},[42,1067,1068],{},[21,1069,1041],{},[42,1071,1072],{},"Por qué",[49,1074,1075,1093,1106,1121],{},[39,1076,1077,1080,1082,1087],{},[54,1078,1079],{},"2",[54,1081,863],{},[54,1083,1084],{},[21,1085,1086],{},"'8'",[54,1088,1089,1090],{},"detrás va un dígito, no puede ser ",[21,1091,1092],{},"'9'",[39,1094,1095,1097,1099,1103],{},[54,1096,1079],{},[54,1098,202],{},[54,1100,1101],{},[21,1102,1092],{},[54,1104,1105],{},"es la última casilla",[39,1107,1108,1111,1113,1118],{},[54,1109,1110],{},"9",[54,1112,863],{},[54,1114,1115],{},[21,1116,1117],{},"'1'",[54,1119,1120],{},"las otras ocho casillas necesitan ocho dígitos mayores",[39,1122,1123,1125,1128,1132],{},[54,1124,1110],{},[54,1126,1127],{},"8",[54,1129,1130],{},[21,1131,1092],{},[54,1133,1134],{},"última casilla",[17,1136,1137,1138,1140],{},"Sin ese tope, la casilla 0 podría valer ",[21,1139,1092],{}," y ya no habría dígitos mayores para\nlas siguientes.",[900,1142,1144,1147,1148],{"id":1143},"if-position-0-digit-0",[21,1145,1146],{},"if (position == 0)"," \u002F ",[21,1149,1150],{},"digit = '0';",[17,1152,1153,1154,31],{},"La primera casilla empieza en ",[21,1155,1156],{},"'0'",[900,1158,1160,1147,1163],{"id":1159},"else-digit-digitsposition-1-1",[21,1161,1162],{},"else",[21,1164,1165],{},"digit = digits[position - 1] + 1;",[17,1167,1168,1169,1172,1173,1176,1177,31],{},"Las demás empiezan ",[944,1170,1171],{},"uno por encima del dígito anterior",". Esa es la regla que\ngarantiza el orden creciente y la ausencia de repeticiones: si la casilla previa\ntiene ",[21,1174,1175],{},"'3'",", esta empieza en ",[21,1178,1179],{},"'4'",[900,1181,1183],{"id":1182},"while-digit-last",[21,1184,1185],{},"while (digit \u003C= last)",[17,1187,1188],{},"Prueba todos los valores posibles de la casilla, del inicial al tope.",[900,1190,1192],{"id":1191},"digitsposition-digit",[21,1193,1194],{},"digits[position] = digit;",[17,1196,1197],{},"Guarda el valor elegido en el array. Las llamadas siguientes lo verán.",[900,1199,1201],{"id":1200},"if-position-n-1",[21,1202,1203],{},"if (position == n - 1)",[17,1205,1206],{},"El caso base: si es la última casilla, la combinación está completa y toca\nimprimirla.",[900,1208,1210],{"id":1209},"if-first",[21,1211,1212],{},"if (!*first)",[17,1214,1215,1217,1218,1221,1222,1225,1226,1229,1230,1233],{},[21,1216,426],{}," es un puntero, así que ",[21,1219,1220],{},"*first"," es el valor guardado en la variable\noriginal. ",[21,1223,1224],{},"!*first"," se lee «si no es la primera combinación». El ",[21,1227,1228],{},"*"," delante es\n",[944,1231,1232],{},"desreferencia",": ir a la dirección y leer lo que hay.",[900,1235,1237,957,1240],{"id":1236},"put_char-y-put_char",[21,1238,1239],{},"put_char(',');",[21,1241,1242],{},"put_char(' ');",[17,1244,1245],{},"El separador entre combinaciones, delante de todas menos la primera.",[900,1247,1249],{"id":1248},"first-0",[21,1250,1251],{},"*first = 0;",[17,1253,1254,1255,1257,1258,31],{},"Marca que ya se imprimió al menos una. Al escribir en ",[21,1256,1220],{},", el cambio lo ve\nel nivel de arriba: por eso se pasa un puntero y no un ",[21,1259,258],{},[900,1261,1263],{"id":1262},"print_combinationdigits-n",[21,1264,1265],{},"print_combination(digits, n);",[17,1267,1268],{},"Imprime la combinación completa.",[900,1270,1272,1147,1274],{"id":1271},"else-build_combinationsdigits-position-1-n-first",[21,1273,1162],{},[21,1275,1276],{},"build_combinations(digits, position + 1, n, first);",[17,1278,1279,1280,1282],{},"Si todavía no es la última casilla, baja un nivel para llenar la siguiente. Se\npasa ",[21,1281,426],{}," tal cual, porque ya es un puntero.",[900,1284,1285],{"id":1037},[21,1286,1287],{},"digit++;",[17,1289,1290],{},"Prueba el siguiente valor de esta casilla.",[900,1292,1294],{"id":1293},"void-ft_print_combnint-n",[21,1295,1296],{},"void ft_print_combn(int n)",[17,1298,1299],{},"La función pública.",[900,1301,1303],{"id":1302},"char-digits10",[21,1304,1305],{},"char digits[10];",[17,1307,1308,1309,1311,1312,1314,1315,1317],{},"El array que guarda la combinación. Tiene ",[944,1310,791],{}," posiciones y no ",[21,1313,23],{}," porque el\ntamaño de un array se fija al compilar y ",[21,1316,23],{}," llega por parámetro. Diez es\nsuficiente: el máximo de dígitos distintos es 10.",[900,1319,1321,1147,1324],{"id":1320},"if-n-0-n-10-return",[21,1322,1323],{},"if (n \u003C= 0 || n >= 10)",[21,1325,1326],{},"return ;",[17,1328,1329,1330,1332,1333,1335],{},"La guard clause. El enunciado garantiza ",[21,1331,30],{},", pero así la función no\ntoca el array con valores imposibles. ",[21,1334,1326],{}," sale de la función y no dibuja\nnada.",[900,1337,1339,957,1342],{"id":1338},"first-1-y-build_combinationsdigits-0-n-first",[21,1340,1341],{},"first = 1;",[21,1343,1344],{},"build_combinations(digits, 0, n, &first);",[17,1346,1347,1348,1351,1352,1354,1355,1357,1358,1360],{},"Arranca la recursión en la casilla 0 y le pasa ",[944,1349,1350],{},"la dirección"," de ",[21,1353,426],{}," con\n",[21,1356,208],{},". Sin el ",[21,1359,208],{},", la función recibiría una copia y el separador saldría mal a\npartir de la segunda combinación.",[900,1362,1364],{"id":1363},"put_charn",[21,1365,1366],{},"put_char('\\n');",[17,1368,1369],{},"Un salto al final, fuera de la recursión.",[100,1371,1373,1374],{"id":1372},"traza-de-n-2","Traza de ",[21,1375,1376],{},"n = 2",[33,1378,1379,1399],{},[36,1380,1381],{},[39,1382,1383,1386,1391,1396],{},[42,1384,1385],{},"Combinación",[42,1387,1388],{},[21,1389,1390],{},"digits[0]",[42,1392,1393],{},[21,1394,1395],{},"digits[1]",[42,1397,1398],{},"Salida",[49,1400,1401,1418,1436,1447,1464,1481,1491],{},[39,1402,1403,1405,1409,1413],{},[54,1404,202],{},[54,1406,1407],{},[21,1408,1156],{},[54,1410,1411],{},[21,1412,1117],{},[54,1414,1415],{},[21,1416,1417],{},"01",[39,1419,1420,1422,1426,1431],{},[54,1421,1079],{},[54,1423,1424],{},[21,1425,1156],{},[54,1427,1428],{},[21,1429,1430],{},"'2'",[54,1432,1433],{},[21,1434,1435],{},"02",[39,1437,1438,1441,1443,1445],{},[54,1439,1440],{},"…",[54,1442,1440],{},[54,1444,1440],{},[54,1446,1440],{},[39,1448,1449,1451,1455,1459],{},[54,1450,1110],{},[54,1452,1453],{},[21,1454,1156],{},[54,1456,1457],{},[21,1458,1092],{},[54,1460,1461],{},[21,1462,1463],{},"09",[39,1465,1466,1468,1472,1476],{},[54,1467,791],{},[54,1469,1470],{},[21,1471,1117],{},[54,1473,1474],{},[21,1475,1430],{},[54,1477,1478],{},[21,1479,1480],{},"12",[39,1482,1483,1485,1487,1489],{},[54,1484,1440],{},[54,1486,1440],{},[54,1488,1440],{},[54,1490,1440],{},[39,1492,1493,1496,1500,1504],{},[54,1494,1495],{},"45",[54,1497,1498],{},[21,1499,1086],{},[54,1501,1502],{},[21,1503,1092],{},[54,1505,1506],{},[21,1507,1508],{},"89",[17,1510,1511,1512,1514,1515,1517,1518,31],{},"Con ",[21,1513,1376],{},", la casilla 0 llega hasta ",[21,1516,1086],{}," y la 1 hasta ",[21,1519,1092],{},[100,1521,1523],{"id":1522},"cuántas-combinaciones-salen","Cuántas combinaciones salen",[33,1525,1526,1540],{},[36,1527,1528],{},[39,1529,1530,1534,1537],{},[42,1531,1532],{},[21,1533,23],{},[42,1535,1536],{},"Combinaciones",[42,1538,1539],{},"Ejemplo",[49,1541,1542,1553,1564,1575],{},[39,1543,1544,1546,1548],{},[54,1545,202],{},[54,1547,791],{},[54,1549,1550],{},[21,1551,1552],{},"0, 1, 2, …, 9",[39,1554,1555,1557,1559],{},[54,1556,1079],{},[54,1558,1495],{},[54,1560,1561],{},[21,1562,1563],{},"01, 02, …, 89",[39,1565,1566,1569,1572],{},[54,1567,1568],{},"3",[54,1570,1571],{},"120",[54,1573,1574],{},"igual que el ejercicio 05",[39,1576,1577,1579,1581],{},[54,1578,1110],{},[54,1580,791],{},[54,1582,1583,1586,1587],{},[21,1584,1585],{},"012345678"," … ",[21,1588,1589],{},"123456789",[17,1591,1592,1593,1596,1597,1599],{},"El número es ",[21,1594,1595],{},"10! \u002F (n! × (10 - n)!)",", las formas de elegir ",[21,1598,23],{}," dígitos entre 10.",[100,1601,1603],{"id":1602},"casos-límite","Casos límite",[33,1605,1606,1616],{},[36,1607,1608],{},[39,1609,1610,1613],{},[42,1611,1612],{},"Caso",[42,1614,1615],{},"Qué pasa",[49,1617,1618,1628,1637,1650],{},[39,1619,1620,1625],{},[54,1621,1622],{},[21,1623,1624],{},"n = 0",[54,1626,1627],{},"no se dibuja nada",[39,1629,1630,1635],{},[54,1631,1632],{},[21,1633,1634],{},"n = 10",[54,1636,1627],{},[39,1638,1639,1644],{},[54,1640,1641],{},[21,1642,1643],{},"n = 1",[54,1645,1646,1647],{},"los diez dígitos separados por ",[21,1648,1649],{},"\", \"",[39,1651,1652,1657],{},[54,1653,1654],{},[21,1655,1656],{},"n = 9",[54,1658,1659],{},"diez combinaciones de nueve cifras",[100,1661,1663],{"id":1662},"errores-típicos","Errores típicos",[33,1665,1666,1679],{},[36,1667,1668],{},[39,1669,1670,1673,1676],{},[42,1671,1672],{},"Mensaje o síntoma",[42,1674,1675],{},"Causa",[42,1677,1678],{},"Solución",[49,1680,1681,1697,1717,1731,1748],{},[39,1682,1683,1686,1692],{},[54,1684,1685],{},"sale el separador al principio",[54,1687,1688,1689,1691],{},"usaste ",[21,1690,1220],{}," al revés",[54,1693,1694,1695],{},"imprime si ",[21,1696,1224],{},[39,1698,1699,1705,1711],{},[54,1700,1701,1702,1704],{},"todas las combinaciones llevan ",[21,1703,1649],{}," delante",[54,1706,1707,1708,1710],{},"pasaste ",[21,1709,426],{}," por valor",[54,1712,1713,1714],{},"pasa ",[21,1715,1716],{},"&first",[39,1718,1719,1722,1725],{},[54,1720,1721],{},"combinaciones repetidas",[54,1723,1724],{},"la casilla no empieza en anterior + 1",[54,1726,1727,1728],{},"revisa ",[21,1729,1730],{},"digits[position - 1] + 1",[39,1732,1733,1738,1743],{},[54,1734,1735,1736],{},"se pasa de ",[21,1737,1092],{},[54,1739,1740,1741],{},"falta el tope ",[21,1742,1041],{},[54,1744,1745,1746],{},"calcula ",[21,1747,1041],{},[39,1749,1750,1755,1760],{},[54,1751,1752,1754],{},[21,1753,1656],{}," imprime basura",[54,1756,1757,1758],{},"array de tamaño ",[21,1759,23],{},[54,1761,1762,1763],{},"usa ",[21,1764,1765],{},"char digits[10]",[100,1767,1769],{"id":1768},"comprobarlo","Comprobarlo",[105,1771,1775],{"className":1772,"code":1773,"language":1774,"meta":110,"style":110},"language-sh shiki shiki-themes github-light github-dark","cat > \u002Ftmp\u002Fmain.c \u003C\u003C'EOF'\nvoid    ft_print_combn(int n);\n\nint main(void)\n{\n    ft_print_combn(2);\n    return (0);\n}\nEOF\ncc -Wall -Wextra -Werror ex08\u002Fft_print_combn.c \u002Ftmp\u002Fmain.c -o \u002Ftmp\u002Fex08\n\u002Ftmp\u002Fex08\n","sh",[21,1776,1777,1794,1799,1803,1808,1812,1817,1822,1826,1831,1856],{"__ignoreMap":110},[114,1778,1779,1782,1785,1788,1791],{"class":116,"line":117},[114,1780,1781],{"class":169},"cat",[114,1783,1784],{"class":120}," >",[114,1786,1787],{"class":124}," \u002Ftmp\u002Fmain.c",[114,1789,1790],{"class":120}," \u003C\u003C",[114,1792,1793],{"class":124},"'EOF'\n",[114,1795,1796],{"class":116,"line":128},[114,1797,1798],{"class":124},"void    ft_print_combn(int n);\n",[114,1800,1801],{"class":116,"line":135},[114,1802,132],{"emptyLinePlaceholder":131},[114,1804,1805],{"class":116,"line":142},[114,1806,1807],{"class":124},"int main(void)\n",[114,1809,1810],{"class":116,"line":148},[114,1811,190],{"class":124},[114,1813,1814],{"class":116,"line":154},[114,1815,1816],{"class":124},"    ft_print_combn(2);\n",[114,1818,1819],{"class":116,"line":160},[114,1820,1821],{"class":124},"    return (0);\n",[114,1823,1824],{"class":116,"line":187},[114,1825,222],{"class":124},[114,1827,1828],{"class":116,"line":193},[114,1829,1830],{"class":124},"EOF\n",[114,1832,1833,1836,1839,1842,1845,1848,1850,1853],{"class":116,"line":219},[114,1834,1835],{"class":169},"cc",[114,1837,1838],{"class":201}," -Wall",[114,1840,1841],{"class":201}," -Wextra",[114,1843,1844],{"class":201}," -Werror",[114,1846,1847],{"class":124}," ex08\u002Fft_print_combn.c",[114,1849,1787],{"class":124},[114,1851,1852],{"class":201}," -o",[114,1854,1855],{"class":124}," \u002Ftmp\u002Fex08\n",[114,1857,1858],{"class":116,"line":225},[114,1859,1860],{"class":169},"\u002Ftmp\u002Fex08\n",[17,1862,1863],{},"Salida:",[105,1865,1870],{"className":1866,"code":1868,"language":1869,"meta":110},[1867],"language-text","01, 02, 03, 04, 05, 06, 07, 08, 09, 12, 13, ..., 89\n","text",[21,1871,1868],{"__ignoreMap":110},[17,1873,1874,1875,957,1877,1879,1880,957,1882,1884],{},"Los puntos suspensivos abrevian; la salida real tiene las 45 combinaciones.\nPrueba también ",[21,1876,1643],{},[21,1878,1656],{},", y comprueba que ",[21,1881,1624],{},[21,1883,1634],{}," no imprimen\nnada ni se cuelgan.",[100,1886,1888],{"id":1887},"descargar","Descargar",[1890,1891,1892],"ul",{},[1893,1894,1895],"li",{},[1896,1897,1899],"a",{"href":1898,"download":71},"..\u002Fcode\u002Fft_print_combn.c",[21,1900,71],{},[1902,1903,1904],"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":110,"searchDepth":128,"depth":128,"links":1906},[1907,1908,1940,1942,1943,1944,1945,1946],{"id":102,"depth":128,"text":103},{"id":897,"depth":128,"text":898,"children":1909},[1910,1911,1912,1913,1915,1916,1917,1918,1920,1922,1923,1924,1925,1926,1928,1929,1930,1932,1933,1934,1935,1937,1939],{"id":902,"depth":135,"text":905},{"id":914,"depth":135,"text":917},{"id":927,"depth":135,"text":930},{"id":953,"depth":135,"text":1914},"int index; y while (index \u003C n)",{"id":969,"depth":135,"text":972},{"id":1029,"depth":135,"text":1032},{"id":1045,"depth":135,"text":1048},{"id":1143,"depth":135,"text":1919},"if (position == 0) \u002F digit = '0';",{"id":1159,"depth":135,"text":1921},"else \u002F digit = digits[position - 1] + 1;",{"id":1182,"depth":135,"text":1185},{"id":1191,"depth":135,"text":1194},{"id":1200,"depth":135,"text":1203},{"id":1209,"depth":135,"text":1212},{"id":1236,"depth":135,"text":1927},"put_char(','); y put_char(' ');",{"id":1248,"depth":135,"text":1251},{"id":1262,"depth":135,"text":1265},{"id":1271,"depth":135,"text":1931},"else \u002F build_combinations(digits, position + 1, n, first);",{"id":1037,"depth":135,"text":1287},{"id":1293,"depth":135,"text":1296},{"id":1302,"depth":135,"text":1305},{"id":1320,"depth":135,"text":1936},"if (n \u003C= 0 || n >= 10) \u002F return ;",{"id":1338,"depth":135,"text":1938},"first = 1; y build_combinations(digits, 0, n, &first);",{"id":1363,"depth":135,"text":1366},{"id":1372,"depth":128,"text":1941},"Traza de n = 2",{"id":1522,"depth":128,"text":1523},{"id":1602,"depth":128,"text":1603},{"id":1662,"depth":128,"text":1663},{"id":1768,"depth":128,"text":1769},{"id":1887,"depth":128,"text":1888},"Combinaciones de n dígitos con un array, un tope calculado y recursión.","md",{},"\u002Fex08",{"title":5,"description":1947},"ex08","s_3VaBr7yB0rx_OuqG9UtZQWDDPvJC2OtHXVradVLdw",1793539815759]