Mnożenie macierzy. Sporo błędów. Potrzebuję konkretów.

0

Witam!

Program na mnożenie macierzy w języku C.
Wygląda on tak:

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

int main(void) {
int **tab, m ,n;
printf("MNOZENIE MACIERZY\n\n");
printf("Podaj liczbe wierszy macierzy A: ");
scanf("%d",&n);
printf("Podaj liczbe kolumn macierzy A: ");
scanf("%d",&m);

tab=(int**)malloc(m*sizeof(int*));

for(int i=0;i<m;i++)

{
    (tab+i)=(int*)malloc(n*sizeof(int));
}


for(int wiersz=0;wiersz<n;wiersz++);
{

        for(int kolumna=0;kolumna<m;kolumna++)
        {
                tab[wiersz][kolumna]=kolumna+wiersz;

                printf("%d ", tab[wiersz][kolumna]);}
        printf("\n");}
puts("\n\n");


int **tab2, x ,y;
printf("Podaj liczbe wierszy macierzy B: ");
scanf("%d",&x);
printf("Podaj liczbe kolumn macierzy B: ");
scanf("%d",&y);

tab2=(int**)malloc(y*sizeof(int*));
for(int r=0;r=0;r<y;r++);

{
    *(tab2+r)=(int*)malloc(x*sizeof(int));

}

for(int wiersz2=0;wiersz2<x;wiersz2++) {
        for(int kolumna2=0;kolumna2<y;kolumna2++){
                tab2[wiersz2][kolumna2]=kolumna2+wiersz2+1;
                printf("%d ", tab2[wiersz2][kolumna2]); }
        printf("\n");}
puts("\n\n");

int **tab3;
tab3=(int**)malloc(y*sizeof(int*));
for(int u=0;u<y;u++)
{
    *(tab3+u)=(int*)malloc(n*sizeof(int));}

    if (m==x);
{
        int pomoc=0;
        int wynik=0;
        for (int q=0;q<n;q++);

        {
            for(int w=0;w<y;w++);
            {
                for(int e=0;e<m;e++);
                {
                    pomoc=tab[q][e]*tab2[e][w];
                    wynik=wynik+pomoc;
                    tab3[q][w]=wynik;
                }
                printf("%d ", tab3[q][w]);
            }
            printf("\n");
        }
}
else{printf("\nNie da sie pomnozyc takich macierzy.");}

for(int i=0;i<n;i++);
{
    free(tab3[i]);}

    free(tab3);

for(int i=0;i<n;i++);
{
    free(tab[i]);}
    free(tab);
    for(int i=0;i<x;i++);
    {
        free(tab2[i]);}
        free(tab2);

    }
system("PAUSE");
{
return 0;
}

I do tego milion błędów.
W linku zamieszczam screen'a.

http://w817.wrzuta.pl/obraz/5t3VTz6aWly/bledy_w_c

Program to CodeBlock, a kompilator GNU. W innych programach nie miałem takich problemów raczej.

Pomóżcie. (nie wiem jak włączyłem kursywe, ale nie specjalnie)

Potrzebuję konkretów, co usunąć, co dodać itd.

0
#include <iostream.h>

do wywalenia, przecież to C, a nie C++

for(int wiersz=0;wiersz<n;wiersz++);

nie możesz robić w ten sposób

musisz:

int wiersz;
for(wiersz=0;wiersz<n;wiersz++);

A gdzie wcześniejszy if

else{printf("\nNie da sie pomnozyc takich macierzy.");}

Radzę się zaprzyjaźnić z logiem z błędami, przecież tam wszystko jest jak na dłoni.

0
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code

dodaj jedną z podanych opcji jako parametr kompilacji (gdzie? nie wiem, gdzieś w opcjach projektu) albo zastosuj się do porady jacka_128.

0

Dziękuje Wam bardzo. Bardzo mi już pomogliście. Wziąłem się za te głupie błędy teraz. Zostały mi dwa błędy. Będę szukał rozwiązana (po necie zapewne), ale jeśli możecie i wiecie to dajcie znać czemu występuję te błędy.

Oto obecny kod:

 
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

int main(void);
{
int **tab, m ,n;
printf("MNOZENIE MACIERZY\n\n");
printf("Podaj liczbe wierszy macierzy A: ");
scanf("%d",&n);
printf("Podaj liczbe kolumn macierzy A: ");
scanf("%d",&m);

tab=(int**)malloc(m*sizeof(int*));

int i;
for(i=0;i<m;i++)

{
    (tab+i)=(int*)malloc(n*sizeof(int));
}


int wiersz;
for(wiersz=0;wiersz<n;wiersz++);
{

        int kolumna;
        for(kolumna=0;kolumna<m;kolumna++)
        {
                tab[wiersz][kolumna]=kolumna+wiersz;

                printf("%d ", tab[wiersz][kolumna]);}
        printf("\n");}
puts("\n\n");


int **tab2, x ,y;
printf("Podaj liczbe wierszy macierzy B: ");
scanf("%d",&x);
printf("Podaj liczbe kolumn macierzy B: ");
scanf("%d",&y);

tab2=(int**)malloc(y*sizeof(int*));
int r;
for(r=0;r=0;r<y;r++);

{
    *(tab2+r)=(int*)malloc(x*sizeof(int));

}
int wiersz2;
for(wiersz2=0;wiersz2<x;wiersz2++) {
        int kolumna2;
        for(kolumna2=0;kolumna2<y;kolumna2++){
                tab2[wiersz2][kolumna2]=kolumna2+wiersz2+1;
                printf("%d ", tab2[wiersz2][kolumna2]); }
        printf("\n");}
puts("\n\n");

int **tab3;
tab3=malloc(y*sizeof(int*));
int u;
for(u=0;u<y;u++)
{
    *(tab3+u)=(int*)malloc(n*sizeof(int));}

    if (m==x);
{
        int pomoc=0;
        int wynik=0;
        int q;
        for (q=0;q<n;q++);

        {
            int w;
            for(w=0;w<y;w++);
            {
                int e;
                for(e=0;e<m;e++);
                {
                    pomoc=tab[q][e]*tab2[e][w];
                    wynik=wynik+pomoc;
                    tab3[q][w]=wynik;
                }
                printf("%d ", tab3[q][w]);
            }
            printf("\n");
        }
}
if
else{printf("\nNie da sie pomnozyc takich macierzy.");
}
int i;
for(i=0;i<n;i++);
{
    free(tab3[i]);}

    free(tab3);

for(i=0;i<n;i++);
{
    free(tab[i]);}
    free(tab);
    int i;
    for(i=0;i<x;i++);
    {
        free(tab2[i]);}
        free(tab2);

    }
{
system("PAUSE");
return 0;
} 

A oto błędy.

  1. Line 6 - error: expected identifier or '(' before '{' token
{     //przy tej klamrze, linijka 6 kodu
int **tab, m ,n;
printf("MNOZENIE MACIERZY\n\n");
printf("Podaj liczbe wierszy macierzy A: ");
scanf("%d",&n);
printf("Podaj liczbe kolumn macierzy A: ");
scanf("%d",&m);

tab=(int**)malloc(m*sizeof(int*));
  1. Line 112 - error: expected identifier or '(' before '{' token \błąd wskazuje przy:
{  //tutaj, bo to jest 112 linia kodu
system("PAUSE");
return 0;
}
0

Bo masz średnik po int main()

0

Usunałem ten średnik, ale teraz wyskakuje mi więcej błędów...

Oto kod aktualny.

#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
int **tab, m ,n;
printf("MNOZENIE MACIERZY\n\n");
printf("Podaj liczbe wierszy macierzy A: ");
scanf("%d",&n);
printf("Podaj liczbe kolumn macierzy A: ");
scanf("%d",&m);

tab=(int**)malloc(m*sizeof(int*));

int i;
for(i=0;i<m;i++)

{
    (tab+i)=(int*)malloc(n*sizeof(int));
}


int wiersz;
for(wiersz=0;wiersz<n;wiersz++);
{

        int kolumna;
        for(kolumna=0;kolumna<m;kolumna++)
        {
                tab[wiersz][kolumna]=kolumna+wiersz;

                printf("%d ", tab[wiersz][kolumna]);}
        printf("\n");}
puts("\n\n");


int **tab2, x ,y;
printf("Podaj liczbe wierszy macierzy B: ");
scanf("%d",&x);
printf("Podaj liczbe kolumn macierzy B: ");
scanf("%d",&y);

tab2=(int**)malloc(y*sizeof(int*));
int r;
for(r=0;r=0;r<y;r++)

{
    *(tab2+r)=(int*)malloc(x*sizeof(int));

}
int wiersz2;
for(wiersz2=0;wiersz2<x;wiersz2++) 
        {
        int kolumna2;
        for(kolumna2=0;kolumna2<y;kolumna2++){
                tab2[wiersz2][kolumna2]=kolumna2+wiersz2+1;
                printf("%d ", tab2[wiersz2][kolumna2]); }
        printf("\n");}
puts("\n\n");

int **tab3;
tab3=malloc(y*sizeof(int*));
int u;
for(u=0;u<y;u++)
{
    *(tab3+u)=(int*)malloc(n*sizeof(int));}

    if (m==x);
{
        int pomoc=0;
        int wynik=0;
        int q;
        for (q=0;q<n;q++);

        {
            int w;
            for(w=0;w<y;w++);
            {
                int e;
                for(e=0;e<m;e++);
                {
                    pomoc=tab[q][e]*tab2[e][w];
                    wynik=wynik+pomoc;
                    tab3[q][w]=wynik;
                }
                printf("%d ", tab3[q][w]);
            }
            printf("\n");
        }
}
if
else{printf("\nNie da sie pomnozyc takich macierzy.");
}
int i;
for(i=0;i<n;i++);
{
    free(tab3[i]);}

    free(tab3);

for(i=0;i<n;i++);
{
    free(tab[i]);
    }
    free(tab);
    int i;
    for(i=0;i<x;i++);
    {
        free(tab2[i]);
        }
        free(tab2);

    }
{
system("PAUSE");
return 0;
}
 

A błędy zamieszczam w linku.

http://w243.wrzuta.pl/obraz/aZ9KVo8sBnn/bledy_w_c2

Pomocy. Już nie wiem co tu jest namieszane. Może drobne błędy...co robić, bo za parę godzin muszę mieć to gotowe...

0

jak to jest, że piszesz program i już w trakcie jego tworzenia nie zauważasz takich błędów jak ten średnik albo deklaracja zmiennej w odpowiednim miejscu? Nie kompilujesz kodu na bieżąco tylko klepiesz cały i potem szukasz?

0

Coś takiego.

Proszę o pomoc.

Zostały 4 błędy. Wykasowałem błąd z przypadkowym zadeklarowaniem dwa razy zmiennej 'i'

0

4p.c: In function 'main':

    (tab+i)=(int*)malloc(n*sizeof(int));

4p.c:20:5: error: lvalue required as left operand of assignmentpróbujesz przypisać wartość do nawiasu. to bezsens. nie miało być przypadkiem tab[i] = cośtam?

for(r=0;r=0;r<y`code>`4p.c:46:1: warning: suggest parentheses around assignment used as truth value
4p.c:46:1: warning: statement with no effect
4p.c:46:16: error: expected ')' before ';' token

wewnątrz for masz cztery wyrażenia, a wymagane są trzy.

if
else{printf("\nNie da sie pomnozyc takich macierzy.");

4p.c:93:1: error: expected '(' before 'else'if else? brakuje jakiegokolwiek warunku.

int i;

4p.c:107:9: error: redeclaration of 'i' with no linkageint i;

`4p.c:16:5: note: previous declaration of 'i' was here`ty czytaj czasem treść tych błędów…

`4p.c: At top level:`

```cpp
{

4p.c:115:1: error: expected identifier or '(' before '{' tokenkompilator twierdzi, że to jest „at top level”, a wcale że nie wewnątrz funkcji main. to znaczy że gdzieś nie zgadza ci się ilość klamer. i nawet widzę gdzie.

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