Nombre sans 0

Résolu/Fermé
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 - Modifié par Dayvid le 2/06/2013 à 14:56
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 - 26 sept. 2013 à 01:57
Bonjour à toutes et à tous,

Pour mon premier sujet, je souhaiterais vous demandez votre aide sur un problème qui m'est très compliquée, je suis nul en math et je débute juste dans VB.Net que je trouve superbe !

Je demande pas de faire à ma place, juste de m'aider à savoir comment my prendre pour réaliser se que je souhaiterais faire.

Voici mon problème qui est un vrais casse tête:

Je voudrait convertir un nombre quelconque depuis la base 10 (0123456789)
vers la base 9 mais sans le 0 (123456789)...

De plus, je souhaiterais que ceci soit réversible !
Voici un mini échantillon de nombre en base 10 convertie en base 9 sans 0:

1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
10 = 11
11 = 12
12 = 13
13 = 14
14 = 15
15 = 16
16 = 17
17 = 18
18 = 19
19 = 21
20 = 22
21 = 23
22 = 24
23 = 25
24 = 26
25 = 27
26 = 28
27 = 29
28 = 31
29 = 32
30 = 33
31 = 34
32 = 35
33 = 36
34 = 37
35 = 38
36 = 39
37 = 41
38 = 42
39 = 43
40 = 44
41 = 45
42 = 46
43 = 47
44 = 48
45 = 49
46 = 51
47 = 52
48 = 53
49 = 54
50 = 55
51 = 56
52 = 57
53 = 58
54 = 59
55 = 61
56 = 62
57 = 63
58 = 64
59 = 65
60 = 66
61 = 67
62 = 68
63 = 69
64 = 71
65 = 72
66 = 73
67 = 74
68 = 75
69 = 76
70 = 77
71 = 78
72 = 79
73 = 81
74 = 82
75 = 83
76 = 84
77 = 85
78 = 86
79 = 87
80 = 88
81 = 89
82 = 91
83 = 92
84 = 93
85 = 94
86 = 95
87 = 96
88 = 97
89 = 98
90 = 99
91 = 111
92 = 112
93 = 113
94 = 114
95 = 115
96 = 116
97 = 117
98 = 118
99 = 119
100 = 121
101 = 122
102 = 123
103 = 124
104 = 125
105 = 126
106 = 127
107 = 128
108 = 129
109 = 131
110 = 132
111 = 133
112 = 134
113 = 135
114 = 136
115 = 137
116 = 138
117 = 139
118 = 141
119 = 142
120 = 143
121 = 144
122 = 145
123 = 146
124 = 147
125 = 148
126 = 149
127 = 151
128 = 152
129 = 153
130 = 154
131 = 155
132 = 156
133 = 157
134 = 158
135 = 159
136 = 161
137 = 162
138 = 163
139 = 164
140 = 165
141 = 166
142 = 167
143 = 168
144 = 169
145 = 171
146 = 172
147 = 173
148 = 174
149 = 175
150 = 176
151 = 177
152 = 178
153 = 179
154 = 181
155 = 182
156 = 183
157 = 184
158 = 185
159 = 186
160 = 187
161 = 188
162 = 189
163 = 191
164 = 192
165 = 193
166 = 194
167 = 195
168 = 196
169 = 197
170 = 198
171 = 199
172 = 211
173 = 212
174 = 213
175 = 214
176 = 215
177 = 216
178 = 217
179 = 218
180 = 219
181 = 221
182 = 222
183 = 223
184 = 224
185 = 225
186 = 226
187 = 227
188 = 228
189 = 229
190 = 231
191 = 232
192 = 233
193 = 234
194 = 235
195 = 236
196 = 237
197 = 238
198 = 239
199 = 241
200 = 242
201 = 243
202 = 244
203 = 245
204 = 246
205 = 247
206 = 248
207 = 249
208 = 251
209 = 252
210 = 253
211 = 254
212 = 255
213 = 256
214 = 257
215 = 258
216 = 259
217 = 261
218 = 262
219 = 263
220 = 264
221 = 265
222 = 266
223 = 267
224 = 268
225 = 269
226 = 271
227 = 272
228 = 273
229 = 274
230 = 275
231 = 276
232 = 277
233 = 278
234 = 279
235 = 281
236 = 282
237 = 283
238 = 284
239 = 285
240 = 286
241 = 287
242 = 288
243 = 289
244 = 291
245 = 292
246 = 293
247 = 294
248 = 295
249 = 296
250 = 297
251 = 298
252 = 299
253 = 311
254 = 312
255 = 313
256 = 314
257 = 315
258 = 316
259 = 317
260 = 318
261 = 319
262 = 321
263 = 322
264 = 323
265 = 324
266 = 325
267 = 326
268 = 327
269 = 328
270 = 329
271 = 331
272 = 332
273 = 333
274 = 334
275 = 335
276 = 336
277 = 337
278 = 338
279 = 339
280 = 341
281 = 342
282 = 343
283 = 344
284 = 345
285 = 346
286 = 347
287 = 348
288 = 349
289 = 351
290 = 352
291 = 353
292 = 354
293 = 355
294 = 356
295 = 357
296 = 358
297 = 359
298 = 361
299 = 362
300 = 363
301 = 364
302 = 365
303 = 366
304 = 367
305 = 368
306 = 369
307 = 371
308 = 372
309 = 373
310 = 374
311 = 375
312 = 376
313 = 377
314 = 378
315 = 379
316 = 381
317 = 382
318 = 383
319 = 384
320 = 385
321 = 386
322 = 387
323 = 388
324 = 389
325 = 391
326 = 392
327 = 393
328 = 394
329 = 395
330 = 396
331 = 397
332 = 398
333 = 399
334 = 411
335 = 412
336 = 413
337 = 414
338 = 415
339 = 416
340 = 417
341 = 418
342 = 419
343 = 421
344 = 422
345 = 423
346 = 424
347 = 425
348 = 426
349 = 427
350 = 428
351 = 429
352 = 431
353 = 432
354 = 433
355 = 434
356 = 435
357 = 436
358 = 437
359 = 438
360 = 439
361 = 441
362 = 442
363 = 443
364 = 444
365 = 445
366 = 446
367 = 447
368 = 448
369 = 449
370 = 451
371 = 452
372 = 453
373 = 454
374 = 455
375 = 456
376 = 457
377 = 458
378 = 459
379 = 461
380 = 462
381 = 463
382 = 464
383 = 465
384 = 466
385 = 467
386 = 468
387 = 469
388 = 471
389 = 472
390 = 473
391 = 474
392 = 475
393 = 476
394 = 477
395 = 478
396 = 479
397 = 481
398 = 482
399 = 483
400 = 484
401 = 485
402 = 486
403 = 487
404 = 488
405 = 489
406 = 491
407 = 492
408 = 493
409 = 494
410 = 495
411 = 496
412 = 497
413 = 498
414 = 499
415 = 511
416 = 512
417 = 513
418 = 514
419 = 515
420 = 516
421 = 517
422 = 518
423 = 519
424 = 521
425 = 522
426 = 523
427 = 524
428 = 525
429 = 526
430 = 527
431 = 528
432 = 529
433 = 531
434 = 532
435 = 533
436 = 534
437 = 535
438 = 536
439 = 537
440 = 538
441 = 539
442 = 541
443 = 542
444 = 543
445 = 544
446 = 545
447 = 546
448 = 547
449 = 548
450 = 549
451 = 551
452 = 552
453 = 553
454 = 554
455 = 555
456 = 556
457 = 557
458 = 558
459 = 559
460 = 561
461 = 562
462 = 563
463 = 564
464 = 565
465 = 566
466 = 567
467 = 568
468 = 569
469 = 571
470 = 572
471 = 573
472 = 574
473 = 575
474 = 576
475 = 577
476 = 578
477 = 579
478 = 581
479 = 582
480 = 583
481 = 584
482 = 585
483 = 586
484 = 587
485 = 588
486 = 589
487 = 591
488 = 592
489 = 593
490 = 594
491 = 595
492 = 596
493 = 597
494 = 598
495 = 599
496 = 611
497 = 612
498 = 613
499 = 614
500 = 615
501 = 616
502 = 617
503 = 618
504 = 619
505 = 621
506 = 622
507 = 623
508 = 624
509 = 625
510 = 626
511 = 627
512 = 628
513 = 629
514 = 631
515 = 632
516 = 633
517 = 634
518 = 635
519 = 636
520 = 637
521 = 638
522 = 639
523 = 641
524 = 642
525 = 643
526 = 644
527 = 645
528 = 646
529 = 647
530 = 648
531 = 649
532 = 651
533 = 652
534 = 653
535 = 654
536 = 655
537 = 656
538 = 657
539 = 658
540 = 659
541 = 661
542 = 662
543 = 663
544 = 664
545 = 665
546 = 666
547 = 667
548 = 668
549 = 669
550 = 671
551 = 672
552 = 673
553 = 674
554 = 675
555 = 676
556 = 677
557 = 678
558 = 679
559 = 681
560 = 682
561 = 683
562 = 684
563 = 685
564 = 686
565 = 687
566 = 688
567 = 689
568 = 691
569 = 692
570 = 693
571 = 694
572 = 695
573 = 696
574 = 697
575 = 698
576 = 699
577 = 711
578 = 712
579 = 713
580 = 714
581 = 715
582 = 716
583 = 717
584 = 718
585 = 719
586 = 721
587 = 722
588 = 723
589 = 724
590 = 725
591 = 726
592 = 727
593 = 728
594 = 729
595 = 731
596 = 732
597 = 733
598 = 734
599 = 735
600 = 736
601 = 737
602 = 738
603 = 739
604 = 741
605 = 742
606 = 743
607 = 744
608 = 745
609 = 746
610 = 747
611 = 748
612 = 749
613 = 751
614 = 752
615 = 753
616 = 754
617 = 755
618 = 756
619 = 757
620 = 758
621 = 759
622 = 761
623 = 762
624 = 763
625 = 764
626 = 765
627 = 766
628 = 767
629 = 768
630 = 769
631 = 771
632 = 772
633 = 773
634 = 774
635 = 775
636 = 776
637 = 777
638 = 778
639 = 779
640 = 781
641 = 782
642 = 783
643 = 784
644 = 785
645 = 786
646 = 787
647 = 788
648 = 789
649 = 791
650 = 792
651 = 793
652 = 794
653 = 795
654 = 796
655 = 797
656 = 798
657 = 799
658 = 811
659 = 812
660 = 813
661 = 814
662 = 815
663 = 816
664 = 817
665 = 818
666 = 819
667 = 821
668 = 822
669 = 823
670 = 824
671 = 825
672 = 826
673 = 827
674 = 828
675 = 829
676 = 831
677 = 832
678 = 833
679 = 834
680 = 835
681 = 836
682 = 837
683 = 838
684 = 839
685 = 841
686 = 842
687 = 843
688 = 844
689 = 845
690 = 846
691 = 847
692 = 848
693 = 849
694 = 851
695 = 852
696 = 853
697 = 854
698 = 855
699 = 856
700 = 857
701 = 858
702 = 859
703 = 861
704 = 862
705 = 863
706 = 864
707 = 865
708 = 866
709 = 867
710 = 868
711 = 869
712 = 871
713 = 872
714 = 873
715 = 874
716 = 875
717 = 876
718 = 877
719 = 878
720 = 879
721 = 881
722 = 882
723 = 883
724 = 884
725 = 885
726 = 886
727 = 887
728 = 888
729 = 889
730 = 891
731 = 892
732 = 893
733 = 894
734 = 895
735 = 896
736 = 897
737 = 898
738 = 899
739 = 911
740 = 912
741 = 913
742 = 914
743 = 915
744 = 916
745 = 917
746 = 918
747 = 919
748 = 921
749 = 922
750 = 923
751 = 924
752 = 925
753 = 926
754 = 927
755 = 928
756 = 929
757 = 931
758 = 932
759 = 933
760 = 934
761 = 935
762 = 936
763 = 937
764 = 938
765 = 939
766 = 941
767 = 942
768 = 943
769 = 944
770 = 945
771 = 946
772 = 947
773 = 948
774 = 949
775 = 951
776 = 952
777 = 953
778 = 954
779 = 955
780 = 956
781 = 957
782 = 958
783 = 959
784 = 961
785 = 962
786 = 963
787 = 964
788 = 965
789 = 966
790 = 967
791 = 968
792 = 969
793 = 971
794 = 972
795 = 973
796 = 974
797 = 975
798 = 976
799 = 977
800 = 978
801 = 979
802 = 981
803 = 982
804 = 983
805 = 984
806 = 985
807 = 986
808 = 987
809 = 988
810 = 989
811 = 991
812 = 992
813 = 993
814 = 994
815 = 995
816 = 996
817 = 997
818 = 998
819 = 999
820 = 1111
821 = 1112
822 = 1113
823 = 1114
824 = 1115
825 = 1116
826 = 1117
827 = 1118
828 = 1119
829 = 1121
830 = 1122
831 = 1123
832 = 1124
833 = 1125
834 = 1126
835 = 1127
836 = 1128
837 = 1129
838 = 1131
839 = 1132
840 = 1133
841 = 1134
842 = 1135
843 = 1136
844 = 1137
845 = 1138
846 = 1139
847 = 1141
848 = 1142
849 = 1143
850 = 1144
851 = 1145
852 = 1146
853 = 1147
854 = 1148
855 = 1149
856 = 1151
857 = 1152
858 = 1153
859 = 1154
860 = 1155
861 = 1156
862 = 1157
863 = 1158
864 = 1159
865 = 1161
866 = 1162
867 = 1163
868 = 1164
869 = 1165
870 = 1166
871 = 1167
872 = 1168
873 = 1169
874 = 1171
875 = 1172
876 = 1173
877 = 1174
878 = 1175
879 = 1176
880 = 1177
881 = 1178
882 = 1179
883 = 1181
884 = 1182
885 = 1183
886 = 1184
887 = 1185
888 = 1186
889 = 1187
890 = 1188
891 = 1189
892 = 1191
893 = 1192
894 = 1193
895 = 1194
896 = 1195
897 = 1196
898 = 1197
899 = 1198
900 = 1199
901 = 1211
902 = 1212
903 = 1213
904 = 1214
905 = 1215
906 = 1216
907 = 1217
908 = 1218
909 = 1219
910 = 1221
911 = 1222
912 = 1223
913 = 1224
914 = 1225
915 = 1226
916 = 1227
917 = 1228
918 = 1229
919 = 1231
920 = 1232
921 = 1233
922 = 1234
923 = 1235
924 = 1236
925 = 1237
926 = 1238
927 = 1239
928 = 1241
929 = 1242
930 = 1243
931 = 1244
932 = 1245
933 = 1246
934 = 1247
935 = 1248
936 = 1249
937 = 1251
938 = 1252
939 = 1253
940 = 1254
941 = 1255
942 = 1256
943 = 1257
944 = 1258
945 = 1259
946 = 1261
947 = 1262
948 = 1263
949 = 1264
950 = 1265
951 = 1266
952 = 1267
953 = 1268
954 = 1269
955 = 1271
956 = 1272
957 = 1273
958 = 1274
959 = 1275
960 = 1276
961 = 1277
962 = 1278
963 = 1279
964 = 1281
965 = 1282
966 = 1283
967 = 1284
968 = 1285
969 = 1286
970 = 1287
971 = 1288
972 = 1289
973 = 1291
974 = 1292
975 = 1293
976 = 1294
977 = 1295
978 = 1296
979 = 1297
980 = 1298
981 = 1299
982 = 1311
983 = 1312
984 = 1313
985 = 1314
986 = 1315
987 = 1316
988 = 1317
989 = 1318
990 = 1319
991 = 1321
992 = 1322
993 = 1323
994 = 1324
995 = 1325
996 = 1326
997 = 1327
998 = 1328
999 = 1329
1000 = 1331
1001 = 1332
1002 = 1333
1003 = 1334
1004 = 1335
1005 = 1336
1006 = 1337
1007 = 1338
1008 = 1339
1009 = 1341
1010 = 1342
1011 = 1343
1012 = 1344
1013 = 1345
1014 = 1346
1015 = 1347
1016 = 1348
1017 = 1349
1018 = 1351
1019 = 1352
1020 = 1353
1021 = 1354
1022 = 1355
1023 = 1356
1024 = 1357
1025 = 1358
1026 = 1359
1027 = 1361
1028 = 1362
1029 = 1363
1030 = 1364
1031 = 1365
1032 = 1366
1033 = 1367
1034 = 1368
1035 = 1369
1036 = 1371
1037 = 1372
1038 = 1373
1039 = 1374
1040 = 1375
1041 = 1376
1042 = 1377
1043 = 1378
1044 = 1379
1045 = 1381
1046 = 1382
1047 = 1383
1048 = 1384
1049 = 1385
1050 = 1386
1051 = 1387
1052 = 1388
1053 = 1389
1054 = 1391
1055 = 1392
1056 = 1393
1057 = 1394
1058 = 1395
1059 = 1396
1060 = 1397
1061 = 1398
1062 = 1399
1063 = 1411
1064 = 1412
1065 = 1413
1066 = 1414
1067 = 1415
1068 = 1416
1069 = 1417
1070 = 1418
1071 = 1419
1072 = 1421
1073 = 1422
1074 = 1423
1075 = 1424
1076 = 1425
1077 = 1426
1078 = 1427
1079 = 1428
1080 = 1429
1081 = 1431
1082 = 1432
1083 = 1433
1084 = 1434
1085 = 1435
1086 = 1436
1087 = 1437
1088 = 1438
1089 = 1439
1090 = 1441
1091 = 1442
1092 = 1443
1093 = 1444
1094 = 1445
1095 = 1446
1096 = 1447
1097 = 1448
1098 = 1449
1099 = 1451
1100 = 1452
1101 = 1453
1102 = 1454
1103 = 1455
1104 = 1456
1105 = 1457
1106 = 1458
1107 = 1459
1108 = 1461
1109 = 1462
1110 = 1463
1111 = 1464
1112 = 1465
1113 = 1466
1114 = 1467
1115 = 1468
1116 = 1469
1117 = 1471
1118 = 1472
1119 = 1473
1120 = 1474
1121 = 1475
1122 = 1476
1123 = 1477
1124 = 1478
1125 = 1479
1126 = 1481
1127 = 1482
1128 = 1483
1129 = 1484
1130 = 1485
1131 = 1486
1132 = 1487
1133 = 1488
1134 = 1489
1135 = 1491
1136 = 1492
1137 = 1493
1138 = 1494
1139 = 1495
1140 = 1496
1141 = 1497
1142 = 1498
1143 = 1499
1144 = 1511
1145 = 1512
1146 = 1513
1147 = 1514
1148 = 1515
1149 = 1516
1150 = 1517
1151 = 1518
1152 = 1519
1153 = 1521
1154 = 1522
1155 = 1523
1156 = 1524
1157 = 1525
1158 = 1526
1159 = 1527
1160 = 1528
1161 = 1529
1162 = 1531
1163 = 1532
1164 = 1533
1165 = 1534
1166 = 1535
1167 = 1536
1168 = 1537
1169 = 1538
1170 = 1539
1171 = 1541
1172 = 1542
1173 = 1543
1174 = 1544
1175 = 1545
1176 = 1546
1177 = 1547
1178 = 1548
1179 = 1549
1180 = 1551
1181 = 1552
1182 = 1553
1183 = 1554
1184 = 1555
1185 = 1556
1186 = 1557
1187 = 1558
1188 = 1559
1189 = 1561
1190 = 1562
1191 = 1563
1192 = 1564
1193 = 1565
1194 = 1566
1195 = 1567
1196 = 1568
1197 = 1569
1198 = 1571
1199 = 1572
1200 = 1573
1201 = 1574
1202 = 1575
1203 = 1576
1204 = 1577
1205 = 1578
1206 = 1579
1207 = 1581
1208 = 1582
1209 = 1583
1210 = 1584
1211 = 1585
1212 = 1586
1213 = 1587
1214 = 1588
1215 = 1589
1216 = 1591
1217 = 1592
1218 = 1593
1219 = 1594
1220 = 1595
1221 = 1596
1222 = 1597
1223 = 1598
1224 = 1599
1225 = 1611
1226 = 1612
1227 = 1613
1228 = 1614
1229 = 1615
1230 = 1616
1231 = 1617
1232 = 1618
1233 = 1619
1234 = 1621
1235 = 1622
1236 = 1623
1237 = 1624
1238 = 1625
1239 = 1626
1240 = 1627
1241 = 1628
1242 = 1629
1243 = 1631
1244 = 1632
1245 = 1633
1246 = 1634
1247 = 1635
1248 = 1636
1249 = 1637
1250 = 1638
1251 = 1639
1252 = 1641
1253 = 1642
1254 = 1643
1255 = 1644
1256 = 1645
1257 = 1646
1258 = 1647
1259 = 1648
1260 = 1649
1261 = 1651
1262 = 1652
1263 = 1653
1264 = 1654
1265 = 1655
1266 = 1656
1267 = 1657
1268 = 1658
1269 = 1659
1270 = 1661
1271 = 1662
1272 = 1663
1273 = 1664
1274 = 1665
1275 = 1666
1276 = 1667
1277 = 1668
1278 = 1669
1279 = 1671
1280 = 1672
1281 = 1673
1282 = 1674
1283 = 1675
1284 = 1676
1285 = 1677
1286 = 1678
1287 = 1679
1288 = 1681
1289 = 1682
1290 = 1683
1291 = 1684
1292 = 1685
1293 = 1686
1294 = 1687
1295 = 1688
1296 = 1689
1297 = 1691
1298 = 1692
1299 = 1693
1300 = 1694
1301 = 1695
1302 = 1696
1303 = 1697
1304 = 1698
1305 = 1699
1306 = 1711
1307 = 1712
1308 = 1713
1309 = 1714
1310 = 1715
1311 = 1716
1312 = 1717
1313 = 1718
1314 = 1719
1315 = 1721
1316 = 1722
1317 = 1723
1318 = 1724
1319 = 1725
1320 = 1726
1321 = 1727
1322 = 1728
1323 = 1729
1324 = 1731
1325 = 1732
1326 = 1733
1327 = 1734
1328 = 1735
1329 = 1736
1330 = 1737
1331 = 1738
1332 = 1739
1333 = 1741
1334 = 1742
1335 = 1743
1336 = 1744
1337 = 1745
1338 = 1746
1339 = 1747
1340 = 1748
1341 = 1749
1342 = 1751
1343 = 1752
1344 = 1753
1345 = 1754
1346 = 1755
1347 = 1756
1348 = 1757
1349 = 1758
1350 = 1759
1351 = 1761
1352 = 1762
1353 = 1763
1354 = 1764
1355 = 1765
1356 = 1766
1357 = 1767
1358 = 1768
1359 = 1769
1360 = 1771
1361 = 1772
1362 = 1773
1363 = 1774
1364 = 1775
1365 = 1776
1366 = 1777
1367 = 1778
1368 = 1779
1369 = 1781
1370 = 1782
1371 = 1783
1372 = 1784
1373 = 1785
1374 = 1786
1375 = 1787
1376 = 1788
1377 = 1789
1378 = 1791
1379 = 1792
1380 = 1793
1381 = 1794
1382 = 1795
1383 = 1796
1384 = 1797
1385 = 1798
1386 = 1799
1387 = 1811
1388 = 1812
1389 = 1813
1390 = 1814
1391 = 1815
1392 = 1816
1393 = 1817
1394 = 1818
1395 = 1819
1396 = 1821
1397 = 1822
1398 = 1823
1399 = 1824
1400 = 1825
1401 = 1826
1402 = 1827
1403 = 1828
1404 = 1829
1405 = 1831
1406 = 1832
1407 = 1833
1408 = 1834
1409 = 1835
1410 = 1836
1411 = 1837
1412 = 1838
1413 = 1839
1414 = 1841
1415 = 1842
1416 = 1843
1417 = 1844
1418 = 1845
1419 = 1846
1420 = 1847
1421 = 1848
1422 = 1849
1423 = 1851
1424 = 1852
1425 = 1853
1426 = 1854
1427 = 1855
1428 = 1856
1429 = 1857
1430 = 1858
1431 = 1859
1432 = 1861
1433 = 1862
1434 = 1863
1435 = 1864
1436 = 1865
1437 = 1866
1438 = 1867
1439 = 1868
1440 = 1869
1441 = 1871
1442 = 1872
1443 = 1873
1444 = 1874
1445 = 1875
1446 = 1876
1447 = 1877
1448 = 1878
1449 = 1879
1450 = 1881
1451 = 1882
1452 = 1883
1453 = 1884
1454 = 1885
1455 = 1886
1456 = 1887
1457 = 1888
1458 = 1889
1459 = 1891
1460 = 1892
1461 = 1893
1462 = 1894
1463 = 1895
1464 = 1896
1465 = 1897
1466 = 1898
1467 = 1899
1468 = 1911
1469 = 1912
1470 = 1913
1471 = 1914
1472 = 1915
1473 = 1916
1474 = 1917
1475 = 1918
1476 = 1919
1477 = 1921
1478 = 1922
1479 = 1923
1480 = 1924
1481 = 1925
1482 = 1926
1483 = 1927
1484 = 1928
1485 = 1929
1486 = 1931
1487 = 1932
1488 = 1933
1489 = 1934
1490 = 1935
1491 = 1936
1492 = 1937
1493 = 1938
1494 = 1939
1495 = 1941
1496 = 1942
1497 = 1943
1498 = 1944
1499 = 1945
1500 = 1946
1501 = 1947
1502 = 1948
1503 = 1949
1504 = 1951
1505 = 1952
1506 = 1953
1507 = 1954
1508 = 1955
1509 = 1956
1510 = 1957
1511 = 1958
1512 = 1959
1513 = 1961
1514 = 1962
1515 = 1963
1516 = 1964
1517 = 1965
1518 = 1966
1519 = 1967
1520 = 1968
1521 = 1969
1522 = 1971
1523 = 1972
1524 = 1973
1525 = 1974
1526 = 1975
1527 = 1976
1528 = 1977
1529 = 1978
1530 = 1979
1531 = 1981
1532 = 1982
1533 = 1983
1534 = 1984
1535 = 1985
1536 = 1986
1537 = 1987
1538 = 1988
1539 = 1989
1540 = 1991
1541 = 1992
1542 = 1993
1543 = 1994
1544 = 1995
1545 = 1996
1546 = 1997
1547 = 1998
1548 = 1999
1549 = 2111
1550 = 2112
1551 = 2113
1552 = 2114
1553 = 2115
1554 = 2116
1555 = 2117
1556 = 2118
1557 = 2119
1558 = 2121
1559 = 2122
1560 = 2123
1561 = 2124
1562 = 2125
1563 = 2126
1564 = 2127
1565 = 2128
1566 = 2129
1567 = 2131
1568 = 2132
1569 = 2133
1570 = 2134
1571 = 2135
1572 = 2136
1573 = 2137
1574 = 2138
1575 = 2139
1576 = 2141
1577 = 2142
1578 = 2143
1579 = 2144
1580 = 2145
1581 = 2146
1582 = 2147
1583 = 2148
1584 = 2149
1585 = 2151
1586 = 2152
1587 = 2153
1588 = 2154
1589 = 2155
1590 = 2156
1591 = 2157
1592 = 2158
1593 = 2159
1594 = 2161
1595 = 2162
1596 = 2163
1597 = 2164
1598 = 2165
1599 = 2166
1600 = 2167
1601 = 2168
1602 = 2169
1603 = 2171
1604 = 2172
1605 = 2173
1606 = 2174
1607 = 2175
1608 = 2176
1609 = 2177
1610 = 2178
1611 = 2179
1612 = 2181
1613 = 2182
1614 = 2183
1615 = 2184
1616 = 2185
1617 = 2186
1618 = 2187
1619 = 2188
1620 = 2189
1621 = 2191
1622 = 2192
1623 = 2193
1624 = 2194
1625 = 2195
1626 = 2196
1627 = 2197
1628 = 2198
1629 = 2199
1630 = 2211
1631 = 2212
1632 = 2213
1633 = 2214
1634 = 2215
1635 = 2216
1636 = 2217
1637 = 2218
1638 = 2219
1639 = 2221
1640 = 2222
1641 = 2223
1642 = 2224
1643 = 2225
1644 = 2226
1645 = 2227
1646 = 2228
1647 = 2229
1648 = 2231
1649 = 2232
1650 = 2233
1651 = 2234
1652 = 2235
1653 = 2236
1654 = 2237
1655 = 2238
1656 = 2239
1657 = 2241
1658 = 2242
1659 = 2243
1660 = 2244
1661 = 2245
1662 = 2246
1663 = 2247
1664 = 2248
1665 = 2249
1666 = 2251
1667 = 2252
1668 = 2253
1669 = 2254
1670 = 2255
1671 = 2256
1672 = 2257
1673 = 2258
1674 = 2259
1675 = 2261
1676 = 2262
1677 = 2263
1678 = 2264
1679 = 2265
1680 = 2266
1681 = 2267
1682 = 2268
1683 = 2269
1684 = 2271
1685 = 2272
1686 = 2273
1687 = 2274
1688 = 2275
1689 = 2276
1690 = 2277
1691 = 2278
1692 = 2279
1693 = 2281
1694 = 2282
1695 = 2283
1696 = 2284
1697 = 2285
1698 = 2286
1699 = 2287
1700 = 2288
1701 = 2289
1702 = 2291
1703 = 2292
1704 = 2293
1705 = 2294
1706 = 2295
1707 = 2296
1708 = 2297
1709 = 2298
1710 = 2299
1711 = 2311
1712 = 2312
1713 = 2313
1714 = 2314
1715 = 2315
1716 = 2316
1717 = 2317
1718 = 2318
1719 = 2319
1720 = 2321
1721 = 2322
1722 = 2323
1723 = 2324
1724 = 2325
1725 = 2326
1726 = 2327
1727 = 2328
1728 = 2329
1729 = 2331
1730 = 2332
1731 = 2333
1732 = 2334
1733 = 2335
1734 = 2336
1735 = 2337
1736 = 2338
1737 = 2339
1738 = 2341
1739 = 2342
1740 = 2343
1741 = 2344
1742 = 2345
1743 = 2346
1744 = 2347
1745 = 2348
1746 = 2349
1747 = 2351
1748 = 2352
1749 = 2353
1750 = 2354
1751 = 2355
1752 = 2356
1753 = 2357
1754 = 2358
1755 = 2359
1756 = 2361
1757 = 2362
1758 = 2363
1759 = 2364
1760 = 2365
1761 = 2366
1762 = 2367
1763 = 2368
1764 = 2369
1765 = 2371
1766 = 2372
1767 = 2373
1768 = 2374
1769 = 2375
1770 = 2376
1771 = 2377
1772 = 2378
1773 = 2379
1774 = 2381
1775 = 2382
1776 = 2383
1777 = 2384
1778 = 2385
1779 = 2386
1780 = 2387
1781 = 2388
1782 = 2389
1783 = 2391
1784 = 2392
1785 = 2393
1786 = 2394
1787 = 2395
1788 = 2396
1789 = 2397
1790 = 2398
1791 = 2399
1792 = 2411
1793 = 2412
1794 = 2413
1795 = 2414
1796 = 2415
1797 = 2416
1798 = 2417
1799 = 2418
1800 = 2419
1801 = 2421
1802 = 2422
1803 = 2423
1804 = 2424
1805 = 2425
1806 = 2426
1807 = 2427
1808 = 2428
1809 = 2429
1810 = 2431
1811 = 2432
1812 = 2433
1813 = 2434
1814 = 2435
1815 = 2436
1816 = 2437
1817 = 2438
1818 = 2439
1819 = 2441
1820 = 2442
1821 = 2443
1822 = 2444
1823 = 2445
1824 = 2446
1825 = 2447
1826 = 2448
1827 = 2449
1828 = 2451
1829 = 2452
1830 = 2453
1831 = 2454
1832 = 2455
1833 = 2456
1834 = 2457
1835 = 2458
1836 = 2459
1837 = 2461
1838 = 2462
1839 = 2463
1840 = 2464
1841 = 2465
1842 = 2466
1843 = 2467
1844 = 2468
1845 = 2469
1846 = 2471
1847 = 2472
1848 = 2473
1849 = 2474
1850 = 2475
1851 = 2476
1852 = 2477
1853 = 2478
1854 = 2479
1855 = 2481
1856 = 2482
1857 = 2483
1858 = 2484
1859 = 2485
1860 = 2486
1861 = 2487
1862 = 2488
1863 = 2489
1864 = 2491
1865 = 2492
1866 = 2493
1867 = 2494
1868 = 2495
1869 = 2496
1870 = 2497
1871 = 2498
1872 = 2499
1873 = 2511
1874 = 2512
1875 = 2513
1876 = 2514
1877 = 2515
1878 = 2516
1879 = 2517
1880 = 2518
1881 = 2519
1882 = 2521
1883 = 2522
1884 = 2523
1885 = 2524
1886 = 2525
1887 = 2526
1888 = 2527
1889 = 2528
1890 = 2529
1891 = 2531
1892 = 2532
1893 = 2533
1894 = 2534
1895 = 2535
1896 = 2536
1897 = 2537
1898 = 2538
1899 = 2539
1900 = 2541
1901 = 2542
1902 = 2543
1903 = 2544
1904 = 2545
1905 = 2546
1906 = 2547
1907 = 2548
1908 = 2549
1909 = 2551
1910 = 2552
1911 = 2553
1912 = 2554
1913 = 2555
1914 = 2556
1915 = 2557
1916 = 2558
1917 = 2559
1918 = 2561
1919 = 2562
1920 = 2563
1921 = 2564
1922 = 2565
1923 = 2566
1924 = 2567
1925 = 2568
1926 = 2569
1927 = 2571
1928 = 2572
1929 = 2573
1930 = 2574
1931 = 2575
1932 = 2576
1933 = 2577
1934 = 2578
1935 = 2579
1936 = 2581
1937 = 2582
1938 = 2583
1939 = 2584
1940 = 2585
1941 = 2586
1942 = 2587
1943 = 2588
1944 = 2589
1945 = 2591
1946 = 2592
1947 = 2593
1948 = 2594
1949 = 2595
1950 = 2596
1951 = 2597
1952 = 2598
1953 = 2599
1954 = 2611
1955 = 2612
1956 = 2613
1957 = 2614
1958 = 2615
1959 = 2616
1960 = 2617
1961 = 2618
1962 = 2619
1963 = 2621
1964 = 2622
1965 = 2623
1966 = 2624
1967 = 2625
1968 = 2626
1969 = 2627
1970 = 2628
1971 = 2629
1972 = 2631
1973 = 2632
1974 = 2633
1975 = 2634
1976 = 2635
1977 = 2636
1978 = 2637
1979 = 2638
1980 = 2639
1981 = 2641
1982 = 2642
1983 = 2643
1984 = 2644
1985 = 2645
1986 = 2646
1987 = 2647
1988 = 2648
1989 = 2649
1990 = 2651
1991 = 2652
1992 = 2653
1993 = 2654
1994 = 2655
1995 = 2656
1996 = 2657
1997 = 2658
1998 = 2659
1999 = 2661
2000 = 2662
2001 = 2663
2002 = 2664
2003 = 2665
2004 = 2666
...

