symulator potencjału grawitacyjnego

0

Mam do wykonania nastepujace zadanie:

Stworzyc symulator potencjalu grawitacyjnego dfa dowolnej liczby cial o punktowych rozmiarach, zadanych masach i polozeniach na plaszczyznie.
Specyfikacja:

  • dowolne rozmiary obszaru okreslone przez uzytkowanika przy uruchomieniu programu
  • dowolna liczba cial (oznaczonych kolejnymi literami alfabetu 'A'=asci 65), mozliwosc dodawania i usuwania cial oraz zmiany ich parametrow (masy i polozenia)
  • wyswietlana wartosc kodowana w sposob dyskretny za pomoca cyfr od 9 (najmniejsza wartosc) do 0 (najwieksza wartosc)
    -mozliwosc wydrukwoania do pliku dokladnej wartosci wypadkowego potencjalu dla poszczegolnych "pikseli".
    Problem występuję w funkcji a dokładniej w linii przy case 1, treść błędu Untitled1.cpp cannot convert char (*)[26]' to char*' for argument 4' to void dodaj(cialo**, int, int, char*, int*)' Proszę o ocenę programu i wytłumaczenie błędów
    do{
        printf("Co chcesz zrobic?\n1. Dodaj cialo\n0. Wyjdz\n2. Usun\n3. Wyswietl\n4. Zmien mase\n5. Zmien polozenie\n6. Oblicz potencjal\n");
        scanf("%i", &p);
        switch(p){
            case 1:
                dodaj(obszar, n, m, &alf, &licz);
                break;
            case 2:
                usun(obszar, n, m);
                break;
            case 3:
                przydzial(obszar, n, m);
                wyswietl(obszar, n, m);
                break;
            case 4:
                zmien_mase(obszar, n, m);
                break;
            case 5:
                zmien_polozenie(obszar, n, m);
                break;
            case 6:
                oblicz_potencjal(obszar, n, m);
                break; 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

const float G = (6.67)*pow(10, -11);

struct cialo{
    char c;
    float masa;
    int x;
    int y;

    int id;
    float potencjal;
    int przydzial;
};

void oblicz_potencjal(struct cialo **tab, int n, int m){

    int i, j;
    float potencjal = 0;
    float r;
    int idd;

    printf("Podaj id ciala, ktorego potencjal chcesz obliczyc. Dostepne: \n");

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%i ", tab[i][j].id);
        }
    }

    scanf("%i", &idd);

    int x1, y1;
    float m1;

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id == idd)
                x1 = tab[i][j].x;
                y1 = tab[i][j].y;
        }
    }

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id =! -1){
                r = sqrt(pow((x1-tab[i][j].x), 2) - pow((y1-tab[i][j].y), 2));
                potencjal += (-G)*(tab[i][j].masa/r);
            }

        }

    }

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id == idd)
                tab[i][j].potencjal = potencjal;
        }
    }

    printf("Potencjal: %f\n", potencjal);
}

void przydzial(struct cialo **tab, int n, int m){
    int i, j;
    float suma = 0;
    float potencjal;

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            while(tab[i][j].id =! -1){
                suma += tab[i][j].potencjal;
            }
        }

    }

    float przedzial;

    przedzial = suma / 10;
    printf("Przedzial: %f\n", przedzial);


    for(i=0; i<n; i++){
            for(j=0; j<m;j++){

                if(tab[i][j].potencjal <= 0 && tab[i][j].potencjal >= przedzial)
                    tab[i][j].przydzial = 0;

                if(tab[i][j].potencjal <= przedzial && tab[i][j].potencjal >= 2*przedzial)
                    tab[i][j].przydzial = 1;

                if(tab[i][j].potencjal <= 2*przedzial && tab[i][j].potencjal >= 3*przedzial)
                    tab[i][j].przydzial = 2;

                if(tab[i][j].potencjal <= 3*przedzial && tab[i][j].potencjal >= 4*przedzial)
                    tab[i][j].przydzial = 3;

                if(tab[i][j].potencjal <= 4*przedzial && tab[i][j].potencjal >= 5*przedzial)
                    tab[i][j].przydzial = 4;

                if(tab[i][j].potencjal <= 5*przedzial && tab[i][j].potencjal >= 6*przedzial)
                    tab[i][j].przydzial = 5;

                if(tab[i][j].potencjal <= 6*przedzial && tab[i][j].potencjal >= 7*przedzial)
                    tab[i][j].przydzial = 6;

                if(tab[i][j].potencjal <= 7*przedzial && tab[i][j].potencjal >= 8*przedzial)
                    tab[i][j].przydzial = 7;

                if(tab[i][j].potencjal <= 8*przedzial && tab[i][j].potencjal >= 9*przedzial)
                    tab[i][j].przydzial = 8;

                if(tab[i][j].potencjal <= 9*przedzial && tab[i][j].potencjal >= 10*przedzial)
                    tab[i][j].przydzial = 9;
            }
    }
}

void dodaj(struct cialo **tab, int n, int m, char *alf, int *licz){

    struct cialo nowe;
    printf("Podaj mase: ");
    scanf("%f", &nowe.masa);

    printf("Podaj wspolrzedna x = ");
    scanf("%i", &nowe.x);


   while(nowe.x>n){
        printf("Wychodzisz poza obszar!");
        printf("Podaj wspolrzedna x = ");
        scanf("%i", &nowe.x);
    }


    printf("Podaj wspolrzedna y = ");
    scanf("%i", &nowe.y);

      while(nowe.y>m){
        printf("Wychodzisz poza obszar!");
        printf("Podaj wspolrzedna y = ");
        scanf("%i", &nowe.y);
    }


    nowe.id = (*licz);
    ++(*licz);
    printf("%i\n", licz);
    nowe.c = alf[nowe.id];

    tab[nowe.x][nowe.y] = nowe;

    printf("m = %f x = %i y = %i", tab[nowe.x][nowe.y].masa, tab[nowe.x][nowe.y].x, tab[nowe.x][nowe.y].y);


    printf("%c\n", tab[nowe.x][nowe.y].c);
}

void usun(struct cialo **tab, int n, int m){
    printf("Podaj id ciala, ktore chcesz usunac. Dostepne: \n");
    int i, j;
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%i ", tab[i][j].id);
        }
    }

    int s;
    scanf("%i", &s);

    struct cialo puste = {0, 0, n, m, -1};

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id == s){
                tab[i][j] = puste;
        }
    }

}
}

void wyswietl(struct cialo **tab, int n, int m){
    int i, j;
    float po = tab[0][0].potencjal;

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%c%i\t", tab[i][j].c, tab[i][j].przydzial);
        }
        printf("\n");
    }
}

void zmien_mase(struct cialo **tab, int n, int m){
    printf("Podaj id ciala, ktorego chcesz zmienic mase. Dostepne: \n");
    int i, j;
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%i ", tab[i][j].id);
        }
    }

    int s;
    scanf("%i", &s);

    printf("Podaj nowa mase: ");

    float nowa_m;

    scanf("%f", &nowa_m);

     for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id == s){
                tab[i][j].masa = nowa_m;
        }
    }
}
}

void zmien_polozenie(struct cialo **tab, int n, int m){
    printf("Podaj id ciala, ktorego chcesz zmienic polozenie. Dostepne: \n");
    int i, j;
    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            printf("%i ", tab[i][j].id);
        }
    }

    int s;
    scanf("%i", &s);

   printf("Podaj nowe polozenie:\nx = ");

   int n_x, n_y;

   scanf("%i", &n_x);

   printf("Podaj nowe polozenie:\ny = ");

    scanf("%i", &n_y);

    struct cialo puste = {0, 0, n, m, -1};
    struct cialo nowe;

    for(i=0; i<n; i++){
        for(j=0; j<m; j++){
            if(tab[i][j].id == s){
                nowe = tab[i][j];
                nowe.x = n_x;
                nowe.y = n_y;
                tab[i][j] = puste;
                tab[n_x][n_y] = nowe;
        }
    }
}
}

int main()
{
    int n, m;
    printf("Podaj wymiary obszaru:\nn = ");
    scanf("%i", &n);
    printf("m = ");
    scanf("%i", &m);

    int w = n+1;
    int k = m+1;
    char alf[26];
    char c = 'A';

    int licz = 0;
    int i;

    for(i=0; i<26; i++){
        alf[i] = c;
        c++;
        printf("%c", alf[i]);
    }

    struct cialo **obszar;
    obszar = (struct cialo**)malloc(n*sizeof(struct cialo*));

    for(i=0; i<m; i++)
        obszar[i]=(struct cialo*)malloc(m*sizeof(struct cialo));

    int j;

    struct cialo puste = {0, 0, n, m, -1, 1, -1};

    for(i=0; i<n; i++){
        for(j=0; j<m; j++)
            obszar[i][j] = puste;
    }

    int p;

    do{
        printf("Co chcesz zrobic?\n1. Dodaj cialo\n0. Wyjdz\n2. Usun\n3. Wyswietl\n4. Zmien mase\n5. Zmien polozenie\n6. Oblicz potencjal\n");
        scanf("%i", &p);
        switch(p){
            case 1:
                dodaj(obszar, n, m, &alf, &licz);
                break;
            case 2:
                usun(obszar, n, m);
                break;
            case 3:
                przydzial(obszar, n, m);
                wyswietl(obszar, n, m);
                break;
            case 4:
                zmien_mase(obszar, n, m);
                break;
            case 5:
                zmien_polozenie(obszar, n, m);
                break;
            case 6:
                oblicz_potencjal(obszar, n, m);
                break;
        }
    }while(p!=0);

    return 0;
}
 
0

litości:

const float G = 6.67e-11; // (6.67)*pow(10, -11);

wywal ampersand.

1 użytkowników online, w tym zalogowanych: 0, gości: 1