Salut

Intrebari despre limbajul C++, standardul C++, STL, OOP in C++ sau alte subiecte nelegate de VisualC++
yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Salut

Post by yoyulian » 05 Dec 2012, 14:55

Cine ma poate ajuta si pe mine cu programul acesta ca nu ruleaza, si daca ati putea si sa-mi explicati unde nu am procedat corect sau ce trebuia sa scriu. Multumesc
//se citeste de la tastatura elementele unei matrice de elemente de tip float, cu dimensiunea 3x3. Se vor rearanja coloanele matricei astfel incat suma elementelor de pe o anumita coloana sa fie mai mica decat suma elementelor de pe coloana urmatoare.

Code: Select all

#include <stdio.h>
void cit_matrice(float x[3][3], int y, int z);
float sumclo(float x[3][3], int l, int c);
void afis_matrice(float  x[3][3], int y, int z);
void interschimbcol(float x[3][3], int c1, int c2);
void main(void)
{
float x[3][3], a, b, c, aux;
int pmin; 
cit_matrice(x, 3 ,3);
printf("A fost citita matricea:\n");
afis_matrice(x, 3, 3);
int sumacol[3]; 
for (int i=0; i<3; i++)
sumacol[i]=sumacol(x, 3, i); //suma elementelor de pe fiecare coloana
for (int i=0; i<3; i++)
{ pmin=i;
for(int j=i+1; j<3; j++)
{ if(sumacol[pmin]>sumacol[j])
pmin=j;
}
interschimbcol(x, i, pmin);
aux=sumacol[i];
sumacol[i]=sumacol[pmin];
sumacol[pmin]=aux;
}
printf("Dupa interschimbarea coloanelor matricea este:\n");
afis_matrice(x, 3, 3);
}//main
void cit_matrice(float x[3][3], int y, int z)
{ for (int i=0; i<y; i++)
for (int j=0; j<z; j++)
{ printf("elementul [%d][%d]=", i+1, j+1);
scanf("%f",&x[i][j]);
} 
}//citire_matrice
float sumcol(float x[3][3], int l, int c)
//l- numarul de linii, //c - numarul de coloane la care ii vom afla suma elementelor 
{
float s=0;
for (int i=0; i<l; i++)
s+=x[i][c]; 
return s;
}// sumcol
void afisare_matrice(float x[3][3], int l, int c)
{ for (int i=0; i<l; i++)
{ for(int j=0; j<c; j++)
printf("%7.2f", x[i][j]);
printf("\n");
}
}//afisare_matrice
void interschimbacol(float x[3][3], int c1, int c2) 
{
float aux; 
for (int i=0; i<3; i++) 
{ aux=x[i][c1];
x[i][c1]=x[i][c2];
x[i][c2]=aux;
}
}//interschimbare
Last edited by Marius Bancila on 06 Dec 2012, 16:32, edited 1 time in total.
Reason: taguri cod



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: Salut

Post by Ovidiu Cucu » 05 Dec 2012, 20:14

Pai nu-ti ruleaza pentru ca in primul rand nu se compileaza.
De ce nu se compileaza? Pentru ca ai erori de compilare.
De exemplu aici...

Code: Select all

   sumacol[i]=sumacol(x, 3, i); //suma elementelor de pe fiecare coloana
...compilatorul tau nu-ti spune nimic? Eu cred ca da.

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 06 Dec 2012, 15:54

Poti sa il pui indentat te rog ca nu imi dau seama de mare lucru asa . :)
Cu stima,
Daniel Constantin

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Salut

Post by yoyulian » 06 Dec 2012, 22:15

#include <stdio.h>
void cit_matrice(float x[3][3], int y, int z);
float sumclo(float x[3][3], int l, int c);
void afis_matrice(float x[3][3], int y, int z);
void interschimbcol(float x[3][3], int c1, int c2);
void main(void)
{
float x[3][3], a, b, c, aux;
int pmin;
cit_matrice(x, 3 ,3);
printf("A fost citita matricea:\n");
afis_matrice(x, 3, 3);
int sumacol[3];
for (int i=0; i<3; i++)
sumacol=sumacol(x, 3, i); //suma elementelor de pe fiecare coloana
for (int i=0; i<3; i++)
{ pmin=i;
for(int j=i+1; j<3; j++)
{ if(sumacol[pmin]>sumacol[j])
pmin=j;
}
interschimbcol(x, i, pmin);
aux=sumacol;
sumacol=sumacol[pmin];
sumacol[pmin]=aux;
}
printf("Dupa interschimbarea coloanelor matricea este:\n");
afis_matrice(x, 3, 3);
}//main
void cit_matrice(float x[3][3], int y, int z)
{ for (int i=0; i<y; i++)
for (int j=0; j<z; j++)
{ printf("elementul [%d][%d]=", i+1, j+1);
scanf("%f",&x[j]);
}
}//citire_matrice
float sumcol(float x[3][3], int l, int c)
//l- numarul de linii, //c - numarul de coloane la care ii vom afla suma elementelor
{
float s=0;
for (int i=0; i<l; i++)
s+=x[c];
return s;
}// sumcol
void afisare_matrice(float x[3][3], int l, int c)
{ for (int i=0; i<l; i++)
{ for(int j=0; j<c; j++)
printf("%7.2f", x[j]);
printf("\n");
}
}//afisare_matrice
void interschimbacol(float x[3][3], int c1, int c2)
{
float aux;
for (int i=0; i<3; i++)
{ aux=x[c1];
x[c1]=x[c2];
x[c2]=aux;
}
}//interschimbare
E bine asa black_atus.
Multumesc pentru iteresul acordat tuturora

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Salut

Post by yoyulian » 06 Dec 2012, 22:17

pentru ovidiu cucu vreau sa spun ca am am schimbat la sumcol si compilatorul imi da eroarea aceasta: warning C4244: '=' : conversion from 'int' to 'float', possible loss of data
1>.\n1.cpp(24) : error C2064: term does not evaluate to a function taking 3 arguments
1>.\n1.cpp(25) : warning C4244: '=' : conversion from 'float' to 'int', possible loss of data

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Salut

Post by yoyulian » 06 Dec 2012, 22:20

nu stiu prea multe despre c++ ca de curand am inceput sa invat si mi se pare cam greu cine poate sa imi spuna cum as putea invata usor c++, exact pas cu pas(adica explicat mai amanuntit toate chestile).

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Salut

Post by bu7ch3r » 07 Dec 2012, 10:10

@yoyulian - ALA NU E C++
@yoyulian - ALA NU E COD INDENTAT
@black_atus - nu e ca si cum iti ia 1 an sa-l indentezi tu si sa-l compilezi(sau sa-l faci sa compileze)

@yoyulian - Trebuie sa inveti ce e aia declaratie si definitie. Despre functii: in Cplusplus si nu numai declaratia trebuie sa fie fix si exact la fel intact si asemanator cu definitia.
@yoyulian - Inainte sa te apuci sa dai cu barda incearca sa ai in cap un algoritm bine pus la punct, poti sa incerci intai sa te exprimi pe foaie...
@yoyulian - Urmatoarea intrebare e: Programu meu merge si pentru alte matrici? 2x3, 4x6, 8x8 ?

Code: Select all

#include <stdio.h>
void cit_matrice(float x[3][3], int y, int z);
float sumaclo(float x[3][3], int l, int c);
void afis_matrice(float x[3][3], int y, int z);
void interschimbcol(float x[3][3], int c1, int c2);
int main(void)
{
    float x[3][3], a, b, c, aux;
    int pmin; 
    cit_matrice(x, 3 ,3);
    printf("A fost citita matricea:\n");
    afis_matrice(x, 3, 3);
    float sumacol[3]; 
    for (int i=0; i<3; i++)
        sumacol[i] = sumaclo(x, 3, i); //suma elementelor de pe fiecare coloana
    for (int i=0; i<2; i++)
    {
        pmin=i;
        for(int j=i+1; j<3; j++)
        {
            if(sumacol[i] > sumacol[j])
            {
                interschimbcol(x, i, j);
                aux=sumacol[i];
                sumacol[i]=sumacol[j];
                sumacol[j]=aux;
            }
        }

    }
    printf("Dupa interschimbarea coloanelor matricea este:\n");
    afis_matrice(x, 3, 3);
}//main

void cit_matrice(float x[3][3], int y, int z)
{ 
for (int i=0; i<y; i++)
    for (int j=0; j<z; j++)
    { 
        printf("elementul [%d][%d]=", i+1, j+1);
        scanf("%f",&x[i][j]);
    } 
}//citire_matrice

float sumaclo(float x[3][3], int l, int c)
//l- numarul de linii, //c - numarul de coloane la care ii vom afla suma elementelor 
{
    float s=0;
    for (int i=0; i<l; i++)
        s+=x[i][c]; 
    return s;
}// sumcol

void afis_matrice(float x[3][3], int l, int c)
{ 
    for (int i=0; i<l; i++)
    {
    for(int j=0; j<c; j++)
        printf("%7.2f", x[i][j]);
    printf("\n");
    }
}//afisare_matrice

void interschimbcol(float x[3][3], int c1, int c2) 
{
    float aux; 
    for (int i=0; i<3; i++) 
    {
        aux=x[i][c1];
        x[i][c1]=x[i][c2];
        x[i][c2]=aux;
    }
}//interschimbare 
Cu stima,
Lupu Claudiu

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 07 Dec 2012, 12:57

eu vad alte erori :)
- in functia main() ai declarat pe i de 2 ori deci in al doilea for poti sa lasi doar "for (i=0; i<2; i++)".
- main() trebuie sa iti returneze un int deci poti pune "return 0;" dupa afis_matrice(x, 3, 3);
- nu stiu cu ce compilezi... eu acum am folosit un compilator foarte vechi, Turbo C++ care imi este foarte drag pentru practic help-ul lui m-a invatat ce fac primele functii. dar daca iti dispare consola dupa ce rulezi programul poti include headerul conio.h (#include<conio.h>) si poti pune functia "getch();" inainte de "return 0;". In acest mod consola sta deschisa pana tastezi ceva si asa poti vedea rezultatele programului.

Uite ce am obtinut:

A fost citita matricea:
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00
Dupa interschimbarea coloanelor matricea este:
1.00 2.00 3.00
4.00 5.00 6.00
7.00 8.00 9.00

Te-am scapat de erori.
Acum uita-te la algoritm pentru ca nu e corect.( nu "interschimba" nimic :) )
Bafta.
Cu stima,
Daniel Constantin

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 07 Dec 2012, 13:04

M-am uitat mai bine peste cod :))
Face interschimbare. Am pus eu elementele in ordine crescatoare :))
Ma gandeam ca interschimba liniile cu coloanele fara nici o relatie dupa care sa faca asta.
Acum am vazut "if(sumacol > sumacol[j])".
Oricum pot gresi pt ca nu m-am uitat in mare.
Salut.
Cu stima,
Daniel Constantin

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 07 Dec 2012, 13:07

PS: Codul peste care m-am uitat e cel de la @bu7ch3r... cel indentat :)
Avea dreptate cand spunea ca nu dureaza foarte mult sa-l indentezi doar ca la munca nu pot copia cod de pe internet via copy&paste. :)
Cu stima,
Daniel Constantin

User avatar
bu7ch3r
Membru++
Membru++
Posts: 326
Joined: 17 May 2011, 15:17
Judet: Iaşi
Location: Sofia
Contact:

Re: Salut

Post by bu7ch3r » 07 Dec 2012, 14:41

@black_atus - de ce nu dai copy paste la codul meu in compilatorul ala de care ziceai? Nu numai ca e indentat, dar... si merge! SURPRIZA DE MOS NICOLAE !!! :))))) L-am modificat in timp ce-l indentam:D

P.S. Eu am folosit CODEPAD :-??
Cu stima,
Lupu Claudiu

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Salut

Post by yoyulian » 07 Dec 2012, 22:30

Pai daca ii facem ceva modificari trebuie sa merge si pentru matrici [2][3], [3][4], [8][8], tot cu acelasi algoritm, cred. Ma poate ajuta cineva, sa imi spuna cum pot invata usor c++(explicate pas cu pas), ca oricum nu prea inteleg multe chestii ca acest program am copiat dintr-o carte, ca am avut o tema si imi dadea eroare de compilare.

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 09 Dec 2012, 19:20

Pai asta am facut ...
Nu mi-a mers cu bucata asta de cod
"for (int i=0; i<3; i++)
sumacol = sumaclo(x, 3, i); //suma elementelor de pe fiecare coloana
for (int i=0; i<2; i++)
{"
i-ul e declarat de 2 ori

iar functia "int main()" nu returneaza nimic...
Poate gresesc ... :)
Cu stima,
Daniel Constantin

yoyulian
Junior
Junior
Posts: 33
Joined: 05 Dec 2012, 14:53
Judet: Cluj

Re: Salut

Post by yoyulian » 09 Dec 2012, 23:38

Pai daca ii facem ceva modificari trebuie sa merge si pentru matrici [2][3], [3][4], [8][8], tot cu acelasi algoritm, cred. Ma poate ajuta cineva, sa imi spuna cum pot invata usor c++(explicate pas cu pas), ca oricum nu prea inteleg multe chestii ca acest program am copiat dintr-o carte, ca am avut o tema si imi dadea eroare de compilare.

User avatar
black_atus
Membru
Membru
Posts: 139
Joined: 20 Jun 2012, 10:20
Judet: Prahova
Location: Ploiesti

Re: Salut

Post by black_atus » 10 Dec 2012, 08:54

Nu stiu... Cred ca ai putea sa incepi cu vreo carte de informatica de liceu cu C++.In liceu se faceau matrici. Eu am facut Pascal dar pasii sunt aceiasi. :)
Cu stima,
Daniel Constantin

Post Reply