Programiranje C pomoć

poruka: 12
|
čitano: 6.778
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
6 godina
neaktivan
offline
Programiranje C pomoć

Imam problem sa jednim zadatkom, treba dvije zasebne matrice spojiti u jednu veliku, npr. a[15][3] i b[15][3] treba staviti u matricu mat[15][6].

Sve mi dobro ispisuje osim što mi prvi redak stavi na zadnje mjesto.

Ovo je kod pa ako ne neko volja pomoći bio bi jako zahvalan.

Hvala.

 

int a[6], b[6], mat[15][3], mat1[15][3], i, j, k, m, brojac=0, brojac1=0, velikamat[15][6], p=0;
for (i=0; i<6; i++)
{
scanf ("%d", &a[i]);
}
for (i=0; i<6; i++)
{
scanf ("%d", &b[i]);
}
for (i=0; i<15; i++)
{
for (j=0; j<3; j++)
{
mat[i][j] = 0;
brojac++;
for (k=0; k<6; k++)
{
if (a[k] == brojac)
{
mat[i][j] = brojac;
}
}
}
}

for (i=0; i<15; i++)
{
for (j=0; j<3; j++)
{
mat1[i][j] = 0;
brojac1++;
for (m=0; m<6; m++)
{
if (b[m] == brojac1)
{
mat1[i][j] = brojac1;
}
}
}
}


for (i=0; i<15; i++)
{
for (j=0; j<3; j++)
{
velikamat[i][j] = mat[i][j];
}
}

for (i=0; i<15; i++)
{
for (j=3; j<6; j++, p++)
{
velikamat[i][j] = mat1[i][p];
}
}

for (i=0; i<15; i++)
{
printf ("\n");
for (j=0; j<6; j++)
{
printf ("%3d", velikamat[i][j]);
}

Poruka je uređivana zadnji put ned 19.11.2017 16:41 (Sakoni).
 
0 0 hvala 0
16 godina
neaktivan
offline
Programiranje C pomoć

Kad u veliku matricu unosis drugu matricu ne resetiras brojac p.

Kad to popravis u oba niza unesi 1, 2, 3, 43, 44, 45 i vidjet ces da su prvi i zadnji red velike matrice popunjeni brojevima u tom redosljedu.

 
0 0 hvala 0
6 godina
neaktivan
offline
Programiranje C pomoć

Pozdrav! 

 

Nova sam u programiranju (C) i trebala bih malu pomoc/savjet. Trenutno pokusavam savladati pokazivace te mi zadatak glasi ovako: Omoguciti korisniku unos 4 ´ < m < 21 vrijednosti u polje cijelih brojeva. Odrediti i na ekran ispisati element s najvecom i element s najmanjom vrijednosti. Koristiti pokazivacku notaciju za pristup elementima polja.

 

Molim ako netko moze pogledati i uputiti me gdje sam pogrijesila. Unaprijed hvala! :) 

 

#include <stdio.h>

 

int main(){
int m, i, *pa;

do{scanf("%d", &m);}

while(m <= 4 || m >=21);

int a[m];
pa = &a[0];
int *pmax, *pmin;
pmax = pmin = &a[0];

for (i = 0; i < m; i++) {
  printf("\nUpisi %d broj: ", i + 1);
  scanf("%d", pa+i);}

for (i = 0; i < m; i++) {
  if(*pmin > *(pa+i)){
     *pmin = *(pa+i);}

  else if (*pmax < *(pa+i)){
     *pmax = *(pa+i);}

}

 

printf("\nNajveci broj polja je %d", *pmax);

printf("\nNajmanji broj je %d", *pmin);

system("pause");

return 0;
}

 
0 0 hvala 0
10 godina
offline
Re: Programiranje C pomoć

@Pocetnik2310

 

Probaj ovo dole, treba šljakati.

 

Problem je bio što u C(bar na mom compileru), nije smjelo biti int a[m], nego se rješenju doskočilo, preko globalne varijable. E, da možeš umjesto 20, staviti 17 da bude u duhu zadatka u MAX_SIZE.

 


#include <stdio.h>

#define MAX_SIZE 20

int main() {
int m, i, *pa;
do { scanf("%d", &m); } while (m <= 4 || m >= 21);

int a[MAX_SIZE];
pa = &a[0];
int *pmax, *pmin;
pmax = pmin = &a[0];

for (i = 0; i < m; i++) {
printf("\nUpisi %d broj: ", i + 1);
scanf("%d", pa + i);
}

for (i = 0; i < m; i++) {
if (*pmin > *(pa + i)) {
*pmin = *(pa + i);
}

else if (*pmax < *(pa + i)) {
*pmax = *(pa + i);
}

}

printf("\nNajveci broj polja je %d", *pmax);
printf("\nNajmanji broj je %d", *pmin);

system("pause");
return 0;
}

Panzerkampfwagen.Dinamo Zagreb.Matija.Leaving or dead, always ahead...
16 godina
neaktivan
offline
Programiranje C pomoć

Prvo,  ne možeš varijablom izvršiti statičku alokaciju memorije niza, to možeš jedino konstantom.

Dakle, trebaš izvršiti dinamičku alokaciju memorije niza a to napraviš pomoću funkcije malloc.

Ne zaboraviti na dealokaciju niza kad više nije potreban da ne bi memorija ostala zauzeta. To radimo pomoću funkcije free.

 

Drugo, varijable pmin i pmax kojima tražimo minimum i maximum niza su pokazivači, dakle pravilo po kojem radimo je sljedeće. Ako je vrijednost na koju pokazuje pmin veća od vrijednosti na koju pokazuje (a + i) tada pokazivač  pmin treba pokazivati na adresu (a + i).

 

Treće, sad smo već kod preglednosti programa, ne treba ti uopće posebna petlja kojom tražiš minimum i maximum niza, to možeš napraviti u petlji kod unosa elemenata u niz.

 

 

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



int main()
{
   int m, i, *pmax, *pmin;
   do { scanf_s("%d", &m); } while (m <= 4 || m >= 21);

   int* a = (int*)malloc(sizeof(int)* m);
   pmax = pmin = a;

   for (i = 0; i < m; i++) {
      printf("\nUpisi %d broj: ", i + 1);
      scanf_s("%d", a + i);
      if (*pmin > *(a + i)) pmin = (a + i);
      else if (*pmax < *(a + i)) pmax = (a + i);
   }

   printf("\nNajveci broj polja je %d", *pmax);
   printf("\nNajmanji broj je %d", *pmin);
   free(a);
   return 0;
}

 

 

Poruka je uređivana zadnji put uto 12.12.2017 14:17 (Floki).
 
2 0 hvala 2
6 godina
neaktivan
offline
Programiranje C pomoć

Da li bi mi netko mogao dati savjet ili ideju kojom logikom bih trebo ovo rijesiti?

Vec neko vrijeme se mucim sa ovime..

Zadatak:

Mirko igra zanimljivu igru - uzme jedno slovo abecede i nad njim radi transformacije. Naime, iz jednog slova, u idućem koraku igre bit će dva slova, u sljedećem 4, zatim 8, itd.. Igra prestaje kada bi idućom transformacijom izišao izvan abecede.

On na početku izabere dva broja -20 <= x <= 0, 0 <= y <= 20, te pomoću njih radi korake transformacije.
Jedna transformacija jednog znaka se radi tako da se od znaka c stvaraju dva znaka: (c+x) i (c+y). Primjerice, ako je x = -1 i y = 1, a početni znak je slovo C, igra bi išla ovim slijedom:
  1. Samo jedan znak: "C", rade se transformacije
  2. Nastaju znakovi 'B' i 'D', spojeni su ovako: "BD", dalje se rade transformacije
  3. Iz znaka B nastaju A i C, a iz znaka D nastaju C i E, dobiva se niz: "ACCE". Transformacije se više ne rade jer bi s idućom transformacijom izašli "izvan" abecede - ne postoji znak koji je manji od "A". 
Potrebno je, za početni znak c (koji se učitava sa standardnog ulaza) i brojeve x i y (također učitano sa standardnog ulaza), ispisati sve korake transformacije. Ukoliko učitani znak nije veliko slovo abecede ili x ili y nisu u dobrom intervalu, ponoviti cijeli postupak učitavanja. 
 
0 0 hvala 0
6 godina
offline
Re: Programiranje C pomoć

Ne želim ti servirat rješenje, al evo jedna smjernica, na slici ti je ASCII kod, slika je u pythonu jer mi je bio pri ruci, al logika u svakom jeziku je ista ;)

Trust nobody, become the best !
6 godina
neaktivan
offline
Programiranje C pomoć

To mi je jasno,ali ne znam kako bih izveo petlju tj. gdje da spremam znakove pa da ih onda i citam jer se povecavaju sa kvadratom?

 

 

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje C pomoć
Igor971 kaže...

To mi je jasno,ali ne znam kako bih izveo petlju tj. gdje da spremam znakove pa da ih onda i citam jer se povecavaju sa kvadratom?

 

 

 

Mozes koristiti dva niza. U jednom imas trenutno stanje, a u drugom radis novo i tako u krug.

 

Primjer sa tvoje slike: P -2 1

 

Pocetak

NIZ 1: P

NIZ 2: prazan

 

1. iteracija - dobijes nove znakove i spremis ih u niz 2

NIZ 1: P

NIZ 2: NQ

 

2. iteracija - radis isto samo sta ti je sada NIZ 2 onaj koji ima trenutno stanje, a NIZ 1 prebrises sa novim vrijednostima. Ako ti je lakse, mozes i NIZ 2 kopirati u NIZ 1, pa ti je opet NIZ 1 onaj koji ima trenutno stanje

NIZ 1: LOOR

NIZ 2: NQ

 

3. iteracija ..

NIZ 1: LOOR

NIZ 2: JMMPMPPS

 

I tako dalje :)

 

 

3 godine
neaktivan
offline
Programiranje C pomoć

Pozdrav, imam problem sa zadatkom: funkcija koja računa sumu i produkt kubova negativnih brojeva u nizu cijelih brojeva. Pokusavam postaviti uvjet za negativne brojeve ali ne ide pa ako moze mala pomoc.

#include<stdio.h>

int funkcija(int niz[],int n,int* ps,int* pp)
{
int i,j,x;
for (i=0;i<=n;++i)
niz[i]=niz[i]*niz[i]*niz[i];
for(j=0;j<n;++j)
{
*ps = *ps+niz[j];
*pp = *pp *niz[j];
}


}

int main()
{
int s=0;
int p=1;
int niz[]={1,2,-4,5};
int b = sizeof(niz)/sizeof(niz[0]);
funkcija(niz,b,&s,&p);
printf("suma je %d ,a produkt je %d\n",s,p);
return 0;
}

 

 
0 0 hvala 0
12 godina
odjavljen
offline
Re: Programiranje C pomoć
Ideš u Split na faks? 😅
3 godine
neaktivan
offline
Programiranje C pomoć

Evo ti jos neki zadatci za pomoc

Napravite program koji će omogućiti učitavanje kvadratne matrice reda n, n<10. Matricu ispišite u tabelarnom obliku.

  1. izračunati produkt neparnih elementa s neparnim indeksima iz prvog i drugog reda matrice
  2. izračunati sumu kvadrata parnih elemenata glavne dijagonale
  3. Izračunati produkt elemenata prvog i drugog retka koji imaju zbroj indeksa paran broj
  4. Ispisati sve elemente niza čiji je zbroj znamenaka paran. Pored svakog elementa ispisati u kojem se redku i stupcu nalazi.

 

 

 #include<stdio.h>

#include <string.h

#include <ctype.h>

 

void main() {

    int A[3][3];

 

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 3; j++) {

            printf("Upisite clan na poziciji A[%d][%d]: ", i, j);

            scanf("%d", &A[i][j]);

        }

    }

 

    // a)

 

    int produkt = 1;

    for (int i = 0; i < 2; i++) {

        for (int j = 0; j < 3; j++) {

            if (A[i][j] % 2 != 2 && i % 2 != 0 && j % 2 != 0) {

                produkt *= A[i][j];

            }

        }

    }

 

    printf("\nProdukt neparnih brojeva 1. i 2. redka iznosi: %d", produkt);

 

    // b)

 

    int suma = 0;

    for (int i = 1; i < 3; i++) {

        if (A[i][i] % 2 == 0) {

            suma += A[i][i] * A[i][i];

        }

    }

 

    printf("\nSuma kvadrata parnih elemenata glavne dijagonale je: %d", suma);

 

    // c)

 

    produkt = 1;

    for (int i = 0; i < 2; i++) {

        for (int j = 0; j < 3; j++) {

            if ((i + j) % 2 == 0) {

                produkt *= A[i][j];

            }

        }

    }

 

    printf("\nProdukt elemenata koji imaju parni zbroj indeksa u 1. i 2. redku iznosi: %d\n", produkt);

   

    // d)

 

    int z, broj;

    for (int i = 0; i < 3; i++) {

        for (int j = 0; j < 3; j++) {

            broj = A[i][j];

            suma = 0;

 

            while (broj > 0) {

                z = broj % 10;

                suma += z;

                broj /= 10;

            }

 

            if (suma % 2 == 0) {

                printf("\nElement na poziciji A[%d][%d] ima parni zbroj znamenaka.", i, j);

            }

       }

    }

 

    return;

}

 
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice