Aiuto per esame di informatica...
ciao raga... questo è il mio primo post.. speriamo possiate aiutarmi.... vi pongo un quesito..
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


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
prova a postare quello che hai scritto, vediamo se troviamo l'errore.
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);
}
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);
}
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...
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..
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....

#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...



#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...

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
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
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
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... ?
quel return mi sa sempre un po strano...
niente pure l'include, non so ke librerie ci sono in c... perdonami

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... ?

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));
}
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));
}
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
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
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++ ?
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.....



"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

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;
}


#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;
}
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...



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)
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)
grazie mille gigi... non ti posto il mio prodotto ma sappi che va da dio!!!! funzionante....
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 */



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 */

