Podporgram- tablica kwadratowa

profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Podporgram- tablica kwadratowa

Post autor: profesorq »

1) Napisać możliwie najlepszy podprogram ktory dla tablicy kwadratowej typu
#define NMAX ....
typedef double[NMAX][NAMX] ttab
(tablica i jej graniczny indeks użyteczności przekazane jako argumenty wywolania podprogramu) odwróci kolejność wierszy zawartych w tej tablicy

2)Napisać możliwie najlepsza funkcje, która dla tablicy kwadratowej o wymiarach nxn zawierającej liczby rzeczywiste (tablica i jej rozmiar przekazane jako argumenty wywołania funkcji) zwróci wartość średniej elementów znajdujących sie pod główną przekątną (główna przekątną tworzą te elementy \(\displaystyle{ a_{ij}}\) których indeksy są równe, czyli i=j).


3) Napisać mozlwie najlepsza funkcje, która dla tablicy kwadratowej o wymiarach N_MAX x N_MAX i wypełnieniu nxn (część tablicy wypełniona wartościami) zawierającej liczby rzeczywiste(tablica przekazywana jako argument wywolania funkcji, podobnie jak rozmiar części wypełnionej) zwróci wartość średnią elementów leżących w części nad obiema głównymi przekątnymi (przekątne tworzą elementy \(\displaystyle{ a_{ii}}\) oraz \(\displaystyle{ a_{i,n-i-1}}\) dla i=0...n-1
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Podporgram- tablica kwadratowa

Post autor: smiechowiec »

Kod: Zaznacz cały

#include <stdio.h>
#define NMAX 10

typedef double ttab[NMAX][NMAX] ;

int wypisztablice( ttab t, int imax) {
  int i, j;
  for(i = 0; i < imax; i++) {
    for(j = 0; j < imax; j++)
      printf("%7f ", t[i][j]);
    puts("");
  }
  return 0;
}

/* Zad 1 */
int odwrocwiersze( ttab t, int imax) {
  register double f;
  register int i, ik, j;
  for(j = 0; j < imax; j++) /* kolejne wiersze */
    for(i = 0, ik = imax - 1; i < ik; i++, ik--) { /* kolejne kolumny */
      f = t[j][i]; /* zapamiętaj liczbę z początku wiersza */
      t[j][i] = t[j][ik]; /* wpisz w początkową liczbę, liczbę z końca */
      t[j][ik] = f; /* wpisz w końcową liczbę, liczbę zapamiętaną liczbę */
    }
  return 0;
}

/* Zad 2 
  zwróci wartość średniej elementów znajdujących sie pod główną przekątną  */
double srednia2( ttab t, int imax) {
  register double f = 0.0;
  register int i, j, ilicznik = 0;
  for(j = 0; j < imax; j++) /* kolejne wiersze */
    for(i = j + 1; i < imax; i++) { /* kolejne kolumny */
      f += t[j][i];  /* suma */
      ilicznik++;  /* liczba elementów */
    }
    if (ilicznik) 
      return (f / ilicznik);
    else 
      return f;
}

/* Zad 3
 zwróci wartość średnią elementów leżących w części nad obiema głównymi przekątnymi */
double srednia3(ttab t, int imax) {
  register double f = 0.0;
  register int i, ik, j, ilicznik = 0;
  for(j = 0; j < imax; j++) /* kolejne wiersze */
    for(i = j + 1, ik = imax - i; i < ik; i++) { /* kolejne kolumny */
      f += t[j][i];  /* suma */
      ilicznik++;  /* liczba elementów */
    }
    if (ilicznik) 
      return (f / ilicznik);
    else 
      return f;
}



int main() {
  ttab t1 = { 
  {1, 2, 3, 3, 4},
  {4, 5, 6, 7, 8},
  {7, 8, 9, 9 ,9},
  {1, 2, 3, 3, 5},
  {1, 2, 3, 3, 6}};
  
  puts("Tablica podstawowa");
  wypisztablice(t1, 5);
  puts("");

  printf("Srednia nad glowna przekatna %f", srednia2(t1, 5));
  puts("");
  
  printf("Srednia nad przekatnymi %f", srednia3(t1, 5));
  puts("");

  puts("Tablica z odwroconymi wierszami");
  odwrocwiersze(t1, 5);
  wypisztablice(t1, 5);
  
  return 0;
}
profesorq
Użytkownik
Użytkownik
Posty: 384
Rejestracja: 12 lut 2007, o 19:40
Płeć: Mężczyzna
Lokalizacja: wawa
Podziękował: 77 razy
Pomógł: 1 raz

Podporgram- tablica kwadratowa

Post autor: profesorq »

a jak zrobic kopiowanie elemnntow tablicy w wierszu? tak zeby nei gubilo zadnego elelemntu, wszystko sie musi miescic w tablicy
np skopiowanie i do j
```````````` _______
____________|_______|__
i|___L___| j

a takze tak
``````j ________
_______|_______|__
i|___L___|
wtedy musi kopiowac od konca
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Podporgram- tablica kwadratowa

Post autor: smiechowiec »

Kod: Zaznacz cały

#include <stdio.h>
#define NMAX 16

/* i - od którego elementu kopiujemy
   j - do któego element kopiujemy
   l - długość przedziału
  NMAX - długość tablicy */
int przepisz(int t[], int i, int j, int l) {
  int n;
  if (i == j)
    return 0; /* nie ma co przepisywać */
  if (j < i)
    for(n = 0; (n < l) && ((i + n) < NMAX); n++) 
      t[j + n] = t[i + n];
  else
    for(n = l - 1; n >= 0; n--) 
      t[j + n] = t[i + n];
  return 0;
}

int wypisz(int t[]) {
  int i;
  for(i = 0; i < NMAX; i++)
    printf("%2d ", t[i]);
  return 0;
}

int main() {
  int t2[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

  wypisz(t2); puts("");
  przepisz(t2, 7, 0, 10);
  wypisz(t2); puts("");
  return 0;
}
rafi111
Użytkownik
Użytkownik
Posty: 18
Rejestracja: 13 lis 2007, o 10:35
Płeć: Mężczyzna
Lokalizacja: wawa

Podporgram- tablica kwadratowa

Post autor: rafi111 »

a jak wkleic elementy?
ODPOWIEDZ