Mnożenie danych w tablicy przez zadaną wartość.

0
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;
}
 
2
  1. W obecnej formie kod się nie kompiluje.
  2. Popraw formatowanie. Jak sam nie umiesz to polecam http://format.krzaq.cc
  3. Nieprecyzyjnie podałeś zadanie. Czy przemnożone liczby z pierwszej tablicy należy zapisać do drugiej, i to tę drugą wypisać?
  4. Jeśli tak, to funkcja mnożąca potrzebuje przyjąć dwie tablice - źródłową i wynikową.
0

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.

1

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?

0

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.

1

Tak, musisz przekazać tablicę źródłową, docelową i wielkość.

0

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?

1

Da się, ale tak jest niemądrze. Funkcja powinna robić tylko to na co wskazuje jej nazwa, nic innego -- SRP.

1

@Dantheeq

  1. Zapoznaj się z inkrementacją no jej nie rozumiesz: http://4programmers.net/Forum/1101404
  2. Pobrałeś "Pomnozymy przed zadana wartosc" do x, i co jak funkcja mnozenieTab ma się dowiedzieć przez co mnożymy?
  3. Weź przeczytaj jakiś kurs.
0
 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 :/

0

Nadal nie przekazujesz dwóch tablic do funkcji, która ma operować na dwóch tablicach. Tworzysz zamiast tego niepotrzebnie lokalną tablicę.

0
_13th_Dragon napisał(a):

@Dantheeq

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.

1

@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;
  }
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ć.

0

zły indeks - s zamiast i

0

Dzięki wielkie :)

0

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

0

To odeślij mnie do jakiegoś dobrego kursu.

0

Tobie wystarczy pierwszy z brzegu, aby przynajmniej zacząłeś rozumieć co do ciebie piszemy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1