logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Algorytm w C: znajdowanie wiersza z maksymalną sumą w tablicy 2D

bbxb 03 Sty 2008 22:17 10717 3
REKLAMA
  • #1 4654684
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Witam!
    Mam do zrobienia dwa projekty w języku C. Trochę już zrobiłem jednak mam wiele wątpliwości.

    Zadanie 1.
    Proszę napisać algorytm, który dla dwuwymiarowej tablicy wyznacza numer wiersza [lub wierszy] o maksymalnej sumie elementów.
    przykład: dla tablicy o 4 wierszach i 3 kolumnach:
    1 5 1
    2 3 3
    2 2 2
    4 3 3
    będzie to indeks 3. W wierszach: o indeksie 0 suma wynosi 7, o indeksie 1 suma wynosi 8, o indeksie 2 suma wynosi 6, o indeksie 3 suma wynosi 10. Maksymalną sumę zawiera wiersz o indeksie 3.


    Mój kod jaki napisałem:
    /* Program wskazujacy numer wiersza z najwieksza suma */
    #include <stdio.h>
    
    int main (void)
    {
        int tablica[8][3]={     
            {2, 4, 6},
            {2, 4, 6},
            {2, 4, 6},   
            {2, 4, 6},    
            {2, 4, 6},
            {2, 4, 6},
            {2, 4, 6},
            {2, 4, 6}
            };
            
        int w, k, suma, suma_pom, wiersz;
        suma = suma_pom = w = wiersz = 0;
        
        while(w < 8)
        {
        k = 0;
            
            while(k < 3)
            {
            suma = suma + tablica[w][k];
            k++;
            }
                                   
        
        if (suma > suma_pom){
                           wiersz = w;
                           suma_pom = suma;
                           }; 
        suma = 0;        
        w++;        
        }
        
        printf("Najwieksza suma: %d\n", suma_pom);
        printf("Numer wiersza z najwieksza suma: ");
        int suma_pom2;
        suma_pom2 = suma_pom;
        suma = suma_pom = w = wiersz = 0;
      
        while(w < 8)
        {
        k = 0;
            
            while(k < 3)
            {
            suma = suma + tablica[w][k];
            k++;
            }
                                   
        
        if (suma >= suma_pom){
                           wiersz = w;
                           suma_pom = suma;
                            
        if (suma_pom2 == suma_pom){
                      
                      printf("%d, ", wiersz + 1); 
                      };};
        suma = 0;        
        w++;        
        }
        
        getchar();
        return 0;
    }

    Czy tego kodu nie da się napisać prościej, używając mniej zmiennych?? Czy na pewno jest on poprawny??



    Zadanie 2.
    Proszę napisać algorytm, który wypełnia ,,jodełką" tablicę kwadratową o wymiarze n.
    przykład: dla n równego 5, tablica ta jest postaci:
    1 1 1 1 1
    1 2 2 2 2
    1 2 3 3 3
    1 2 3 4 4
    1 2 3 4 5


    Mój kod jaki napisałem:
    /* Jodelka */
    #include <stdio.h>
    
    int main (void)
    {
        int tablica[4][4];      /* n = 5 */
        int wiersz, kolumna, a, x, z, w, k;
        
        wiersz = kolumna = w = k = 0;
        a = 1;
        x = 5;
        z = 5;
        
        while ((w < 5)&&(k < 5)){
              
                      while(kolumna < x){
                                    tablica[kolumna][wiersz]= a;
                                    printf("%d ", tablica[kolumna][wiersz]);
                                    kolumna = kolumna + 1;
                                    };
                                    kolumna = 0;
                      while(wiersz < z){
                                    tablica[kolumna][wiersz] = a;
                                    printf("%d ", tablica[kolumna][wiersz]);
                                    wiersz = wiersz + 1;
                                    };
                      
                      kolumna = 0;
                      wiersz = 0;
                      w = w + 1;
                      k = k + 1;
                      x = x - 1;
                      z = z - 1;
                      a = a + 1;
                      
              };
              
        printf("\n\n%d", tablica[0][0]);
                                   
    
    getchar();
    return 0;   
    }

    Ale to nie działa poprawnie :( Nie mam pojęcia jak napisać go dobrze. Siedziałem z kumplem nad tym i nic. Macie jakieś pomysły??

    Programy mają być napisane w czystym C, używając tylko if, while, do while ale bez pętli for.


    Z góry dziękuję za pomoc.
    Pozdrawiam.
    P.S Za pomoc oczywiście punkty ;-)
  • REKLAMA
  • Pomocny post
    #2 4656379
    korrus666
    Poziom 40  
    Posty: 5219
    Pomógł: 584
    Ocena: 476
    Drugi program
    
    #include <stdio.h>
    
    int main (void)
    {
        int tablica[5][5];      /* n = 5 */
        int w, k;
       
        w = k = 0;
       
        while (w < 5){
    		while(k<5){
    				if(w<k||w==k){
    					tablica[w][k]=w+1;
    				}
    				else if(w>k){
    					tablica[w][k]=k+1;
    				}
    			k++;
    			} 
    			k=0;
    		w++;
              }
             
    	w=0;
    	k=0;
    
    	while (w < 5){
    		while(k<5){
    				printf("%d", tablica[w][k]);
    			k++;
    			} 
    			k=0;
    			printf("\n");
    		w++;
              }
    	
    	
    getchar();
    return 0;   
    }
    

    Prościej już się chyba nie da.
  • REKLAMA
  • #3 4672002
    bbxb
    Poziom 31  
    Posty: 2271
    Pomógł: 147
    Ocena: 94
    Jak wyznaczyć złożoność obliczeniową dla tego programu??
  • Pomocny post
    #4 4672042
    polygon7
    Poziom 11  
    Posty: 6
    Pomógł: 2
    Ocena: 1
    Tutaj masz tablicę n*n, następuje przejście po każdym elemencie, czyli złożoność kwadratowa O(N^2).

    BTW. Tamto wypisywanie na ekran można by robić jednocześnie przy wstawianiu elementów do tablicy (za if-else-if).
REKLAMA