Cześć.
Piszę zadanie. Treść jest taka:
Wprowadzić ciąg liczb, o wielkości n. Wprowadzić dwie dodatkowe liczby a i b. We wprowadzonym ciągu wszystkie liczby, które są podzielone przez a i b , zamienić na zero. Wyprowadzić nowy ciąg.
Mój kod wygląda tak:
#include <stdio.h>
#include <stdlib.h>
void readInput_size_t(size_t*);
void readInput_int(int*);
void replaceIfDivisible_int(int*, size_t, int, int, int);
void insertToTable_int(int*, size_t);
int main(int argc, char** argv){
size_t size=0;
size_t a=0;
size_t b=0;
printf("Wprowadz ilosc liczb: ");
readInput_size_t(&size);
printf("Wprowadz pierwsza liczbe do sprawdzania podzielnosci: ");
readInput_size_t(&a);
printf("Wprowadz druga liczbe do sprawdzania podzielnosci: ");
readInput_size_t(&b);
int numbers[size];
insertToTable_int(numbers, sizeof(numbers)/sizeof(int));
replaceIfDivisible_int(numbers, size, a, b, 0);
for(size_t i=0;i<size;++i){
printf("%d ", numbers[i]);
}
free(numbers);
return 0;
}
void replaceIfDivisible_int(int* tab, size_t tab_size, int div_a, int div_b, int new_val){
if(tab==NULL) return;
for(size_t i=0;i<tab_size;++i){
int mod = tab[i]%div_a + tab[i]%div_b;
if(mod==0)
tab[i] = new_val;
}
}
void readInput_int(int* variable){
int isInputValid = scanf("%d", variable);
while(isInputValid<=0){
fflush(stdin);
isInputValid = scanf("%d", variable);
}
}
void readInput_size_t(size_t* variable){
int input;
int isInputValid = scanf("%d", &input);
while(isInputValid<=0 || input<0){
fflush(stdin);
isInputValid = scanf("%d", &input);
}
*variable = (size_t)input;
}
void insertToTable_int(int* tab, size_t tab_size){
for(size_t i=0;i<tab_size;++i){
printf("Podaj %u/%u liczbe do tablicy: ", i+1, tab_size);
readInput_int(&tab[i]);
}
}
Jest to poziom szkolny, więc napiszcie, czy kod przejdzie w szkole i napiszcie ogólnie jakiej jest jakości (jako profesjonalni nauczyciele, a nie ludzie który kiedyś czytali coś o ANSI C)
Ogólnie to nie piszę w C, tylko w C++, więc prosiłbym o wszelkie uwagi. Wiele rzeczy mi się np. kiełbasiło z C++.
Z góry dzięki.
Pozdrawiam.