programma in c

Messaggioda sara09 » 23/03/2019, 11:45

buongiorno devo calcolare l'output di questo programma ma non riesco a capire che funzione svolge s=-s potete aiutarmi:
#include<stdio.h>
int main()
{
int i, j;
double s = 1 ;
int M [][4]= { {0, 'a', 0, 'b'},
{'c', 0, 'd', 0},
{0, 'e', 0, 'f'},
{'g', 0, 'h', 0} };

for ( i = 0; i < 4; i++){
s = -s ;
for(j = 0; j < 4; j++)

if(s > 0)
printf(" %d %d\n", i, j);
}

return 0;
}
sara09
Average Member
Average Member
 
Messaggio: 42 di 652
Iscritto il: 11/02/2019, 19:04

Re: programma in c

Messaggioda vict85 » 23/03/2019, 14:26

Quella espressione cambia il segno della variabile s. Non mi sembra che ti serva sapere altro. Nota che il segno non cambia all'interno del ciclo più interno e quindi il for e l'if "commutano" (ovvero puoi portare l'if fuori dal ciclo).

A parte questo, il questa sezione si richiede di inserire il codice all'interno del tag code
Codice:
[code][/code]
vict85
Moderatore
Moderatore
 
Messaggio: 9591 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: programma in c

Messaggioda sara09 » 23/03/2019, 16:38

vict85 ha scritto:Quella espressione cambia il segno della variabile s. Non mi sembra che ti serva sapere altro. Nota che il segno non cambia all'interno del ciclo più interno e quindi il for e l'if "commutano" (ovvero puoi portare l'if fuori dal ciclo).

A parte questo, il questa sezione si richiede di inserire il codice all'interno del tag code
Codice:
[code][/code]


Quindi se i = 0 e e s=1 di conseguenza J=0 ma 1 è maggiore di 0 quindi stampa 0,0?
sara09
Average Member
Average Member
 
Messaggio: 43 di 652
Iscritto il: 11/02/2019, 19:04

Re: programma in c

Messaggioda vict85 » 23/03/2019, 21:06

Non direi. Se i = 0, s diventa -1, quindi entra nel ciclo negativo e non viene stampato nulla. Quindi i diventa 1, s diventa 1 e entra nel ciclo positivo...
vict85
Moderatore
Moderatore
 
Messaggio: 9593 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: programma in c

Messaggioda sara09 » 24/03/2019, 08:57

vict85 ha scritto:Non direi. Se i = 0, s diventa -1, quindi entra nel ciclo negativo e non viene stampato nulla. Quindi i diventa 1, s diventa 1 e entra nel ciclo positivo...


Ma quindi s cambia ad ogni ciclo?
sara09
Average Member
Average Member
 
Messaggio: 44 di 652
Iscritto il: 11/02/2019, 19:04

Re: programma in c

Messaggioda vict85 » 24/03/2019, 16:32

Secondo te? Cosa comprendi di quel codice?

Per comodità te l'ho riscritto qui, formattato ed eliminando inutili distrazioni (in particolare ho mosso la dichiarazione delle variabili dei cicli nel ciclo stesso, ho eliminato M perché non veniva utilizzata, ho dichiarato s come intero perché assume solo i valori \(\displaystyle 1 \) e \(\displaystyle -1 \), ho toldo il return 0; perché è implicito e aggiunto il void nel main perché più esplicito ).
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        for (int j = 0; j < 4; j++)
        {
            if (s > 0)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}

Quello che intendevo prima è che il codice precedente è equivalente a:
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        if (s > 0)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}}

o anche a
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        if (s == 1)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}


Cosa succederebbe se invece avessi il seguente?
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        if (s == 1)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
        s = -s;
    }
}


Ovviamente esiste un codice equivalente che non necessita della variabile s. Ti invito a cercarlo.
vict85
Moderatore
Moderatore
 
Messaggio: 9594 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: programma in c

Messaggioda sara09 » 24/03/2019, 19:26

vict85 ha scritto:Secondo te? Cosa comprendi di quel codice?

Per comodità te l'ho riscritto qui, formattato ed eliminando inutili distrazioni (in particolare ho mosso la dichiarazione delle variabili dei cicli nel ciclo stesso, ho eliminato M perché non veniva utilizzata, ho dichiarato s come intero perché assume solo i valori \(\displaystyle 1 \) e \(\displaystyle -1 \), ho toldo il return 0; perché è implicito e aggiunto il void nel main perché più esplicito ).
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        for (int j = 0; j < 4; j++)
        {
            if (s > 0)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}

Quello che intendevo prima è che il codice precedente è equivalente a:
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        if (s > 0)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}}

o anche a
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        s = -s;
        if (s == 1)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
    }
}


Cosa succederebbe se invece avessi il seguente?
Codice:
#include <stdio.h>

int main(void)
{
    int s = 1;
    for (int i = 0; i < 4; i++)
    {
        if (s == 1)
        {
            for (int j = 0; j < 4; j++)
            {
                printf(" %d %d\n", i, j);
            }
        }
        s = -s;
    }
}


Ovviamente esiste un codice equivalente che non necessita della variabile s. Ti invito a cercarlo.

Allora i=0 e j=0 non lo stampa perché s risulta uguale a -1 ma perché stampa i=1 e j=0 ?
sara09
Average Member
Average Member
 
Messaggio: 45 di 652
Iscritto il: 11/02/2019, 19:04

Re: programma in c

Messaggioda vict85 » 25/03/2019, 15:41

Ogni istruzione all'interno di un ciclo è eseguita ogni volta che il ciclo viene eseguito. Per esempio, cosa stampa a video questo codice?
Codice:
#include <stdio.h>

int main( void )
{
    int s = 1;
    for( int i = 0; i != 4; ++i )
    {
        s = -s;
        if( s > 0 )
        {
            printf( "%c", 'a' );
        }
        else
        {
            printf( "%c", 'b' );
        }
    }
    printf( "\n" );
}
vict85
Moderatore
Moderatore
 
Messaggio: 9598 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin

Re: programma in c

Messaggioda sara09 » 25/03/2019, 16:00

vict85 ha scritto:Ogni istruzione all'interno di un ciclo è eseguita ogni volta che il ciclo viene eseguito. Per esempio, cosa stampa a video questo codice?
Codice:
#include <stdio.h>

int main( void )
{
    int s = 1;
    for( int i = 0; i != 4; ++i )
    {
        s = -s;
        if( s > 0 )
        {
            printf( "%c", 'a' );
        }
        else
        {
            printf( "%c", 'b' );
        }
    }
    printf( "\n" );
}

scusa ma anche in questo caso s = -1 quindi -1<0 quindi non stampa nulla perché non ce un incremento di s


ma nel mio caso avviene cosi :allora io so che s=-1 quindi tutti gli i=0 non li stampa perché s risulta minore di 0, poi s=1 quindi 1>0 e stampa tutti quelli con i=1 poi s=-1 quindi non stampa tutti quelli che hanno coordinata i=2 e poi s=1 e stampa tutti quelli con i=3
sara09
Average Member
Average Member
 
Messaggio: 46 di 652
Iscritto il: 11/02/2019, 19:04

Re: programma in c

Messaggioda vict85 » 25/03/2019, 20:25

Vorrei farti notare che:
  1. C'è un else,
  2. l'istruzione s=-s viene eseguita 4 volte (una per esecuzione del ciclo).
  3. printf("\n"); viene sempre eseguita.
Quindi il codice che ti ho scritto stampa a video:
Codice:
baba


Nel tuo problema, il ciclo più interno stampa solo le righe di indice dispari. Ovvero:
Codice:
 1 0
 1 1
 1 2
 1 3
 3 0
 3 1
 3 2
 3 3


Cosa stampa a video questo?
Codice:
#include <stdio.h>

int main( void )
{
    int s = 2;
    printf("%d, ", s);
    s += s;
    printf("%d, ", s);
    s += s;
    printf("%d, ", s);
    s += s;
    printf("%d, ", s);
    s += s;
    printf("%d, ", s);
    s += s;
    printf("%d, ", s);
    s += s;
    printf("%d\n", s);
}

e questo?
Codice:
#include <stdio.h>

int main( void )
{
    int s = 1;
    for( int i = 0; i != 4; i++)
    {
        printf("%d, ", s);
        s += s;
    }
    printf("%d\n");
}
vict85
Moderatore
Moderatore
 
Messaggio: 9599 di 19253
Iscritto il: 16/01/2008, 00:13
Località: Berlin


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite