Programiranje C pomoć

poruka: 9
|
čitano: 1.554
|
moderatori: Danny_HR, Lazarus Long
1
+/- sve poruke
ravni prikaz
starije poruke gore
10 mjeseci
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
10 godina
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
9 mjeseci
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
4 godine
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...
10 godina
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
9 mjeseci
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
15 mjeseci
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 !
9 mjeseci
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
9 godina
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 :)

 

 

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice