PDA

Visualizza la versione completa : [C] Lettura da file di operandi e operazioni


Guitar_joker87
06-05-2007, 15:48
Mi rendo conto della richiesta un p troppo pretenziosa dell'altra volta... mi siete comunque stati d'aiuto... sta volta vi chiedo solo una dritta su come fare una cosa in un programma in c:
devo leggere pi righe da un file di testo, ogni riga contiene 2 operandi (numeri interi) e un numero che indica il tipo di operazione da svolgere (tutti separati da uno spazio)...tutti e tre vanno letti e salvati come int all'interno del programma... come devo fare? :bh:
grazie...

MItaly
06-05-2007, 16:43
fopen, fscanf, fclose ti dicono niente? :fagiano:

Guitar_joker87
06-05-2007, 18:45
com' che si usano?... scusate la mia ignoranza...

oregon
06-05-2007, 19:14
Eccoti la dritta ...

per la fopen
http://www.cplusplus.com/reference/clibrary/cstdio/fopen.html

per la fscanf
http://www.cplusplus.com/reference/clibrary/cstdio/fscanf.html

e per la fclose
http://www.cplusplus.com/reference/clibrary/cstdio/fclose.html

Queste letture colmeranno sicuramente le tue lacune e gli esempi potranno servirti per iniziare a scrivere una iniziale soluzione al tuo problema.

Una volta scritta, ci risentiamo e ce la mostri se qualcosa non va ...

Guitar_joker87
07-05-2007, 12:51
grazie oregon...anche se era in inglese...allora questo legge due numeri da un file di testo chiamato prova.txt, li converte in decimale li stampa a seconda dell'operando che si vuole ottenere a gruppi di 4 bit (stampa1) o a gruppi di 16 bit (stampa2)... come faccio a usare su questi bit delle operazioni logiche e aritmetiche

#include <stdio.h>
#include <stdlib.h>
void dec2bin(unsigned int inp, char binstr[32]){
if(inp<0){
}else{int i=0;
printf("\n%u = ",inp);
for(i=0;i<32;i++){
if(inp%2==0)
binstr[i]='0';
else binstr[i]='1';
inp=inp/2;}}
}
void stampa1(char binstr[32]){
int i;
for(i=31;i>=0;i--){
if ((i==3)||(i==7)||(i==11)||(i==15)||(i==19)||(i==23 )||(i==27))
printf(" ");
printf("%c",binstr[i]);
}}
void stampa2(char binstr[32]){
int i;
for(i=31;i>=0;i--){
if (i==15)
printf(" ");
printf("%c",binstr[i]);
}}
int main(){
int i;
unsigned int a,b;
FILE *pfile;
pfile=fopen("prova.txt","r");
fscanf (pfile, "%u %u", &a,&b);
char binstr1[32],binstr2[32];
dec2bin(a, binstr1);
stampa1 (binstr1);
dec2bin(b, binstr2);
stampa1 (binstr2);
}

Guitar_joker87
07-05-2007, 12:58
e se dovessi anche metterci un controllo della saturazione cio se ho 4 bit il massimo numero 15 aloora se in una somma arrivo o supero 15 mi mette un flag di errore a 1...

oregon
07-05-2007, 14:27
Originariamente inviato da Guitar_joker87
faccio a usare su questi bit delle operazioni logiche e aritmetiche

Che vuoi dire in pratica?

Guitar_joker87
07-05-2007, 17:54
intendo and or xor not e +,-... ma potrei farlo con gli operatori unari...forse

oregon
07-05-2007, 19:54
Originariamente inviato da Guitar_joker87
intendo and or xor not e +,-... ma potrei farlo con gli operatori unari...forse

Continui a non essere chiaro ... la richiesta e' troppo generica ....

Devi fare uno xor tra quali operandi ?

Guitar_joker87
09-05-2007, 18:17
mi sono spiegato male, e il codice che ho scritto non serve a nulla...
io ho due operandi interi unsigned e su di loro devo eseguire operazioni di somma aritmetica, and, or e xor. per farlo so che bisogna usare gli operatori unari e binari:
NOT ~ (unario)
AND & (binario)
XOR ^ (binario)
OR | (binario) (da non confondere con quelli logici &&, ||)

questi fanno l'operazione specificata bit a bit.
es:
4 & 5 = 4 equivale a
0100 & 0101 = 0100
ma io devo farlo con numeri decimali rappresentabili su 32 bit ed eseguire le operazioni ogni 4 bit o ogni 16 bit

op1 2123432 op2 4236226060
op1 0 0 2 0 6 6 10 8 15 op2 12 7 15 10 14 0 12

la seconda riga stata ottenuta portando in binario l'operando della prima riga e il n binario che risultava viene diviso ogni 4 bit formando 8 operandi da 4 bit... pi chiaro adesso?
cio come faccio a fermarmi ogni 4 bit ed eseguire l'operazione solo su quei 4 0 16...?

Loading