Je voudrait faire cette algorithme en VB.Net, je souhaiterais également que cet
algorithme soit le plus efficace possible étang donner que celui-ci va devoir convertir des millions de nombres en le moins de temps possible, les nombres serons toujours positif et serons parfois très grand, minimum un Int64, mais si je peut gérer les BigInteger, se serais encore bien mieux !

Pourquoi je veux faire ça ?!
Je ne souhaite pas en dire d'avantage sur le sujet car je souhaiterais garder ça
secret pour le moment et en espèrent sincèrement que vous ne m'en tiendrait pas rigueur.

Je vous remercie par avance de votre attention.
Cordialement.



Le respect n'est pas une option mais une obligation !
Restons cool: politesse, patience et indulgence sont indispensable !

16 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 juin 2013 à 20:39
Je ne parle pas VB.NET, alors j'ai fait un code Java, mais j'ai utilisé des choses très simples, qui se retrouvent dans la plupart des langages...

Voici comment passer de la base 10 à l'écriture sans 0.
Ce n'est pas vraiment optimisé, mais ce n'est pas très lourd non plus...

public static long transformer(long entier)
{
    // À toutes les dizaines on est décalé d'une unité, ça donne une retenue
    long retenue = (entier-1)/9;
    
    // on ajoute la retenue au résultat
    long resultat = entier+retenue;
    
    // Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc. Sans oublier qu'à chaque fois qu'on ajoute une retenue celle-ci décale le résultat, il faut donc calculer aussi la retenue de la retenue !
    
    // 1 = unités, 10 = dizaines, 100 = centaines...
    int rang = 1;
    
    // on s'arrête quand il n'y a plus de retenue à ajouter
    while (retenue > 0)
    {
        // nouvelle retenue à ajouter
        retenue = (10*rang)*((retenue-1)/(9*rang));
        
        // ajout de la retenue
        resultat += retenue;
        
        // passage au rang suivant
        rang *= 10;
    }
    
    return resultat; // résultat correct
}

Remarque : ce code est correct pour n'importe quel entier, du plus petit au plus grand, et est tout à fait transposable à des BigInteger.

Pour l'algorithme dans l'autre sens il faut enlever toutes les retenues que l'on a ajouté ici, en faisant un raisonnement comparable.
3
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
2 juin 2013 à 20:58
Merci KX, ton code m'a l'air simple et je crois que j'ai plus ou moins compris
Enfin plus ou moins...

S'il te plais, peut tu me faire la chose inverses, merci encore !
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
Modifié par Dayvid le 2/06/2013 à 22:53
Voilà, j'ai travaillé et j'ai convertie ton code KX en VB.Net
Et je dois dire que ça à été très facile en faite ^^

Function Transformer(ByVal Int64 As Int64) As Int64

        ' À toutes les dizaines on est décalé d'une unité, ça donne une retenue
        Dim retenue As Int64 = (Int64 - 1) \ 9

        ' On ajoute la retenue au résultat
        Dim resultat As Int64 = Int64 + retenue

        ' Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
        ' tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.
        ' Sans oublier qu'à chaque fois qu'on ajoute une retenue celle-ci décale le résultat, il faut donc
        ' calculer aussi la retenue de la retenue !

        ' 1 = unités, 10 = dizaines, 100 = centaines...

        Dim rang As Int64 = 1

        ' On s'arrête quand il n'y a plus de retenue à ajouter
        While retenue > 0

            ' Nouvelle retenue à ajouter
            retenue = (10 * rang) * ((retenue - 1) \ (9 * rang))

            ' Ajout de la retenue
            resultat += retenue

            ' Passage au rang suivant
            rang *= 10
        End While

        Return resultat ' Résultat correct

    End Function

Maintenant il faut juste que je comprenne mais c'est un peut se que j'avais fais sur la feuille de papier sauf que moi j'avais oublier des trucs et donc ça marchais pas ^^

Alors simplement un grand merci à toi KX, et de plus, ça me fais marrer
le premier code du gars, certes, code court mais incompréhensible ^^

Là, je peux comprendre le code car il est très simple ^^
Je vais essayer de faire travaillé mes méninges pour faire l'algo inverses maintenant que j'ai vue comment tu as fais ^^

ryko1820, ton code à l'air sympa ^^
Merci !

Le respect n'est pas une option mais une obligation !
Restons cool: politesse, patience et indulgence sont indispensable !
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
2 juin 2013 à 23:08
Après test, j'en reviens pas !!!
Cet algo est environ 9 fois plus rapide que le premier que j'ai donner !

Le premier, environ 18 secondes avec mon PC et là seulement 2 !
Bien jouer ! ^^

Merci beaucoup ^^
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019 > Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013
2 juin 2013 à 23:53
Ce n'est pas étonnant, le premier faisant des calculs lourds (logarithmes, puissances), qui prennent du temps à s'effectuer. En plus ils sont soumis à des problèmes de précisions, l'algorithme aurait pu donner des résultats faux pour de grands nombres à cause des arrondis.
Sans parler de ce "Enumerable.Range(0, m).Sum..." je ne sais pas ce que c'est censé faire, mais ça a l'air compliqué ^^
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2 > Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013
3 juin 2013 à 00:14
Ok ^^, je vais se suite essayer de comprendre et d'appliquer ton code sur papier, ça m'entrainera et puis comme ça je pourrais peut être arriver à faire l'inverse ^^

Je te tien au courent.
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
2 juin 2013 à 16:38
D'un point de vue algébrique ta deuxième colonne ne peux pas être considéré comme une base numérique. Si tu es "nul en math" je ne vais pas détailler pourquoi, mais d'un point de vue du vocabulaire n'utilise pas le terme de "base 9", c'est faux.

Ensuite, si tu veux de l'efficacité dans tes résultats, il ne faut pas réfléchir en conversion base 10 → "base 9", puisque la base 10 n'est de de toute façon pas naturelle pour l'ordinateur, il faut directement réfléchir en base 2, pour les deux colonnes de ton tableau, et déterminer quelles opérations binaires permettent de passer d'une colonne à l'autre.

 1 : 00001	00001 :  1
 2 : 00010	00010 :  2
 3 : 00011	00011 :  3
 4 : 00100	00100 :  4
 5 : 00101	00101 :  5
 6 : 00110	00110 :  6
 7 : 00111	00111 :  7
 8 : 01000	01000 :  8
 9 : 01001	01001 :  9
10 : 01010	01011 : 11
11 : 01011	01100 : 12
12 : 01100	01101 : 13
13 : 01101	01110 : 14
14 : 01110	01111 : 15
15 : 01111	10000 : 16
16 : 10000	10001 : 17
17 : 10001	10010 : 18
18 : 10010	10011 : 19
19 : 10011	10101 : 21
20 : 10100	10110 : 22
21 : 10101	10111 : 23
22 : 10110	11000 : 24
23 : 10111	11001 : 25
24 : 11000	11010 : 26
25 : 11001	11011 : 27
26 : 11010	11100 : 28
27 : 11011	11101 : 29
28 : 11100	11111 : 31

