Funkcie – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkcie – C / C++ – Fórum – Programujte.comFunkcie – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
jordi18110
Newbie
5. 11. 2016   #1
-
0
-

Zdravim, potreboval by som pomoct mam toto zadanie : Riešte problém, ktorý umožní používateľovi zadať prvky štvorcovej matice A s rozmermi 4x4. Potom vypočíta priemer z prvkov na diagonále, priemer z prvkov pod diagonálou a priemer z prvkov nad diagonálou. Prvky matice sú reálne čísla a program vytvorte tak, aby rozmer matice bolo možné jednoducho meniť. Na načítanie matice a na výpočet priemerov použite funkcie. 

Problem je ze este neovladam funkcie tak ci by mi niekto mohol dat napovedu alebo tip kde si to najst a kde to pochopita co su vlastne funkcie a ako to funguje na konkretne toto pouzitie a vobec ake funkcie pouzit. Dakujem za pomoc.

Nahlásit jako SPAM
IP: 91.226.113.–
BDS+3
Věrný člen
5. 11. 2016   #2
-
0
-

#1 jordi1811

  1. měl bys psát jestli jde o c++ nebo c
  2. místo čekání, jestli ti tu náhodou někdo nenapíše d.ú., měl by ses snažit udělat něco sám, až pak případně řešit problémy na fórech.

Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
jordi18110
Newbie
5. 11. 2016   #3
-
0
-

#2 BDS
ja to v C ...ja sa len pytam ci mi vie niekto povedat nieco o funkciach kde by som sa o tom dozvedel potrebne informacie alebo mi to nejako vysvetlit neziadam o vypracovanie tohto zadania :-) proste len potrebujem informacie o funkciach lebo zatial co som sa docital som to moc nepochopil ako by sa to dalo pouzit a ako to funguje...

Nahlásit jako SPAM
IP: 91.226.113.–
BDS
~ Anonymní uživatel
745 příspěvků
5. 11. 2016   #4
-
0
-
Nahlásit jako SPAM
IP: 185.69.69.–
jordi18110
Newbie
5. 11. 2016   #5
-
0
-

#4 BDS
Ďakujem :-)

Nahlásit jako SPAM
IP: 91.226.113.–
BDS+3
Věrný člen
5. 11. 2016   #6
-
0
-
Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
jordi18110
Newbie
5. 11. 2016   #7
-
0
-

#6 BDS
jo dam sem potom riesenie ked to spravim :-)

Nahlásit jako SPAM
IP: 91.226.113.–
jordi18110
Newbie
9. 11. 2016   #8
-
0
-

#6 BDS
double **nacitanie_matice() 
{
   double **matica;
   int i, j;
   matica=malloc(a*sizeof(double)); 
   for (i=0;i<a;i++)
   {
       matica[i]=malloc(b*sizeof(double)); 
   }
 
   printf("Stvorcova matica s rozmerom 4x4.\n"); 
   for( i = 0 ; i < a ; i++)
   {
      for( j = 0 ; j < b ; j++)
      {
         printf("Vlozte prvok matice A[%d,%d].\t",i+1,j+1);
         scanf("%lf",&matica[i][j]);
      }
   }
   return matica; 
}

tak tu je funkcia na nacitanie matice...dalo by sa to spravit aj jednoduchsie ? 

Nahlásit jako SPAM
IP: 193.87.59.–
KIIV
~ Moderátor
+43
God of flame
9. 11. 2016   #9
-
0
-

#8 jordi1811
Melo by to byt:

matica=malloc(a*sizeof(double *));

jinak muzes alokovat vice pameti nebo v nejhorsim pripade mene pameti (pro double bud vice nebo nahodou stejne), nez je potreba na ulozeni "a" ukazatelu na double.

Pouzivat globalni promenne bych taky nejak moc nedoporucoval, pokud to neni absolutne nezbytne. Tady proste muzes predat rozmery jako parametry.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
jordi18110
Newbie
11. 11. 2016   #10
-
0
-

#9 KIIV
A nejde to spravit inak ? Bez tej alokace pamati a pointrov ? Nie je nato nejake uplne jednoduche riesenie ? Lebo mal by som to mat spravene co najjednoduchsie a profesorka mi ani o pointroch a alokovanie pamati nehovorila ze by tam malo byt pouzite a ja fakt neviem ako to spravit.

Nahlásit jako SPAM
IP: 91.226.113.–
jordi18110
Newbie
11. 11. 2016   #11
-
0
-

#include <stdio.h>

#define a 4
#define b 4


? nacitane_matice(double matica[a][b])
{
    int i,j;

  printf("Stvorcova matica s rozmerom 4x4.\n");
   for( i = 0 ; i < a ; i++)
   {
      for( j = 0 ; j < b ; j++)
      {
         printf("Vlozte prvok matice A[%d,%d].\t",i+1,j+1);
         scanf("%lf",&matica[i][j]);
      }
   }
   return;
}

skusam nejak takto ale neviem co mi to ma vlastne vratit ani...a ci su dobre zadane parametre funkcie 

Nahlásit jako SPAM
IP: 91.226.113.–
11. 11. 2016   #12
-
0
-

V parametru funkce máš matica[a][b], v těle funkce hned pod tím printf("Stvorcova matica s rozmerom 4x4.\n"); Tak jaká ta matice je? Podle zadání 4x4, má jít snadno změnit. Asi bych pro rozměry použil makra a pro uložení matice statické pole, pokud pod "snadno změnit" lze zahrnout nové zkompilování programu. Druhá možnost je zadání rozměrů z klávesnice a dynamická alokace paměti.

V C je identifikátor pole (= název proměnné) ukazatelem. Myslím, že funkce double nacitane_matice(double matica[a][b]) neprojde již při překladu. Obecně pokud chceš předávat pole jako parametr, předáš ukazatel a jako další parametry předáš rozměry pole. Pokud jsou rozměry pevně dány, lze si usnadnit práci tím, že funkci předáš jen ukazatel na pole.

hu 

#define A 4
#define B 4

double matica[A] [B];  //staticke pole

//funkce nacte data
void nacti_maticu(double *matica)
{
   int i, j;

   printf("matice o rozmerech %d x %d", A, B);
   for( i = 0 ; i < A ; i++)
   {
      for( j = 0 ; j < B ; j++)
      {
         printf("Vlozte prvok matice A[%d,%d].\t",i+1,j+1);
         scanf("%lf", matica[i * A + j]);
      }
   }
}
Nahlásit jako SPAM
IP: 195.178.67.–
jordi18110
Newbie
11. 11. 2016   #13
-
0
-

#12 hlucheucho
Vrelá vdaka....

#include <stdio.h>

#define A 4 
#define B 4

double matica[A][B];  //staticke pole

void nacitaj_maticu(double *matica);
void priemer_diagonaly(double a,double b,double c,double d);
void priemer_pod(double a,double b,double c);
void priemer_nad(double a,double b,double c);    

int main (void)
{
   nacitaj_maticu(*matica);

   priemer_diagonaly(matica[0][0],matica[1][1],matica[2][2],matica[3][3]);
   priemer_pod(matica[2][1],matica[3][2],matica[4][3]);
   priemer_nad(matica[1][2],matica[1][3],matica[3][4]);
   
   return 0;
}

void nacitaj_maticu(double *matica)
{
   int i, j;

   printf("matica s rozmermi %d x %d\n", A, B);
   for( i = 0 ; i < A ; i++)
   {
      for( j = 0 ; j < B ; j++)
      {
         printf("Vlozte prvok matice A[%d,%d].\t",i+1,j+1);
         scanf("%lf", &matica[i * A + j]);
      }
   }
}

void priemer_diagonaly(double a,double b,double c,double d)
{
    double p;
    p = (a + b + c + d) / 4;
    printf("priemer na diagonale je %.4lf.\n",p);
}

void priemer_pod(double a,double b,double c)
{
    double p;
    p = (a + b + c) / 3;
    printf("priemer pod diagonalou je %.4lf.\n",p);
}

void priemer_nad(double a,double b,double c)
{
    double p;
    p = (a + b + c) / 3;
    printf("priemer nad diagonalou je %.4lf.\n",p);
}

tak spravil som to takto...mam ale problem s priemermy nad a pod diagonalou ... hadze mi zle vysledky nerozumiem preco a priemer na diagonale mi vypocita vzdy spravne

Nahlásit jako SPAM
IP: 91.226.113.–
jordi18110
Newbie
12. 11. 2016   #14
-
0
-

Tak po vypise vsetkych prvkov matice som zistil ze posledny 6 prvkov nespravne zapise....skusam vselico stale sa mi nejak nedari...

Nahlásit jako SPAM
IP: 91.226.113.–
jordi18110
Newbie
12. 11. 2016   #15
-
0
-

ospravedlnujem sa chyba bola v indexovani moja chyba nevsimajte si to ...

Nahlásit jako SPAM
IP: 91.226.113.–
jordi18110
Newbie
12. 11. 2016   #16
-
0
-

#include <stdio.h>

#define A 4 
#define B 4

double matica[A][B];  //statické pole

void nacitaj_maticu(double *matica);
void priemer_diagonaly(double a,double b,double c,double d);
void priemer_pod(double a,double b,double c);
void priemer_nad(double a,double b,double c);    

int main (void)
{
   nacitaj_maticu(*matica);
   
   priemer_diagonaly(matica[0][0],matica[1][1],matica[2][2],matica[3][3]);
   priemer_pod(matica[1][0],matica[2][1],matica[3][2]);
   priemer_nad(matica[0][1],matica[1][2],matica[2][3]);
   
   return 0;
}

void nacitaj_maticu(double *matica)
{
   int i, j;

   printf("Matica s rozmermi %d x %d.\n", A, B);
   for( i = 0 ; i < A ; i++)
   {
      for( j = 0 ; j < B ; j++)
      {
         printf("Vlozte prvok matice A[%d,%d].\t",i+1,j+1);
         scanf("%lf", &matica[i * A + j]);
      }
   }
}

void priemer_diagonaly(double a,double b,double c,double d)
{
    double p;
    p = (a + b + c + d) / 4;
    printf("priemer na diagonale je %g.\n",p);
}

void priemer_pod(double a,double b,double c)
{
    double p;
    p = (a + b + c) / 3;
    printf("priemer pod diagonalou je %g.\n",p);
}

void priemer_nad(double a,double b,double c)
{
    double p;
    p = (a + b + c) / 3;
    printf("priemer nad diagonalou je %g.\n",p);
}

takze konecne riesenie

Nahlásit jako SPAM
IP: 91.226.113.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 22 hostů

Podobná vlákna

Casove funkcie — založil netman92

Funkcie a premenne — založil Eidam655

GD2 a funkcie — založil Smokie

Tabelacia funkcie — založil jakeba

Funkcie s datumom — založil Erik

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý