Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...

De unde cumparati suspensii / gar...
 [UNDE] Reconditionare obiecte lemn

Infiltratii casa noua

sugestie usa interior

ANAF si plata la selfpay
 Imprimanta ciss rezista perioade ...

Garmin fēnix 7 / PRO / Saphi...

Care sunt cele mai mari regrete a...

Alfa Romeo Stelvio 2.2 jtd
 Intrebari srl nou

La multi ani @AndReW99!

Alegere masina £15000 uk

TVR vrea sa lanseze o platforma d...
 

Matrice in C++

* - - - - 1 votes
  • Please log in to reply
11 replies to this topic

#1
Alexandru0101

Alexandru0101

    New Member

  • Grup: Junior Members
  • Posts: 5
  • Înscris: 07.10.2018
salut, ma poate ajuta si pe mine cineva, un incepator in programare in c, cu elaborarea acestui program?

Banca BTR a început utilizarea unui nou scaner pentru prelucrarea numerelor cecurilor utilizate. Scanerul transformă liniile orizontale şi verticale ale numerelor în simboluri ASCII '|' (cod ASCII 124) şi '_' (cod 95) corespunzător.
Astfel, după scanare se formează o consecutivitate de linii verticale, orizontale şi spaţii. Se ştie, că fiecare cec are un număr din 9 cifre şi pentru fiecare număr se îndeplineşte condiţia: (d1+2d2+...+9d9) mod 11 = 0, unde di —  o cifră a numărului. Cifrele se numerotează de la dreapta spre stânga: d9d8d7d6d5d4d3d2d1.
În procesul de scanare apar erori.
Scrieţi un program, care determină numărul corect al cecului, dacă se ştie că:
• Dacă numărul citit este  admisibil pentru cec , atunci el este corect;
• E citită greşit nu mai mult de o cifră;
• La scanare nu apar linii suplimentare.
Input
Fişierul de intrare conţine imaginea scanată de înălţime 3 şi lungime 27 simboluri.  Fiecare cifră ocupă un pătrat de dimensiunea 33.
Output
Fişierul conţine sau numărul corect al cecului sau mesajul failure, dacă numărul nu poate fi restabilit, sau mesajul ambiguous, dacă există mai multe soluţii.
Exemplu input
_  _    _  _  _  _  _
  | _| _| |_||_ |_ | |_||_|
  ||_  _| | _||_|   | |_| _| Exemplu output
123456789

Edited by Alexandru0101, 07 October 2018 - 18:24.


#2
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006
posteaza ce ai reusit sa faci pana acum

#3
Alexandru0101

Alexandru0101

    New Member

  • Grup: Junior Members
  • Posts: 5
  • Înscris: 07.10.2018
#include <stdio.h>

int main() {int i;
    double a[10],n;
    scanf("%d",&n);
    for(i=1;i<n;i++){scanf("%d",a[i]);}
  
    for(a[i]=0;i<n;i++){
if(a[i]==1){printf("   \n | \n | ");}
  if(a[i]==2){printf(" _ \n _|\n|_ ");}
   if(a[i]==3){printf(" _ \n _|\n _|");}
    if(a[i]==4){printf("   \n|_|\n  |");}
if(a[i]==5){printf(" _ \n|_ \n _|");}
  if(a[i]==6){printf(" _ \n|_ \n|_|");}
   if(a[i]==7){printf(" _ \n  |\n  |");}
    if(a[i]==8){printf(" _ \n|_|\n|_|");}
if(a[i]==9){printf(" _ \n|_|\n _|");}

    }
  
}

am incercat mai intai sa atribui unei cifre(element al tabloului) secventa care imi trebuie, iar programul nu afiseaza nimic
stiu ca trebuie sa creez un fisier, dar asta mai tarziu, acum am vrut sa vad daca atribuie aceste valori

imi puteti da un sfat va rog cum sa corectez?

#4
_Smiley_

_Smiley_

    Guru Member

  • Grup: Senior Members
  • Posts: 20,026
  • Înscris: 24.02.2006
daca inteleg eu bine problema, tu trebuie sa citesti 81 de caractere (grupate pe 3 linii), nu double-uri.

#5
Alexandru0101

Alexandru0101

    New Member

  • Grup: Junior Members
  • Posts: 5
  • Înscris: 07.10.2018

View Post_Smiley_, on 08 octombrie 2018 - 07:04, said:

daca inteleg eu bine problema, tu trebuie sa citesti 81 de caractere (grupate pe 3 linii), nu double-uri.
#include<stdio.h>

int main(){
    FILE *f;
    int i, j;
    f = fopen("problema29.txt", "r");
    if (f==NULL) perror("error opening file");
    else{}
    char a[3][3];
    for(i = 0; i < 3; i++)
    for(j = 0; j < 3; j++){
    fscanf(f, "%c", &a[i][j]);
    //printf("%c", a[2][2]);
    for (i = 0; i < 3; i++)
    for(j = 0;j<3;j++) {
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]==' ' && a[1][2]=='|' && a[2][0]=='|' && a[2][1]=='_' && a[2][2]=='|')   printf("0");
if (a[0][0]==' ' && a[0][1]==' ' && a[0][2]==' ' && a[1][0]==' ' && a[1][1]=='|' && a[1][2]==' ' && a[2][0]==' ' && a[2][1]=='|' && a[2][2]==' ')   printf("1");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]=='|' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]==' ' && a[2][0]==' ' && a[2][1]=='_' && a[2][2]==' ')   printf("2");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]==' ' && a[1][1]=='_' && a[1][2]=='|' && a[2][0]==' ' && a[2][1]=='_' && a[2][2]=='|')   printf("3");
if (a[0][0]==' ' && a[0][1]==' ' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]=='|' && a[2][0]==' ' && a[2][1]==' ' && a[2][2]=='|')   printf("4");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]==' ' && a[2][0]==' ' && a[2][1]=='_' && a[2][2]=='|')   printf("5");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]==' ' && a[2][0]=='|' && a[2][1]=='_' && a[2][2]=='|')   printf("6");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]==' ' && a[1][1]==' ' && a[1][2]=='|' && a[2][0]==' ' && a[2][1]==' ' && a[2][2]=='|')   printf("7");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]=='|' && a[2][0]=='|' && a[2][1]=='_' && a[2][2]=='|')   printf("8");
if (a[0][0]==' ' && a[0][1]=='_' && a[0][2]==' ' && a[1][0]=='|' && a[1][1]=='_' && a[1][2]=='|' && a[2][0]==' ' && a[2][1]=='_' && a[2][2]=='|')   printf("9");
    fclose(f);}char a[i][j];
    /*FILE *f1;
    f1=fopen("output.txt","w");
    fprintf(f1,"%s",a[i][j]);
    fclose(f1);*/
    }
}
am modificat putin, dar programul nu vrea sa citeasca din fisier si sa scie in altul

#6
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018
Ce ai tu se numeste: Display-ul BSD:

View PostAlexandru0101, on 07 octombrie 2018 - 18:21, said:

Exemplu input
_  _    _  _  _  _  _
  | _| _| |_||_ |_ | |_||_|
  ||_  _| | _||_|   | |_| _| Exemplu output
123456789
In primul rand ne construim graficul de referinta, care este matricea logica a cifrei 8 ( toate pozitiile sunt ocupate de o linie)
Ne alegem un sens de codificare(fie acesta orar sau trignometric):Sa luam sensul orar.
Ne alegem si pozitia de parcurgere pt codificare: pt fiecare reprezentare grafica a cifrei, sa plecam din coltzul stanga-sus

Asadar pt fiecare reprezantare grafica a unui cifre, plecam din coltul stanga sus , in sens orar (ca asa am ales eu)

Atunci matricea logica corespunzatoare cifrei 8 va avea toate
segmentele ocupate.Asta inseamna ca virgula codificarea  binara corespunzatoare matricei logice pentru numarul 8,  va fi: 1111111 (7 segemente toate ocupate)

Cifra 1 va avea atunci codificarea : 0000011
Cifra 2 : 01101101
Si tot asa (unde 1 segment ocupat, 0 spatiu liber) si cu sensul si pozitia specificate mai sus de mine.(daca iti alegi alta pozitie de plecare si alt sens, atunci vei
avea alte codificare binare insa tot pe 7 segmente)

