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.
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;
}
@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;
}
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;
}
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.
- Samo jedan znak: "C", rade se transformacije
- Nastaju znakovi 'B' i 'D', spojeni su ovako: "BD", dalje se rade transformacije
- 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".
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 ;)
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?
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 :)
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;
}
Ideš u Split na faks? 😅
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.
- izračunati produkt neparnih elementa s neparnim indeksima iz prvog i drugog reda matrice
- izračunati sumu kvadrata parnih elemenata glavne dijagonale
- Izračunati produkt elemenata prvog i drugog retka koji imaju zbroj indeksa paran broj
- 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;
}
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]);
}