Aiuto per esame di informatica...

ing_mecc
ciao raga... questo è il mio primo post.. speriamo possiate aiutarmi.... vi pongo un quesito..

:-D :-D

Si scriva una funzione C che riceve come parametro una stringa binaria s e ritorna:

uno se il num di caratteri 1 della stringa è magg del num di caratteri 0

zero se il num di caratteri 0 della stringa è magg del num di caratteri 1

meno uno se il num di caratteri 0 della stringa è uguale al num di caratteri 1.

Si scriva un programma main per provare la funzione. io l'ho fatto ma... azz non funzia....

ps : gli altri quesiti li scrivo dove??? help thankssss

Risposte
Cheguevilla
prova a postare quello che hai scritto, vediamo se troviamo l'errore.

gigilatrottola2
Una cosa così?

int prova(char *binary){

int i = 0, zero = 0, uno = 0;

for( ; i < strlen(binary); i++){
if(binary == '0')
zero++;
else
uno++;
}

return (zero == uno) ? -1 : ((zero < uno) ? 1 : 0);

}

superpunk733
gigilatrottola un po sbagliato il tuo prog... il for è tutto sballato (inizializzazione...) anche il return forse. Ora ci lavoro poi vi faccio sapere. Comunque è una funzione che va scritta prima di main() e poi richiamata...

superpunk733
int restituisci(string s)
{
  int risultato=0;
  int i=0;
  int uno=0;
  int zero=0;
  
  for (i=0; i<s.length();i++)    //non mi ricordo se si scrive length o lenght che ignorante:P
  {
     if (s.substr(i,1)=="0") zero++;
     else uno++;
   }
  if (zero>uno) risultato=0;
  if (zero<uno) risultato=1;
  if (zero==uno) risultato=-1;

  return risultato;
}


cosi dovrebbe andare, è piu comprensibile per uno che inizia ed è al primo esame di informatica..

ing_mecc
grazie mille raga per le riposte... non sapete quanto aiuto mi state dando... purtroppo la mia condizione non mi permette di frequentare molto e il prof è un po esigente... insomma mica faccio ing informatica.... cmq questo è quello che avevo iniziato a scrivere.... :oops: :oops: :oops:

#include

main ()

{

int a = 1;
int b = 0;
int c = -1;
char stringa[100], i;
int counter_1 = 0;
int counter_0 = 0;

printf ("Inserire la stringa binaria e * per terminare:\n");
scanf ("%s", stringa);

while ( stringa[]!= * )

{

if ( stringa[] == '0' )
counter_0 += 1;

if ( stringa[] == '1' )
counter_1 += 1;

}

if ( counter_1 > counter_0 )
printf ("Risultato:%d", a);

if ( counter_1 < counter_1 )
printf ("Risultato:%d", b);

if ( counter_1 == counter_0 )
printf ("Risultato:%d", c);



return 0;

}

Devo aver fatto un bel casino..... poi ho un altro quesito....

Quanto valgono le variabili x, y dopo l'esecuzione della seguente sequenza di istruzioni:

float x=2.0
float y=3.0
float *p1=&x
float *p2=&y

*p1 = *p1 - --y
*p2 = y - *p2 + *p1

Mi sa che sto appello lo uso per accapararmi i vari testi ... mah... :shock:

superpunk733
quando si fa una funzione di solito si scrive *prima* del main... poi nel main si richiama..

inoltre devi includere

#include
#include

stringa[] ti fa casino perche devi mettere stringa.substr(n,e) dove n e' l'indice, e e' la lunghezza della sottostringa

superpunk733
acc!! te lho scritto in c++ il prog, non in c... porca...! quindi ho sbagliato... o_O sorry
niente pure l'include, non so ke librerie ci sono in c... perdonami :D

probabilmente gigilatrottola ha ragione... ecco perche non mi risultava il suo prog per via del char! (in c nn ci sono le stringhe vero? solo array di caratteri)! comunque il for e' sbagliato credo, questo posso dirlo... ? :D quel return mi sa sempre un po strano...

gigilatrottola2
Guarda che le funzioni puoi scriverle dove vuoi.
L'importante è dichiararne il prototipo prima di usarle.

Quindi scrivi int prova(char *); prima del main...
e poi la implementi dove preferisci.


Il ciclo for: nessuna delle tre parti che lo compongono è obbligatoria. Per capirci for(; ;) è corretto (nel caso esci da lciclocon un break).

Il return:
return (zero == uno) ? -1 : ((zero < uno) ? 1 : 0);

equivale a

if(zero == uno)
return -1;
else if(zero < uno)
return 1;
else
return 0;

Nn ti ho incluso ne le librerie ne il main perche li ti si chiede di scrivere la funzione... cmq eccolo
void main(){
char *gigi = "001100101011";
printf("%d", prova(gigi));
}

gigilatrottola2
float x=2.0
float y=3.0
float *p1=&x
float *p2=&y

*p1 = *p1 - --y
*p2 = y - *p2 + *p1

Valgono entrambi 0.
*p1 = *p1 - --y equivale a x = x - (y - 1) (ed y viene effettivamente decrementato)
(edit: y viene decrementato prima della sottrazione)
quindi x = 2 - 2 = 0.
quindi dopo questa riga x = 0, y = 2

*p2 = y - *p2 + *p1
equivale a y = y - y + x
2 = 2 - 2 + 0 = 0

superpunk733
Guarda che le funzioni puoi scriverle dove vuoi.
L'importante è dichiararne il prototipo prima di usarle.


si intendevo almeno il prototipo... mi sono espresso male...

ma per quel return "strano" come fai ad essere sicuro di non sbagliare la sintassi (cioe' tipo se e' una cosa complessa non perdi "il punto?)? posso usarlo anche per il c++ ?

ing_mecc
grazie gigi.. quindi qualche cosa nel mio prog avevo fatto... non molto ma insomma qualche punticino l'avrei raggranellato... bhe almeno l'esercizio dei puntatori l'avevo fatto giusto... speriamo bene dai... qualcuno sa dove posso trovare degli esercizi dati agli esami di fondamenti di informatica per ing meccanica???? spero che qualcuno ne abbia..... :roll: :roll: :roll:

gigilatrottola2
"superpunk733":
Guarda che le funzioni puoi scriverle dove vuoi.
ma per quel return "strano" come fai ad essere sicuro di non sbagliare la sintassi (cioe' tipo se e' una cosa complessa non perdi "il punto?)? posso usarlo anche per il c++ ?


Difficilmente si vede infatti, ma ci sn casi in cui è obbligatorio. Anzi, proprio in c++ sapevo di casi in cui fosse obbligatorio. Cmq uno, soprattutto negli esami, per andare sul sicuro, puo usare la formula if, else if, else ;)

ing_mecc
siccome sono un po testa dura, ho segiuto il consiglio di usare le strutture di selezione..... che ne dite??? :? :?

#include

main ()

{

int a = 1;
int b = 0;
int c = -1;
char stringa[100], i;
int counter_1 = 0;
int counter_0 = 0;

printf ("Inserire la stringa binaria:\n");
scanf ("%s", stringa);

if ( stringa == '0' )
counter_0 += 1;
else
if ( stringa == '1' )
counter_1 += 1;

if ( counter_1 > counter_0 )
printf ("Risultato:%d", a);
else
if ( counter_1 < counter_0 )
printf ("Risultato:%d", b);
else
if ( counter_1 == counter_0 )
printf ("Risultato:%d", c);

return 0;

}

ing_mecc
mah... mi sa che non ho capito un azz... :( :( :( del resto senza seguire la lezione... e poi con quella ciofeca di testo che ho..... mondo crudele...

gigilatrottola2
L'unica cosa che nn va è che nn scorri la stringa.
Devi scorrere carattere per carattere. Io nel mio esempio la scorrevo fino in fondo, ma se tu come ultimo carattere hai * allora fai un ciclo for
for(int i = 0; stringa != '*'; i++){
if(stringa == '0')
...
}

Per il resto è ok (anche se dovevi fare una funzione e poi richiamarla nel main)

ing_mecc
grazie mille gigi... non ti posto il mio prodotto ma sappi che va da dio!!!! funzionante.... :-D :-D :-D

ora mi sono imbattuto in un file sequenziale......

"Si scriva un programma modulare in che legga dal file input.dat una sequenza di parole e le trascrive sul file output.dat dopo aver fatto scorrere di k posizioni ciascuna parola verso destra (k intero e specificato dall'utente)."

mi sono perso sul fatto di leggere da un file e scrivere in un altro...... questo è quello che ho scritto io... ho scelto le dimensioni delle parole (cioè dei vettori) a caso...

#include

main ()

{

char parola_1[20];
char parola_1[10];
char parola_1[30];
FILE *finput;
int k;

printf("Leggo le parole dal file, le faccio scorrere verso destra e le copio");

if ((finput = fopen("input.dat","r"))==NULL) /* apro finput in lettura */
printf("Il file non può essere aperto");

else
{
printf("Inserire il valore di k:\n");
scanf ("%d", &k);

/* e da qui ...... l'oblio */




:shock: :shock:

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.