infoarena

infoarena - concursuri, probleme, evaluator, articole => Probleme externe => Subiect creat de: bieltz vlad din Decembrie 17, 2014, 14:14:49



Titlul: Iesire din matrice
Scris de: bieltz vlad din Decembrie 17, 2014, 14:14:49
http://forum.softpedia.com/topic/999507-temaiesire-din-matrice/page__hl__+iesire%20+din%20+matrice#entry16352901


Sunt cls X.


Titlul: Răspuns: Iesire din matrice
Scris de: George Marcus din Decembrie 17, 2014, 15:00:54
Ti-as sugera sa te obisnuiesti sa scrii cod mai frumos.


Titlul: Răspuns: Iesire din matrice
Scris de: bieltz vlad din Decembrie 17, 2014, 19:18:49
Am rectificat codul pentru cazul cand numaru negativ nu se afla ,,pe margine".Tot nu merge.Idei.

Cod:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream f("turist.in");
    int a[10][10],n,m,i,j,l=0,v=0,gresit,Sminima=3200,nrlinie,nrcoloana,doarS;
    f>>n>>m;
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)f>>a[i][j];
    for(i=2;i<n;i++){for(j=2;j<m;j++)
    {
    l=i;v=j;gresit=0;doarS=0;
    if(a[i][j]<0)
    {
        while(v>=1&&gresit==0)             //orizonatal stanga
        {
            v--;
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana=j;nrlinie=i;
        }
       l=i;v=j; doarS=0;gresit=0;

        while(v<=m&&gresit==0)                    //orizontal dreapta
        {
            v++;
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;
        }
        l=i;v=j; doarS=0;gresit=0;

        while(l>=1&&gresit==0)           // vertical in jos
        {
            l--;
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;

        }
            l=i;v=j; doarS=0;gresit=0;
        while(l<=n&&gresit==0)                  // vertical in sus
        {
            l--;
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;

        }
    }
}}
ofstream g("turist.out");
g<<Sminima<<endl<<nrlinie<<endl<<nrcoloana;

}


Titlul: Răspuns: Iesire din matrice
Scris de: George Marcus din Decembrie 18, 2014, 00:26:56
Ce nu merge? Daca vrei sa verifici si elementele de pe margine poti pur si simplu... sa o faci. for i:=1->n, for j:=1->m. Clarifica putin.


Titlul: Răspuns: Iesire din matrice
Scris de: bieltz vlad din Decembrie 18, 2014, 08:38:55
nu imi afiseaza ce trebuie.la cum e exemplul ala din poza imi afiseaza 520 in loc de -8 iar randul coloanei imi da 0


Titlul: Răspuns: Iesire din matrice
Scris de: George Marcus din Decembrie 18, 2014, 12:58:28
O greseala e ca faci l-- in ultimul while. In rest, am schimbat putin while-urile. Spor.

Cod:
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream f("turist.in");
    int a[10][10],n,m,i,j,l=0,v=0,gresit,Sminima=3200,nrlinie,nrcoloana,doarS;
    f>>n>>m;
    for(i=1;i<=n;i++)for(j=1;j<=m;j++)f>>a[i][j];
    for(i=2;i<n;i++){for(j=2;j<m;j++)
    {
    l=i;v=j;gresit=0;doarS=0;
    if(a[i][j]<0)
    {
    v--;
        while(v>=1&&gresit==0)       //orizonatal stanga
        {
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
            v--;
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana=j;nrlinie=i;
        }
       l=i;v=j; doarS=0;gresit=0;

v++;
        while(v<=m&&gresit==0)              //orizontal dreapta
        {
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
            v++;
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;
        }
        l=i;v=j; doarS=0;gresit=0;

l--;
        while(l>=1&&gresit==0)           // vertical in jos
        {
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
            l--;
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;

        }
            l=i;v=j; doarS=0;gresit=0;
l++;
        while(l<=n&&gresit==0)                 // vertical in sus
        {
            if(a[l][v]<0)gresit=1;
            else doarS+=a[l][v];
            l++;
        }
        if(gresit==0&&doarS<Sminima)
        {
            Sminima=doarS;nrcoloana = j;nrlinie=i;

        }
    }
}}
ofstream g("turist.out");
g<<Sminima<<endl<<nrlinie<<endl<<nrcoloana;

}


Titlul: Răspuns: Iesire din matrice
Scris de: bieltz vlad din Decembrie 18, 2014, 14:41:18
Multumesc frumos.Ma asteptam sa fi gresit mai mult :)))