Après, je pense que des outils d'intelligence artificielle (un perceptron par exemple) permettraient de rapidement déterminer des relations simples entre les bits de chacune des deux colonnes. Il faudrait fouiller internet pour trouver un outil déjà prêt où tu n'as plus qu'à amorcer la phase d'apprentissage et recueillir les résultats.
2
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 2/06/2013 à 17:18
Hello,

Heureusement que tu as pas mis tous les chiffres sinon on avait pas fini :)

Bon comme source de l' "algorithme" je me suis servi de Wikipedia
Ca fonctionne pour toute les bases mais quand il y a des lettres (Hexadécimal par exemple) c'est plus compliqué ...

Ce que je me demande c'est comment tu as fait si tu ne sais pas faire ? Tableau Excel ?

...

Pour passer d'un nombre K en base décimale à un nombre en base N

a/ on divise successivement K/N=D (On ne garde que la partie entière de D (pas ce qu'il y a après la virgule)) ...

Exemple avec 2004 :

Opé 1 : 2004/9=222

/!\ A chaque fois on garde
les "restes" de chaque division (les modulo !) car ce sont eux qui vont servir à faire le chiffre en base 9 à la fin
(Modulo Opé 1=6) (ou ((222*9)+6)=2004)

b/ On teste si D (Le résultat) >= N alors K=D et on revient à l'étape a/ (On ne garde pas le résultat qui ne sert pas sauf pour le test)

Opé 2 : 222/9=24 Comme (D >= N) alors on revient à a/ (Modulo Opé 2=6)(ou ((24*9)+6)=222)

Opé 3 : 24/9=2 là D<N alors on garde le résultat et on passe à c/ (Modulo Opé 3=6)(ou ((2*9)+6)=24)

c/ Puis on concatene le dernier résultat avec les modulos de chaque opé en commençant par la fin

Résultat Opé 3 & Modulo Opé 3 & Modulo Opé 2 & Modulo Opé 1
2 & 6 & 6 & 6

2004 en base 9 donne 2666

Pour reconvertir de la base N vers 10 (Plus simple encore ...)

Pour tout chiffre c de rang r dans K, on calcule c×N^r
On incrémente un "r" depuis la droite vers la gauche (en commençant à 0)

Par exemple pour 2666 en base 9 (9 est notre N) :

= (2x(N^r (4eme rang)) + (6x(N^r (3eme rang)) + (6x(N^r (2eme rang)) + (6x(N^r (1er rang))

= (2x(9^3)) + (6x(9^2)) + (6x(9^1)) + (6x(9^0))

= (2x729) + (6x81) + (6x9) + (6x1)

= 1458 + 486 + 54 + 6

= 2004


J'espère que c'est clair, normalement avec cet exemple et celui de wikipedia tu à les armes pour t'en sortir ...

Bon courage :)
1
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
2 juin 2013 à 22:19
Pour voir si ça marchait je l'ai codé et le fait est que j'ai dis une connerie :) en b/ on garde le résultat car on doit le diviser pour l'opération suivante.
0
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
Modifié par ryko1820 le 2/06/2013 à 22:28
Hello,

En suivant mon algorithme (trouvé sur wiki) pour la conversion.
Je fais pas de VB.Net et en C ça aurait été un peu facile, alors j'ai fait du vbscript, freestyle :)

Un copié/collé dans un fichier texte renomé en .vbs et ça doit marcher, mais y'a pas de contrôle.

Dim nbToConvert, baseToconvertIn, myArrResult(3), myModuloMem(1024), i, j, myResult

nbToConvert=InputBox("Enter your number in base 10")
baseToconvertIn=InputBox("Enter base")

nbToConvert=(nbToConvert-0) 'Conversion en chiffre ;)
baseToconvertIn=(baseToconvertIn-0)

i=0
j=0

Call divideAndSee(nbToConvert,baseToconvertIn)

function Main(MyArrResult)
 myModuloMem(i)=myArrResult(2)
 i=i+1
 if (myArrResult(0)=0) Then
  nbToConvert=myArrResult(1)
  Call divideAndSee(nbToConvert,baseToconvertIn)
 Else
  myResult=Cstr(myArrResult(1))
  For j=i to 0 Step -1
      myResult=myResult & myModuloMem(j)
  Next
 End If
End Function

wscript.echo ("Resultat = " & myResult)

Function divideAndSee(nbToConvert,baseToconvertIn)

 if ((nbToConvert\baseToconvertIn)>=baseToconvertIn) Then

  myArrResult(0)=0
  myArrResult(1)=(nbToConvert\baseToconvertIn)
  myArrResult(2)=(nbToConvert Mod baseToconvertIn)

 Else ' (nbToConvert<baseToconvertIn) Dernière passe 

  myArrResult(0)=1
  myArrResult(1)=(nbToConvert\baseToconvertIn)
  myArrResult(2)=(nbToConvert Mod baseToconvertIn)

 End If
 call Main(myArrResult) 'On appelle la fonction appelante :)
End Function


L'autre algo. me semble plus facile à mettre en oeuvre ... Je vais voir ...
Sinon ça marche pour toutes les bases sauf celle qui ont des lettres (octal, hexa, etc ...)
0
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276 > ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021
Modifié par ryko1820 le 2/06/2013 à 23:17
Pour rester dans l'algo donné au départ , c'est vrai que l'opération inverse était beaucoup plus simple ... Encore du VBS alors un copié / collé dans un fichier texte renommé en .VBS et ça roule.

Dim nbToConvert, baseToconvertFrom, nbRang, myArrResult(1024), i, myResult

nbToConvert=InputBox("Enter your number in base N")
baseToconvertFrom=InputBox("Enter base type")

nbRang=len(nbToConvert)

baseToconvertFrom=(baseToconvertFrom-0) 'Conversion en chiffre ;) (Pas pour nbToConvert ça m'arrange qu'il soit en string)

i=0


for i=nbRang to 1 step -1
 myChiffre=(Left(nbToConvert,1)-0)
 nbToConvert=right(nbToConvert,(i-1))
 myArrResult(i-1)=myChiffre*(baseToconvertFrom^(i-1))
Next

myResult=0
i=0

for i=nbRang to 1 step -1
 myResult=myresult + myArrResult(i-1)
Next

wscript.echo (myResult)


Ça semble marcher mais pas de "sécurité" .
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
7 juin 2013 à 20:28
KX, tu veux bien stp me dire comment je dois procéder pour faire l'inverse ?
Explique clairement stp, merci !
1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
Modifié par Dayvid le 16/06/2013 à 11:43
Salut,

Vraiment j'y arrive pas :(
J'ai essayer ça mais ça marche pas (En pleur)

Procedure Transformer2(Nombre.q)
  
  ; À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
  Retenue = Nombre / 10
  
  ; On ajoute la Retenue au résultat
  Resultat = Nombre - Retenue
  
  ; Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
  ; tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.
  
  ; Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
  ; calculer aussi la Retenue de la Retenue !
  
  ; 1 = unités, 10 = dizaines, 100 = centaines...
  Rang = 1
  
  ; On s'arrête quand il n'y a plus de Retenue à ajouter
  While Retenue > 0
    
    ; Nouvelle Retenue à ajouter
    Retenue = (10 * Rang) * (Retenue / (10 * Rang))
    
    ; Ajout de la Retenue
    Resultat - Retenue
    
    ; Passage au Rang suivant
    Rang * 10
    
  Wend
  
  ProcedureReturn Resultat
  
EndProcedure 


Le respect n'est pas une option mais une obligation !
Restons cool: politesse, patience et indulgence sont indispensable !
1
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
2 juin 2013 à 17:24
Je vous remercie pour votre aide,

Effectivement KX, tu as parfaitement raison je suppose !
Ma vision est faussé, je fais avec se que je sais !

En faite, moi je cherche la logique, y dois bien y en avoir une quand même !
Mais même avec une feuille et un crayon, impossible de savoir snif.

ryko1820, Lol, oui comme tu dis heureusement mais si j'ai mis ça c'est
pour une très bonne raison ^^, pour bien voir !

De plus je suis désoler, vraiment mais c'est un peut compliquer pour moi
se que tu viens de dire, et puis comme la si bien dis KX, même ainsi
ça ne marche pas, prends exemple par exemple de:

99
999
9999
99999
999999

Ou autre, en faite avec cette méthode ça marche pas !
Sa marche presque oui mais en faite non ^^, dommage snif.

Bien ^^, sur se, j'ai déjà poser des question comme ça à droite et à gauche
et quelqu'un ma fait se code qui marche super bien:

Function NombreSansZéro(n As Int64) As Long
        Dim m = CInt(Math.Floor(Math.Log(8L * n + 1L, 9)))
        Dim b = Function(_j As Int64) (8L * n + 1L - CLng(Math.Pow(9, m))) \ (8L * CLng(Math.Pow(9, _j)))
        Return Enumerable.Range(0, m).Sum(Function(j) (1L + b(j) Mod 9L) * CLng(Math.Pow(10, j)))
    End Function


Le problème est que j'y comprends rien --'

Quelqu'un pourrais t-il la rendre beaucoup plus clair avec pas mal de commentaire s'il vous plait :)

Qui plus est, snif, ça marche mais... j'ai pas le code qui permet de faire l'inverses
Bhouuuuuuuuuuu snif :(.

Voilà, je suis coincé quoi et je peut même pas me débrouillé seul et ça c'est chiant :(

Alors je suis obliger de venir pleurer ici pour demander de l'aide, la personne qui à crée se code ne veux pas faire le code inverse :(

C'est bien... je suis content... mais en faite je peut rien faire :(
Voilà, je supplie votre aide s'il vous plait.

Merci d'avance ! :)
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
4 juin 2013 à 19:59
KX, tu veux bien s'il te plait m'aider à faire le code de décodage :)
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
6 juin 2013 à 10:36
Personne svp ?
0
ryko1820 Messages postés 1677 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 15 août 2021 276
6 juin 2013 à 10:41
hello,

je t'ai déjà donné un algo. pour la conversion de base N en base 10 ...

Il est généraliste (applicable à toute les bases et pas optimisé à ton problème spécifique : base 9) mais tellement simple qu'il doit être assez rapide et en tous cas opérationnel.

Sinon en repartant du prog. de KX et en inversant la logique c'est pas bien compliqué non plus.
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
16 juin 2013 à 18:15
Je peut avoir de l'aide svp ?!
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
Modifié par Dayvid le 17/06/2013 à 18:59
Help !!!

Le respect n'est pas une option mais une obligation !
Restons cool: politesse, patience et indulgence sont indispensable !
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
Modifié par Dayvid le 19/06/2013 à 18:47
Bonjour,

KX, voici une procédure pour faire l'inverse, elle n'est pas de moi évidement car déjà que j'arrive même pas à comprendre ta première procédure qui est excellente je le rappel auquel je te remercie énormément ! ^^

Stp peux tu me faire voir comment toi tu procèderais :)
Je suis sur que tu peut faire bien mieux que ça :)

Elle n'est pas très optimisé, je pense qu'on peut faire
au moins deux fois plus rapide, encore merci de ton aide :)

Procedure.q  Decoder(Nombre.q)
   Protected.q res, div10, mul9, c1, c2, reste, chiffre
   Protected i.l, j.l
   
   res = Nombre
   nb_chiffre = IntQ(Log10(Nombre)) + 1
   
   Macro PowQ(nombre_q, puissance, resultat_q)
      resultat_q = 1
      For j = 1 To puissance
         resultat_q * nombre_q
      Next
   EndMacro
   
   ;    div10 = Pow(10, nb_chiffre); ne fonctionne pas avec des Quad
   PowQ(10, nb_chiffre, div10)
   
   ;   mul9 = Pow(9, nb_chiffre - 1); ne fonctionne pas avec des Quad
   PowQ(9, nb_chiffre - 1, mul9)
   
   For i = nb_chiffre - 1 To 1 Step -1
      div10 / 10
      
      c1 = Nombre / div10
      chiffre = IntQ(c1) - IntQ(c1 / 10) * 10
      
      mul9 / 9
      res = res - i * mul9 * (chiffre + reste)
      
      reste = reste * 10 + chiffre
   Next
   
   ProcedureReturn res
EndProcedure


Le respect n'est pas une option mais une obligation !
Restons cool: politesse, patience et indulgence sont indispensable !
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
19 juin 2013 à 18:57
La question n'est pas de savoir si moi je peux le faire, mais si TOI tu peux le faire...
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
19 juin 2013 à 19:55
Mais j'y arrive pas moi !
Je peut pas le faire pour le moment snif
Tu veux bien m'aider stp :)
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
20 juin 2013 à 13:28
je sais pas se que j'ai pue te faire a ce point pour que tu veuille plus m'aider :(
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
21 juin 2013 à 11:28
Voici le code traduit en VB.Net

Normalement je me suis pas trompé si ce n'est que cella ne fonctionne pas correctement !

Serais t-il possible de corriger ou me dire se qui ne va pas svp :)

Function PowQ(ByVal NombreQ As Int64, ByVal Puissance As Int64, ByVal ResultaQ As Int64) As Int64
        ResultaQ = 1
        For j = 1 To Puissance
            ResultaQ *= NombreQ
        Next
        Return ResultaQ
    End Function

    Function Décode(ByVal Nombre As Int64) As Int64

        Dim Res As Int64 = Nombre
        Dim Div10 As Int64 = 0
        Dim Mul9 As Int64 = 0
        Dim C1 As Int64 = 0
        Dim Reste As Int64 = 0
        Dim Chiffre As Int64 = 0
        Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1

        Res = Nombre

        Div10 = PowQ(10, NombreChiffre, Div10)
        Mul9 = PowQ(9, NombreChiffre - 1, Mul9)

        For i = NombreChiffre - 1 To 1 Step -1
            Div10 \= 10

            C1 = CLng(Nombre \ Div10)

            Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)

            Mul9 \= 9
            Res = CLng(Res - (i * Mul9 * (Chiffre + Reste)))

            Reste = CLng(Reste * (10 + Chiffre))
        Next

        Return Res

    End Function

    Sub Main()
        Console.WriteLine(Décode(1331))
        Console.ReadLine()
    End Sub
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
25 sept. 2013 à 16:26
Bonjour,

Noter que le système de base se défini comme suit :


Base 10 (0123456789)
Base 9 (012345678)
Base 8 (01234567)
Base 7 (0123456)
Base 6 (012345)
Base 5 (01234)
Base 4 (0123)
Base 3 (012)
Base 2 (01)

Base 11 (0123456789A)
Base 12 (0123456789AB)
Base 13 (0123456789ABC)
Base 14 (0123456789ABCD)
Base 15 (0123456789ABCDE)
Base 16 (0123456789ABCDEF)

Donc par définition, toutes les bases contiennent le symbole [ 0 ].

K
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
25 sept. 2013 à 19:04
À condition de considérer que l'alphabet du codage est 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F...
Mais rien ne nous empêche de considérer un autre alphabet, par exemple en décalant tout l'alphabet pour avoir 0 → 1 // 1 → 2 // 2 → 3... Mais il faudrait quand même respecter les contraintes d'algèbres, c'est à dire que k+0=k → k+1=k // k*1=k → k*2=k

Mais tout cela ne se retrouvait pas dans les exemples d'échantillon donné par Dayvid, en particulier parce que l'on aurait du avoir 1=11=111 (de même qu'on a 0=00=000...)
Ce qu'il recherchait n'avait donc rien à voir avec une base (au sens algébrique), mais c'était quand même une bijection d'une base 10 {0,1,2,3,4,5,6,7,8,9} vers une base 9 {1,2,3,4,5,6,7,8,9}
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
25 sept. 2013 à 19:28
re:

Je suis d'accord avec ta remarque et j'ajouterai ceci :

Certe, je ne suis pas un expert mathématicien, par contre après 29 ans d'expérience
(16 en électronique/matériel et programmation BIOS et firmware) et (13 ans en informatique),
Il est clair que l'ordinateur ne comprend à la base que la Base 2.

Un mathématicien expérimenté à démontré que par regroupement binaire de 4 bits,
nous pouvions passer de la base 2 à la base 16 par un calcul mental très simple
(Électronique 101- Circuit logique). C'est de là que nous vient l'octet tel que conceptualiser aujourd'hui.

Or il est certain que mondialement le base 16 est identifier par les symboles
[ 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F ], ce qui n'exclus pas que quelqu'un pourrait
définir un autre suite de symbole pour un système propriétaire.

Comme je dis toujours, pourquoi faire simple qu'en on peut faire compliqué :-)

K
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
25 sept. 2013 à 20:06
La demande de Dayvid était un exercice d'algorithmique et tout le monde sait que ce genre d'exercices n'ont aucun intérêt ^^

Mais encore une fois ce n'était pas un changement de base, ni d'alphabet.

Sinon on n'aurait pas eu "7, 8, 9, 11, 12, 13" mais plutôt eu "7, 8, 9, 21, 22, 23", puisque sans 0 c'est le 1 qui prend sa place donc 11=1, 12=2, 13=3 (de même qu'en base 10 on a 01=1, 02=2, 03=3...)

En fait ici il s'agissait de lister les entiers un par un, sauf ceux qui contenait le chiffre 0, et associer la valeur n au nième nombre de la liste ainsi obtenu, mais sans calculer explicitement la liste.

Ça n'a donc rien à voir avec un changement de base, même si on pouvait s'y ramener de manière détournée pour faire le calcul direct...
0
Kalissi Messages postés 218 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 15 juillet 2019 20
25 sept. 2013 à 22:42
re :

Merci pour la suppression en double que j'avais envoyer.

K
0
Salut,

ça fais un moment que le problème est résolus...
Pour convertir un nombre de base 10 vers base 9:

Module Module1

Function Transformer(ByVal Int64 As Int64) As Int64

' À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
Dim Retenue As Int64 = (Int64 - 1) \ 9

' On ajoute la Retenue au résultat
Dim Resultat As Int64 = Int64 + Retenue

' Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
' tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.

' Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
' calculer aussi la Retenue de la Retenue !

' 1 = unités, 10 = dizaines, 100 = centaines...
Dim Rang As Int64 = 1

' On s'arrête quand il n'y a plus de Retenue à ajouter
While Retenue > 0

' Nouvelle Retenue à ajouter
Retenue = (10 * Rang) * ((Retenue - 1) \ (9 * Rang))

' Ajout de la Retenue
Resultat += Retenue

' Passage au Rang suivant
Rang *= 10

End While

Return Resultat

End Function

Sub Main()

Console.WriteLine(Transformer(1000))
Console.ReadLine()

End Sub

Pour décoder le nombre maintenant:

Module Module1

Function PowQ(ByVal NombreQ As Int64, ByVal Puissance As Int64, ByVal ResultaQ As Int64) As Int64
ResultaQ = 1
For j = 1 To Puissance
ResultaQ *= NombreQ
Next
Return ResultaQ
End Function

Function Décode(ByVal Nombre As Int64) As Int64

Dim Res As Int64 = Nombre
Dim Div10 As Int64 = 0
Dim Mul9 As Int64 = 0
Dim C1 As Int64 = 0
Dim Reste As Int64 = 0
Dim Chiffre As Int64 = 0
Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1

Res = 0 'Nombre
Div10 = PowQ(10, NombreChiffre, Div10)

For i = NombreChiffre - 1 To 0 Step -1
Div10 \= 10
C1 = CLng(Nombre \ Div10)
Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)

Mul9 = PowQ(9, i, Mul9)
Res += Mul9 * Chiffre

Next

Return Res

End Function

Sub Main()
Console.WriteLine(Décode(27726677999))
Console.ReadLine()
End Sub

End Module

A noté que ses codes ne sont pas de moi, on me les à crée !
j'en est bavé pour mettre ça au point (Enfin que on me mette ça au point)
0
Dayvid Messages postés 20 Date d'inscription dimanche 2 juin 2013 Statut Membre Dernière intervention 26 septembre 2013 2
26 sept. 2013 à 01:57
Voici un exemple concret de se que cella donne:

Module Module1

Function Base10VersBase9(ByVal Int64 As Int64) As Int64

' À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
Dim Retenue As Int64 = (Int64 - 1) \ 9

' On ajoute la Retenue au résultat
Dim Resultat As Int64 = Int64 + Retenue

' Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
' tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.

' Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
' calculer aussi la Retenue de la Retenue !

' 1 = unités, 10 = dizaines, 100 = centaines...
Dim Rang As Int64 = 1

' On s'arrête quand il n'y a plus de Retenue à ajouter
While Retenue > 0

' Nouvelle Retenue à ajouter
Retenue = (10 * Rang) * ((Retenue - 1) \ (9 * Rang))

' Ajout de la Retenue
Resultat += Retenue

' Passage au Rang suivant
Rang *= 10

End While

Return Resultat

End Function

Function PowQ(ByVal NombreQ As Int64, ByVal Puissance As Int64, ByVal ResultaQ As Int64) As Int64
ResultaQ = 1
For j = 1 To Puissance
ResultaQ *= NombreQ
Next
Return ResultaQ
End Function

Function Base9VersBase10(ByVal Nombre As Int64) As Int64

Dim Res As Int64 = Nombre
Dim Div10 As Int64 = 0
Dim Mul9 As Int64 = 0
Dim C1 As Int64 = 0
Dim Reste As Int64 = 0
Dim Chiffre As Int64 = 0
Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1

Res = 0 'Nombre
Div10 = PowQ(10, NombreChiffre, Div10)

For i = NombreChiffre - 1 To 0 Step -1
Div10 \= 10
C1 = CLng(Nombre \ Div10)
Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)

Mul9 = PowQ(9, i, Mul9)
Res += Mul9 * Chiffre

Next

Return Res

End Function

Sub Main()

Dim Nombre As Integer = 0

For i = 1 To 100

Nombre = CInt(Base10VersBase9(i))
Console.WriteLine(i & " en base 9 fait: " & Nombre)
Console.WriteLine(Nombre & " en base 10 fait: " & Base9VersBase10(Nombre))

Next

Console.ReadLine()

End Sub

End Module

0