Witam,
mam do napisania program który wygeneruje losowe elementy na tablicy, a następnie przez zadaną przed użytkownika wartość ma je pomnożyć i wypisać nową tablicę. Nie bardzo wiem jak to ugryźć.
Jakbym mógł prosić o jakieś wskazówki, które by mnie naprowadziły na rozwiązanie.
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void losujTab(int t[], int s);
void printTab(int t[], int s);
int mnozenieTab(int t[], int s);
int main() {
srand((unsigned)time(NULL));
int tabA[SIZE];
int tabB[SIZE];
int x;
printf("Praca domowa 6\n");
printf("Losuje tablice: \n");
losujTab(tabA, SIZE);
printf("Wylosowalem nastepujaca tablice: \n");
printTab(tabA, SIZE);
printf("\nPomnozymy przed zadana wartosc: \n");
fflush(stdin);
scanf("%i", &x);
mnozenieTab(tabB, SIZE);
}
void losujTab(int t[], int s) {
int i;
for (i = 0; i < s; i++) {
t[i] = rand() % 10;
}
}
void printTab(int t[], int s) {
int i;
printf("{ ");
for (i = 0; i < s; i++) {
printf("%i ", t[i]);
}
printf(" }");
}
int mnozenieTab(int t[], int s) {
int i, y, wynik;
for (i = 0; i < s; i++) {
wynik = t[i] * y;
}
return wynik;
}
- W obecnej formie kod się nie kompiluje.
- Popraw formatowanie. Jak sam nie umiesz to polecam http://format.krzaq.cc
- Nieprecyzyjnie podałeś zadanie. Czy przemnożone liczby z pierwszej tablicy należy zapisać do drugiej, i to tę drugą wypisać?
- Jeśli tak, to funkcja mnożąca potrzebuje przyjąć dwie tablice - źródłową i wynikową.
Dokładnie. Przemnożone liczby z pierwszej tablicy należy wpisać do drugiej intą drugą tablicę należy wyświetlić.
A kod w obecnej formie kompilator przepuscił i program się normalnie wyświetla, tyle, że nie mnoży wcale.
Jakbyś mógł bardziej dopowiedzieć dokładnie. Chciałbym mieć pewność, że na pewno zrozumiem.
Z góry dzięki.
Jeśli mówię, że się nie kompiluje to raczej mam rację ;) http://melpon.org/wandbox/permlink/qQ9u2fOeZGDfkgg3
mnozenieTab(tabB, SIZE);
int mnozenieTab(int t[], int s){
int i, y, wynik;
for(i = 0; i < s; i++){
wynik = t[i] * y;
}
return wynik;
Skąd funkcja mnozenieTab
ma pobrać oryginalne wartości, jeśli przekazujesz jej tylko tablicę docelową? Dlaczego nie zapisujesz do tablicy docelowej?
Problem z kompilacją rozwiązany :)
A co do funkcji, to jak mam to jej przekazać? Wprowadzić nowe zmienne?
Z góry przepraszam za mój niedorozwój. Niedawno zacząłem.
Tak, musisz przekazać tablicę źródłową, docelową i wielkość.
A da się zrobić tak, żeby w funkcji
mnożenieTab
wywołać funkcję, która tą tablice tworzy czyli
losujTab
?
Czy raczej tak nie przejdzie?
Da się, ale tak jest niemądrze. Funkcja powinna robić tylko to na co wskazuje jej nazwa, nic innego -- SRP.
- Zapoznaj się z inkrementacją no jej nie rozumiesz: http://4programmers.net/Forum/1101404
- Pobrałeś "Pomnozymy przed zadana wartosc" do
x
, i co jak funkcjamnozenieTab
ma się dowiedzieć przez co mnożymy? - Weź przeczytaj jakiś kurs.
int mnozenieTab(int t[], int s){
int i, y, wynik;
int a[s];
for(i = 0; i < s; i++)
{
a[i] = t[i] * y;
}
return a[i];
}
Program dalej nie działa jak powinien, ale idę chociaż w dobrym kierunku?
Bo szczerze powiem, nie mam pojęcia jak to przekazać, a nie mogę nigdzie jakoś tego wyczytać jak takie rzeczy się robi :/
Nadal nie przekazujesz dwóch tablic do funkcji, która ma operować na dwóch tablicach. Tworzysz zamiast tego niepotrzebnie lokalną tablicę.
_13th_Dragon napisał(a):
Weź przeczytaj jakiś kurs.
Zacząłem studiować i od niedawna mam język C. Czytam w domu i się uczę, natomiast czasami nie mam pomysłu i dlatego zwróciłem się do was.
@Dantheeq, programowanie metodą losowego wstawiania kodu w losowe miejsce jest z góry skazane na porażkę. Zastanów się ile czasu ci zajmie "wylosowanie" czegoś podobnego:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define SIZE 10
#define RANGE 10
void randTab(int tb[],unsigned size,int range) { while(size--) tb[size]=rand()%range; }
void copyTab(int dst[],const int src[],unsigned size) { while(size--) dst[size]=src[size]; }
void mulTab(int tb[],unsigned size,int mul) { while(size--) tb[size]*=mul; }
void printTab(const char *msg,const int tb[],unsigned size)
{
unsigned i;
printf("%s {",msg);
for(i=0;i<size;++i) printf(", %d"+!i,tb[i]);
printf(" }\n");
}
int main()
{
int tabA[SIZE],tabB[SIZE];
int mul;
srand(time(NULL));
randTab(tabA,SIZE,RANGE);
printTab("Wylosowalem:",tabA,SIZE);
printf("Pomnozymy przed podana wartosc: ");
scanf("%d",&mul);
copyTab(tabB,tabA,SIZE);
printTab("Przekopiowalem:",tabB,SIZE);
mulTab(tabB,SIZE,mul);
printTab("Przemnozylem:",tabB,SIZE);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void losujTab(int t[], int s);
void printTab(int t[], int s);
void copyTab(int dst[], int src[], int s);
void mnozenieTab(int t[], int s, int x);
int main(){
srand((unsigned) time(NULL));
int tabA[SIZE];
int tabB[SIZE];
int x;
printf("Praca domowa 6\n");
losujTab(tabA, SIZE);
printf("Wylosowalem nastepujaca tablice:\n");
printTab(tabA, SIZE);
printf("\nPomnozymy przed zadana wartosc: \n");
fflush(stdin);
scanf("%i", &x);
copyTab(tabB, tabA, SIZE);
printf("\nPrzekopiowalem tablice: \n");
printTab(tabB, SIZE);
mnozenieTab(tabB, SIZE, x);
printf("\nWymnozylem tablice: \n");
printTab(tabB, SIZE);
return 0;
}
void losujTab(int t[], int s){
int i;
for(i = 0; i < s; i++){
t[i] = rand() % 10;
}
}
void printTab(int t[], int s){
int i;
printf("{ ");
for(i = 0; i < s; i++){
printf("%i ", t[i]);
}
printf("}");
}
void copyTab(int dst[], int src[], int s){
int i;
for(i = 0; i < s; i++){
dst[s] = src[s];
}
}
void mnozenieTab(int t[], int s, int x){
int i;
for(i = 0; i < s; i++)
{
t[s] *= x;
}
}
Ostatnie pytanie i już się nie udzielam.
Dlaczego to nie działa poprawnie? Tak łopatologicznie, jeśli można prosić.
zły indeks - s
zamiast i
Dzięki wielkie :)
Miałem się nie udzielać...
Teraz muszę dodać nową funkcję do programu. Mianowicie w
tabB
muszę zsumować liczby z zadanym krokiem np. co druga i zwrócić sumę.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 10
void losujTab(int t[], int s);
void printTab(int t[], int s);
void copyTab(int dst[], int src[], int s);
void mnozenieTab(int t[], int s, int x);
int sumTab(int t[], int s, int y);
int main(){
srand((unsigned) time(NULL));
int tabA[SIZE];
int tabB[SIZE];
int tabC[SIZE];
int x;
int y;
printf("Praca domowa 6\n");
losujTab(tabA, SIZE);
printf("Wylosowalem nastepujaca tablice:\n");
printTab(tabA, SIZE);
printf("\nPomnozymy przed zadana wartosc: \n");
fflush(stdin);
scanf("%i", &x);
copyTab(tabB, tabA, SIZE);
mnozenieTab(tabB, SIZE, x);
printf("Wymnozylem tablice: \n");
printTab(tabB, SIZE);
printf("\nSumuje z zadanym krokiem: ");
fflush(stdin);
scanf("%i", &y);
int suma;
suma = sumTab(tabB, SIZE, y);
printf("\nSuma wynosi: %i", suma);
return 0;
}
void losujTab(int t[], int s){
int i;
for(i = 0; i < s; i++){
t[i] = rand() % 10;
}
}
void printTab(int t[], int s){
int i;
printf("{ ");
for(i = 0; i < s; i++){
printf("%i ", t[i]);
}
printf("}");
}
void copyTab(int dst[], int src[], int s){
int i;
for(i = 0; i < s; i++){
dst[i] = src[i];
}
}
void mnozenieTab(int t[], int s, int x){
int i;
for(i = 0; i < s; i++)
{
t[i] *= x; //t[i] = t[i] + x
}
}
int sumTab(int t[], int s, int y){
int i;
int j = 0;
int temp = 0;
for(i = 0; i < s; i + y){
t[i] = temp;
j = t[i] + temp;
}
return j;
}
int sumTab(int t[], int s, int y){
int i;
int j = 0;
int temp = 0;
for(i = 0; i < s; i + y){
t[i] = temp;
j = t[i] + temp;
}
return j;
}
Serio, przejdź do jakiegoś kursu, bo to naprawdę nie ma sensu. Masz zsumować liczby z zadanym krokiem, ok. Dlaczego przypisujesz do elementów tablicy nowe wartości? i+y
nic nie robi (vide kurs - pętla for
)
Dragon ma rację, to jest programowanie poprzez losowe wklejanie tekstu.
To odeślij mnie do jakiegoś dobrego kursu.
Tobie wystarczy pierwszy z brzegu, aby przynajmniej zacząłeś rozumieć co do ciebie piszemy.