[c] wykreslanie elementów z tablicy

marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

[c] wykreslanie elementów z tablicy

Post autor: marek12 »

jak napisać program w C
Mamy listę 1000 elementów (ponumerowanych od 1 do 1000). Wykreślamy co siódmy element (tzn. element nr 7, 14 itd.). Po dojściu do końca listy kontynuujemy od jej początku omijając elementy już wykreślone. Procedurę prowadzimy aż zostanie 10 ostanich elementów. Jakie to elementy?
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

[c] wykreslanie elementów z tablicy

Post autor: matshadow »

A nie powinniśmy wykreślić najpierw elementu nr 1?
marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

[c] wykreslanie elementów z tablicy

Post autor: marek12 »

a trzeba? a jak to zrobić?
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

[c] wykreslanie elementów z tablicy

Post autor: matshadow »

Na logikę - jak co siódmy element, to z reguły z
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[c] wykreslanie elementów z tablicy

Post autor: smiechowiec »

Obawiam się że wynik działania przedstawionego wyżej programu może nie do końca być tym co autor miał na myśli.

Kod: Zaznacz cały

#include <stdio.h>
#define N 1000
#define M 10
#define D 7
int main() {
  static int i, j, k = -1, t[N];
  /* ustawianie tablicy */
  for(i = 0; i < N; t[i++] = 1);
  /* usuwanie 990 elementów */
  for(i = 0; i < (N - M); i++) {
    for(j = 0; j < D; ) {
      if (t[(k + 1) % N]) 
        j++;
      k = (k + 1) % N;
    }
    t[k] = 0;
  }
   for(i = 0; i < N; i++)  {
    if (t[i]) 
      printf("%d, ", i + 1);
   } 
  
  return 0;
}
marek12
Użytkownik
Użytkownik
Posty: 696
Rejestracja: 5 lut 2008, o 15:38
Płeć: Mężczyzna
Lokalizacja: marki
Podziękował: 165 razy
Pomógł: 20 razy

[c] wykreslanie elementów z tablicy

Post autor: marek12 »

Mam pytanie który program działa poprawnie czy smiechowieca czy matshadowa czy ten poniższy?

Kod: Zaznacz cały

//Załączenie bibliotek
#include <stdio.h>


// Procedura zapisywania do tablicy liczb od 1 do 1 000
void tablicowanie(int *tablica)
{
 int i,nr; // Deklaracja zmiennych typu całkowitego
 
 // Pętla for tablicująca liczby od 1 do 1 000 w tablicy "tablica" 
 for(i=0, nr=1; i<1000; i++, nr++)
 {
          tablica[i]=nr; // Zapisywanie kolejnych liczb w tablicy "tablica"
 } 
}
// Koniec procedury "tablicowanie"

// Procedura wyświetlania liczb wykreślonych co siedem
void wyswietlenie(int *tablica)
{
 int i,nr; // Deklaracja zmiennych typu całkowitego 
 
 printf("Pozostalymi liczbami sa: 
");
 
 // Pętla for wyświetlająca liczby wykreślonych co siedem
 for(i=0; i<1000; i++)
 {
          if (tablica[i]==9999) // Jeżeli liczba w tablicy równa 9999
          {
               // Liczbą jest omijana
          }
          else // Jeżeli liczba w tablicy jest różna od 9999
          {
               printf("%d 
", tablica[i]); // Wyświetlana jest na ekran
          }
 }
}
// Koniec procedury "wyswietlenie"

// Procedura wykreślająca liczby co siódmą z zakresu od 1 do 1 000 
void cosiodma(int *tablica)
{
 int i, g, x, suma, sortowanie, temp; // Deklaracja zmiennych typu całkowitego
 
 // Pętla for wykreślająca liczby co siódmą z zakresu od 1 do 1 000
 for (g=0; g<32; g++)
 {
         // Pętla for wykreślająca liczby
         for(i=6, suma=0; i<=1000; i=i+7)
         {
                 tablica[i]=9999;       
         }
         
         // Pętla for sorująca tablice "liczby" rosnąco
         for (sortowanie=0; sortowanie<1000; sortowanie++) // Sortowanie jest powtarzane 1000 razy
         {    
              // Pętla for porównująca liczby w tablicy    
              for(i=0, x=1; x<1000; i++, x++)
              {
                       if (tablica[x]<tablica[i]) // Jak pierwsza liczba "tablica[x]" jest większa od drugiej liczby "tablica[i]
                       {
                             // Liczby te są zamieniane miejscami
                             temp=tablica[i];
                             tablica[i]=tablica[x];
                             tablica[x]=temp;                    
                       }
              }
         }
 }
}
// Koniec procedury "cosiodma"

// Początek programu
int main() 
{ 
 int tablica[1000]; // Deklaracja tablicy typu całkowitego
 
 // Wyświetlenie tekstu
 printf("Mamy liste 1000 elementow (ponumerowanych od 1 do 1000). 
");
 printf("Wykreslamy co siodmy element (tzn. element nr 7, 14 itd.). 
");
 printf("Po dojsciu do konca listy kontynuujemy od jej poczatku omijajac 
");
 printf("elementy juz wykreslone. Procedure prowadzimy az zostanie 10 
");
 printf("ostanich elementow. Jakie to elementy? 
 
");
 printf("Pogram rozwiazujacy to zadanie. 
 
");

 tablicowanie(tablica); // Wywołanie procedury zapisującej liczby od 1 do 1 000 w tablicy

 cosiodma(tablica); // Wywołanie procedury wykreślającej liczby z tablicy co siódmą
 
 wyswietlenie(tablica); // Wywołanie procedury wyświetlania liczb pozostałem w tablicy

 system("PAUSE"); // Zatrzymanie programu
 
 return 0;
}
// Koniec programu
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

[c] wykreslanie elementów z tablicy

Post autor: smiechowiec »

W celu sprawdzenia poprawności programu naljelpiej sprawdzić wynik ręcznie.
Przedstawiony ostatnio program zwraca wynik :

Kod: Zaznacz cały

Pozostalymi liczbami sa:
1
2
3
4
5
6
564
657
766
893
Natomiast skreślając liczby na kartce mamy po kolei

Kod: Zaznacz cały

7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98, 105, 112, 119, 126, 133, 140, 147, 154, 161,
168, 175, 182, 189, 196, 203, 210, 217, 224, 231, 238, 245, 252, 259, 266, 273, 280, 287, 294, 301,
308, 315, 322, 329, 336, 343, 350, 357, 364, 371, 378, 385, 392, 399, 406, 413, 420, 427, 434, 441,
448, 455, 462, 469, 476, 483, 490, 497, 504, 511, 518, 525, 532, 539, 546, 553, 560, 567, 574, 581,
588, 595, 602, 609, 616, 623, 630, 637, 644, 651, 658, 665, 672, 679, 686, 693, 700, 707, 714, 721,
728, 735, 742, 749, 756, 763, 770, 777, 784, 791, 798, 805, 812, 819, 826, 833, 840, 847, 854, 861,
868, 875, 882, 889, 896, 903, 910, 917, 924, 931, 938, 945, 952, 959, 966, 973, 980, 987, 994, 1, 9,
 17, 25, 33, 41, 50, 58, 66, 74, 82, 90, 99, 107, 115, 123, 131, 139, 148, 156, 164, 172, 180, 188,
197, 205, 213, 221, 229, 237, 246, 254, 262, 270, 278, 286, 295, 303, 311, 319, 327, 335, 344, 352,
360, 368, 376, 384, 393, 401, 409, 417, 425, 433, 442, 450, 458, 466, 474, 482, 491, 499, 507, 515,
523, 531, 540, 548, 556, 564, 572, 580, 589, 597, 605, 613, 621, 629, 638, 646, 654, 662, 670, 678,
687, 695, 703, 711, 719, 727, 736, 744, 752, 760, 768, 776, 785, 793, 801, 809, 817, 825, 834, 842,
850, 858, 866, 874, 883, 891, 899, 907, 915, 923, 932, 940, 948, 956, 964, 972, 981, 989, 997, 5, 15
, 24, 34, 44, 53, 62, 72, 81, 92, 101, 110, 120, 129, 138, 149, 158, 167, 177, 186, 195, 206, 215, 2
25, 234, 243, 253, 263, 272, 282, 291, 300, 310, 320, 330, 339, 348, 358, 367, 377, 387, 396, 405, 
415, 424, 435, 444, 453, 463, 472, 481, 492, 501, 510, 520, 529, 538, 549, 558, 568, 577, 586, 596, 
606, 615, 625, 634, 643, 653, 663, 673, 682, 691, 701, 710, 720, 730, 739, 748, 758, 767, 778, 787, 
796, 806, 815, 824, 835, 844, 853, 863, 872, 881, 892, 901, 911, 920, 929, 939, 949, 958, 968, 977, 
986, 996, 6, 18, 29, 39, 51, 61, 73, 85, 95, 106, 117, 128, 141, 151, 162, 173, 184, 194, 207, 218, 
228, 240, 250, 261, 274, 284, 296, 306, 317, 328, 340, 351, 362, 373, 383, 395, 407, 418, 429, 439, 
451, 461, 473, 485, 495, 506, 517, 528, 541, 551, 562, 573, 584, 594, 607, 618, 628, 640, 650, 661, 
674, 684, 696, 706, 717, 729, 740, 751, 762, 773, 783, 795, 807, 818, 829, 839, 851, 862, 873, 885, 
895, 906, 918, 928, 941, 951, 962, 974, 984, 995, 8, 20, 32, 46, 59, 71, 86, 97, 111, 124, 136, 150,
163, 176, 190, 201, 214, 227, 241, 255, 267, 279, 292, 305, 318, 332, 345, 356, 370, 382, 397, 410,
422, 436, 447, 460, 475, 487, 500, 513, 526, 537, 552, 565, 578, 591, 603, 617, 631, 642, 656, 668,
681, 694, 708, 722, 733, 746, 759, 772, 786, 799, 811, 823, 837, 849, 864, 877, 888, 902, 914, 927,
942, 954, 967, 979, 992, 4, 22, 37, 52, 67, 80, 96, 113, 127, 143, 157, 171, 187, 202, 219, 233, 248
, 264, 277, 293, 309, 324, 338, 354, 369, 386, 400, 414, 430, 445, 459, 477, 489, 505, 521, 535, 550
, 566, 582, 598, 611, 626, 641, 657, 671, 688, 702, 716, 732, 747, 764, 779, 792, 808, 822, 838, 855
, 869, 884, 898, 913, 930, 944, 960, 975, 990, 3, 23, 40, 57, 76, 93, 109, 130, 145, 165, 181, 199,
216, 235, 251, 269, 288, 304, 323, 341, 359, 375, 391, 411, 428, 446, 465, 480, 498, 516, 534, 554,
570, 587, 604, 622, 639, 659, 676, 692, 712, 726, 745, 765, 781, 800, 816, 832, 852, 870, 887, 905,
922, 937, 957, 976, 993, 12, 31, 54, 75, 94, 116, 135, 155, 178, 198, 220, 239, 258, 281, 299, 321,
342, 363, 381, 403, 423, 443, 467, 486, 508, 527, 545, 569, 590, 610, 632, 649, 669, 690, 713, 734,
754, 774, 794, 814, 836, 857, 878, 897, 919, 936, 961, 982, 1000, 26, 47, 69, 100, 121, 144, 169, 
192, 212, 242, 265, 289, 313, 334, 361, 388, 408, 432, 456, 479, 503, 530, 555, 576, 600, 624, 648, 
675, 698, 723, 743, 769, 790, 820, 843, 865, 890, 912, 935, 963, 985, 11, 38, 65, 89, 122, 152, 179, 
208, 232, 260, 290, 316, 347, 374, 402, 431, 457, 488, 514, 543, 571, 599, 627, 655, 683, 709, 738, 
766, 797, 827, 848, 879, 908, 934, 965, 991, 19, 55, 87, 118, 153, 185, 222, 249, 283, 314, 349, 380,
 416, 449, 478, 512, 544, 579, 612, 645, 677, 705, 741, 775, 804, 841, 871, 904, 943, 970, 2, 43, 79
, 114, 159, 193, 230, 271, 307, 346, 389, 421, 464, 496, 536, 575, 614, 652, 689, 725, 761, 803, 845
, 880, 921, 953, 998, 36, 83, 132, 170, 211, 257, 302, 353, 394, 438, 484, 524, 563, 619, 664, 704,
753, 789, 831, 886, 926, 971, 16, 68, 125, 174, 226, 276, 331, 379, 437, 493, 542, 592, 636, 697, 75
0, 802, 856, 900, 950, 10, 64, 134, 191, 247, 312, 366, 426, 494, 557, 608, 667, 731, 788, 859, 916,
 978, 45, 104, 183, 256, 326, 398, 468, 533, 601, 680, 755, 821, 893, 955, 30, 108, 204, 285, 365, 
452, 522, 620, 699, 780, 860, 946, 27, 137, 223, 325, 412, 509, 593, 715, 810, 894, 988, 102, 209, 
333, 440, 559, 660, 771, 876, 999, 142, 268, 390, 519, 647, 782, 925, 60, 200, 355, 502, 666, 828, 969
, 146, 298, 471, 685, 846, 48, 244, 454, 635, 867, 88, 337, 583, 813, 78, 372, 633, 933, 236, 561, 909, 275, 718, 13, 470, 947, 419, 983, 585
Zostaje zatem
103, 160, 166, 297, 404, 547, 724, 737, 757, 830
Najszybciej widać skreślenie liczby 1, która w przedstawionym algorytmie jest pomijana.
ODPOWIEDZ