Ce trebuie sa faci tu este:
sa stochezi reprezentarea grafica din fisier intr-o matrice de charuri de   3 linii si (9 X 3) coloane
sa stochezi intr-un vector, codificarile binare pt fiecare cifra .
sa creezi interpretorul de cifra care :
intr-o bucla for va citi la ficare pas, configuratia grafica a  fiecarei cifre de 3 X 3 extrasa din matricea de caractere:
(exemplu:  pentru pasul K , vei extrage elementele :  a[0][k] a[0][k+1] a[0][k+2], a[1][k] a[1][k+1] a[1][k+2], a[2][k] a[2][k+1] a[2][k+2], conform sensului si pozitiei alese de mine mai sus.Daca iti vei alege alt sens/alta pozitie de plecare atunci si ordinea de selectie din matrice va trebui s-o schimbi)

configuratia grafica o vei serveri  interpretorului de cifra care va genera codul binar conform unui algoritm similar ce am pus eu mai sus

apoi va urma o  concatenare care va genera numarul corespunzator.

Mai multe detalii poti vedea aici:
http://www.nutsvolts...displays-part-1

Edited by puiu_pe_diezel, 14 October 2018 - 18:54.


#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,438
  • Înscris: 10.08.2005
puiule, nu e BCD ?

#8
Alexandru0101

Alexandru0101

    New Member

  • Grup: Junior Members
  • Posts: 5
  • Înscris: 07.10.2018
#include <stdio.h>
#include <stdlib.h>
// Calculate the pow
int getPow(int base, int pow) {
    int res = 1;
    while(pow > 0) {
    res *= base;
    pow--;
    }
    return res;
}
// get a digit from the char input
int getNumber(char **arr, int j) {
    ////int i, jj;
    ////for(i = 0; i < 3; i++) {
    //for(jj = 0; jj < 3; jj++)
    //printf("%c", arr[1][2]);
////printf("\n");
    // create an tree structure using ifs to find the digit
    if(arr[0][j] == ' ' && arr[0][j + 1] == ' ' && arr[0][j + 2] == ' ') {
    if(arr[2][j + 2] == '|' && arr[1][j + 2] == '|')
    if(arr[1][j] == ' ' && arr[1][j + 1] == ' ' && arr[2][j] == ' ' && arr[2][j + 1] == ' ')
    return 1;
    else if(arr[1][j] == '|' && arr[1][j + 1] == '_' && arr[2][j] == ' ' && arr[2][j + 1] == ' ')
    return 4;
    }
    else if(arr[0][j] == ' ' && arr[0][j + 1] == '_' && arr[0][j + 2] == ' ') {
    if(arr[1][j + 2] == '|' && arr[2][j + 2] == '|' && arr[1][j + 1] == '_' && arr[2][j + 1] == '_') {
    if(arr[1][j] == ' ' && arr[2][j] == ' ') return 3;
    else if(arr[1][j] == '|' && arr[2][j] == '|') return 8;
    else if(arr[1][j] == '|' && arr[2][j] == ' ') return 9;
    }
    else if(arr[1][j + 1] == '_' && arr[2][j + 1] == '_') {
    if(arr[1][j] == '|' && arr[2][j + 2] == '|') {
    if(arr[2][j] == ' ') return 5;
    else if(arr[2][j] == '|') return 6;
    }
    else if(arr[1][j] == ' ' && arr[1][j + 2] == '|' && arr[2][j] == '|' && arr[2][j + 2] == ' ') return 2;
    }
    else if(arr[1][j + 1] == ' ' && arr[1][j + 2] == '|' && arr[2][j + 2] == '|') {
    if(arr[1][j] == ' ' && arr[2][j] == ' ' && arr[2][j + 1] == ' ') return 7;
    else if(arr[1][j] == '|' && arr[2][j] == '|' && arr[2][j + 1] == '_') return 0;
    }
    }
    return -1; // return -1 if no digit is found
}
int findValid(int number) {
    int count = 0;
    int res = 0;
    int digit, index, i;
    int resDigit, resIndex, result;
    int initialNumber = number;
    int skippedDigit;
    for(index = 1; index <= 9; index++) {
    res = 0;
    number = initialNumber;
    for(i = 1; i <= 9; i++) {
    if(i != index) res += i * (number % 10);
    else skippedDigit = number % 10;
    number /= 10;
    }
    for(digit = 0; digit <= 9; digit++) {
    res += digit * index;
    if(res % 11 == 0) {
    count++;
    resIndex = index;
    resDigit = digit;
    result = initialNumber - (skippedDigit - digit) * getPow(10, index - 1);
    }
    res -= digit * index;
    }
    }
    if(count == 1) return result;
    return -1;
}
// Check is the input is valid
int checkIfValid(int number) {
    int i, res;
    res = 0;
    for(i = 9; i > 0; i--) {
    res += (10 - i) * (number % 10);
    number /= 10;
    }
    if(res % 11 == 0) return 1;
    return -1;
}
// find the number of 9 digits from the char input
int findNumber(char **arr) {
    int digit, number, j;
    number = 0;
    for(j = 0; j < 27; j += 3) {
    digit = getNumber(arr, j);
    //printf("digit: %d", digit);
    if(digit == -1) { // if no digit was found return -1
    return -1;
    //return 0;
    }
    number = 10 * number + digit;
    }
    return number;
}
int main() {
    FILE *f, *g;
    char **arr;
    int i, j, number, digit, check;
    arr = malloc(sizeof(char *) * 3);
    for(i = 0; i < 3; i++)
    arr[i] = malloc(sizeof(char) * 27);
    f = fopen("pr29.in", "r");
    g = fopen("pr29.out", "w");
    // Read the input
    for(i = 0; i < 3; i++)
    for(j = 0; j < 27; j++) {
    fscanf(f, "%c", &arr[i][j]);
    //printf("i: %d, j: %d, char: %c", i, j, arr[i][j]);
    if(arr[i][j] == '\n') fscanf(f, "%c", &arr[i][j]);
    printf("i: %d, j: %d, char: %c ", i, j, arr[i][j]);
    }
    // find the number from the input
    number = findNumber(arr);
    printf("number: %d", number);
    // If number is -1 the some chars weren't decoded into digits
    if(number == -1) {
    fprintf(g, "Failure");
    return 0;
    }
    // check if valid
    check = checkIfValid(number);
    // if not try to find a unique valid
    if(check == -1) number = findValid(number);
    // if more valid cases print ambigous
    if(number == -1) fprintf(g, "Ambiguous");
    // print the number
    else fprintf(g, "%09d", number);
    return 0;
}


//iata cum am rezolvat-o , sper ca va prinde bine cuiva, cel putin ca exemplu(+fisiere)

#9
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018
din pacate programul asta nu e facut de tine, iar metoda de rezolvare este greoaie.Foloseste-te de modul cum functioneaza BCD-ul

#10
Alexandru0101

Alexandru0101

    New Member

  • Grup: Junior Members
  • Posts: 5
  • Înscris: 07.10.2018

View Postpuiu_pe_diezel, on 17 octombrie 2018 - 13:56, said:

din pacate programul asta nu e facut de tine, iar metoda de rezolvare este greoaie.Foloseste-te de modul cum functioneaza BCD-ul
nu e facuta in totalitate de mine , ci cu ajutorul unei colege... algoritmul era inteles de mine, doar ca inca nu stiam cum se foloseste de subprograme si  de pointeri

Edited by Alexandru0101, 23 October 2018 - 18:06.


#11
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018
daca vrei sa rezolvi o problema calumea citeste informatiile despre modul de generare si functionare al BCD-ului, care te simplifica mult de tot si inveti si ceva nou.
peste 80 % din codul pe care l-ai scris poate fi scos daca citesti ce ti-am dat despre BCD si alegi o rezvolvare eleganta, inainte remodeland problema cu informatiile despre functionarea BCD

#12
puiu_pe_diezel

puiu_pe_diezel

    Member

  • Grup: Members
  • Posts: 375
  • Înscris: 01.10.2018
Cand o sa am timp , am sa-ti pun aici cum ar fi trebuit sa faci codul, dupa documentatia pe care ti-am atasat-o initial.:D

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate