tablice C

amator
Użytkownik
Użytkownik
Posty: 144
Rejestracja: 6 wrz 2005, o 12:44
Płeć: Kobieta
Lokalizacja: woj.podkarpackie
Podziękował: 18 razy
Pomógł: 3 razy

tablice C

Post autor: amator »

używam Dev++, nie działa ta Macierz u mnie, ale jeśli u Was działa to znaczy że jest ok.
Mam tu taki program który pisze wyraz wspak. Co mam w nim wpisać żeby odwracał wyraz który będzie wpisany z klawiatury?

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>

void Reverse(char*String)
{
int i;
for(i=strlen(String)-1;i>=0;i--) printf("%c",String[i]);
}
int main()
{
int k;
Reverse("amator");
printf("
");
getch(0);
return(0);
}
jasny
Użytkownik
Użytkownik
Posty: 845
Rejestracja: 2 kwie 2006, o 23:32
Płeć: Mężczyzna
Lokalizacja: Limanowa
Pomógł: 191 razy

tablice C

Post autor: jasny »

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h>

void Reverse(char*String)
{
int i;
for(i=strlen(String)-1;i>=0;i--) printf("%c",String[i]);
}
int main()
{
char napis[100];
scanf("%s",napis);
Reverse(napis);
printf("
");

return(0);
} 
amator
Użytkownik
Użytkownik
Posty: 144
Rejestracja: 6 wrz 2005, o 12:44
Płeć: Kobieta
Lokalizacja: woj.podkarpackie
Podziękował: 18 razy
Pomógł: 3 razy

tablice C

Post autor: amator »

o, dzięki
sama musiałabym nie wiadomo ile i gdzie tego szukać..

Mam znowu jeszcze jedno pytanie ( mam nadzieję że się nie gniewacie że ich tak dużo)
Co napisać w main() żeby odwracało mi nie tylko jeden wyraz ale np. całe zdanie? ( w funkcji void Reverse nic nie trzeba zmieniać, prawda?)

Chciałam zrobić ten program który wypisuje wszystkie liczby pierwsze tym prostszym sposobem, ale coś znowu robię xle i mi nie chce się skompilować :

Kod: Zaznacz cały

int sprawdz(int p) 
  { 
    int i, pierwsza=1; 

    for(i=2 ; i*i<=p ; i++) 
      { 
        if(p%i == 0) pierwsza=0; 
      } 
    return pierwsza; 
  } 
  int main()
  {
      int p,ile,k;
int tlp[200]={0}; //deklaracja tablicy liczb pierwszych (tlp:P), zainicjowana zerami 
  p=2; // zaczynamy poszukiwania od dwójki 
  ile=200; // tyle liczb będziemy sprawdzać 
printf("Liczby pierwsze az do liczby 200 to:
");
  for (k=0; k<=ile; p++) // bierzemy po kolei liczby aż do 200 
   { 
     if (sprawdz(p) == 1) // liczba p jest przekazywana do funkcji, jeśli funkcja zwróci 1, to... 
      { 
        tlp[k]=p; // ... to liczba zostaje zapisana do tablicy 
        k++; // zwiększamy k, aby kolejne liczby zapisywac na kolejnych miejscach w tablicy, a nie jedno na drugim :P 
      
      if (tlp[k]!=0) 
    printf("%d, ",k); 

      getch(0);
      return(0);
      }
   } 
}

dlaczego nie pojawiają mi się żadne liczby?
jasny
Użytkownik
Użytkownik
Posty: 845
Rejestracja: 2 kwie 2006, o 23:32
Płeć: Mężczyzna
Lokalizacja: Limanowa
Pomógł: 191 razy

tablice C

Post autor: jasny »

Ta metoda co na poprzedniej stronie podałem to jest chyba najprostrza. Tyle że to jest sama funkcja, bez main(), więc nic nie wypisuje (bo mowa była tylko o znalezieniu liczb). Żeby wypisywała, popraw na taką:

Kod: Zaznacz cały

#include<stdio.h>
#include<stdlib.h> 

int main()
{  int pier[100];
   pier[0]=1;
   pier[1]=2;
   int n=2;
   for(int i=3;n<100;i=i+2){
      int licznik=0;
      for (int j=0;j<n;j++){
         if(i%pier[j]==0){licznik=licznik+1;}}
      if (licznik==1){
         pier[n]=i;
         n=n+1;}
   }
   for(int i=0;i<100;i++){
         printf ("%d ", pier[i]); }
   return 0;
}
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

tablice C

Post autor: kadiii »

Co do kodu amatora, to , że nic nnie wypisujesz jest winną formatowania twojego kodu - a tak naprawdę jego braku. Policz sobie klamerki, popatrz co się do czego odnosi. A na przyszłośc pisz w standardowej formie zapisu, będzie ci łatwiej!!!
Po za tym
if (sprawdz(p) == 1) // liczba p jest przekazywana do funkcji, jeśli funkcja zwróci 1, to...
{
tlp[k]=p; // ... to liczba zostaje zapisana do tablicy
k++; // zwiększamy k, aby kolejne liczby zapisywac na kolejnych miejscach w tablicy, a nie jedno na drugim

if (tlp[k]!=0)
printf("%d, ",k);
po co sprawdzasz dwa razy to samo - zastanów się
Powodzenia
Awatar użytkownika
aikon
Użytkownik
Użytkownik
Posty: 450
Rejestracja: 2 gru 2005, o 17:12
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 48 razy

tablice C

Post autor: aikon »

amator pisze:dlaczego nie pojawiają mi się żadne liczby?
Nie pojawiają się, bo nie masz nigdzie pętli która by wyświetlała kolejne liczby na ekran Masz tylko jakieś printf("%d, ",k) , które niestety do niczego sie tu nie nadaje.
Dopisz zamiast tego coś w stylu:
for(int k=0; k
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

tablice C

Post autor: kadiii »

Zauważ aikon, ze w takim zapisie jak w kodzie amatora wypisuje on wartość od razu po sprawdzeniu, że jest pierwsza(pętla ta sama która sprawdza waunek czy jest pierwsza). Gdyby k inkrementowało poza tym ifem byłoby ok(trochę dziwnie, ale ok). Jednakże miejsce w jakie wstawione jest getch()i return() no cóż

P.S ups nie zauwazyłem, ze amator jest płci pięknej - popieram dziewczyny w programowaniu, powodzenia amatorko(jak to perioratywnie brzmi - nie lepiej początkująca?)
Ostatnio zmieniony 16 maja 2006, o 23:14 przez kadiii, łącznie zmieniany 1 raz.
Awatar użytkownika
aikon
Użytkownik
Użytkownik
Posty: 450
Rejestracja: 2 gru 2005, o 17:12
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 48 razy

tablice C

Post autor: aikon »

kadiii, no nie przyglądałem sie zbytnio temu zapisowi, ale teraz faktycznie widze że jest bez sensu.
amator, zrób tak:

Kod: Zaznacz cały

//-------------------------------------------------
#include <stdio.h>
#include <conio.h>

int sprawdz(int p);
void wyswietl(int n, int tab[]);
//-----------------------------------------------------

void main()
{ 
  int p, k, ile;
  int tlp[200]={0};
  p=2;
  ile=200;

  for (k=0; k<=ile; p++)
   {
     if (sprawdz(p) == 1)
      {
        tlp[k]=p;
        k++;
      }
   }
   wyswietl(ile,tlp);
   getch();
}
//-------------------------------------------------

int sprawdz(int p)
  {
    int i, pierwsza=1;

    for(i=2 ; i*i<=p ; i++)
      {
        if(p%i == 0) pierwsza=0;
      }
    return pierwsza;
  }
//------------------------------------------------------------
void wyswietl(int n, int tab[])
{
  int i;
  printf("
%d Kolejnych liczb pierwszych to: 

",n);
  for (i=0; i<n ; i++)
    {
      printf("%d ",tab[i]);
    }
}
jasny
Użytkownik
Użytkownik
Posty: 845
Rejestracja: 2 kwie 2006, o 23:32
Płeć: Mężczyzna
Lokalizacja: Limanowa
Pomógł: 191 razy

tablice C

Post autor: jasny »

Tak jak już pisałem:
3.Napisać program, który znajduje 100 początkowych liczb pierwszych, metodą sita
Eratostenesa (sprawdzając czy kolejna liczba nieparzysta nie jest podzielna przez już
znalezione liczby pierwsze)
Nie mam nic do Twojego sposobu bo jest dobry, tylko metoda nie ta.
Awatar użytkownika
aikon
Użytkownik
Użytkownik
Posty: 450
Rejestracja: 2 gru 2005, o 17:12
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 48 razy

tablice C

Post autor: aikon »

Ja wiem, ale koleżanka amator chciała napisac program wyświetlający liczby obliczone tym prostszym sposobem.
amator
Użytkownik
Użytkownik
Posty: 144
Rejestracja: 6 wrz 2005, o 12:44
Płeć: Kobieta
Lokalizacja: woj.podkarpackie
Podziękował: 18 razy
Pomógł: 3 razy

tablice C

Post autor: amator »

witam ! Znów zwracam się do Was po radę ..
miałam napisać program, który dla danej tablicy liczb X o n elementach znajduje moduł średniej arytmetycznej liczb ujemnych. Zał. maksymalny rozmiar tablicy 20.

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#DEFINE MAX 20
int main()
{
    double x[MAX];
    int i, ile, n, suma, srednia;
    printf("Podaj n:
");
    scanf("%lf",&n);
    do
    {
         printf("podaj n:
");
         scanf("%lf",&n)
    }
    for (i=0;i<=n-1;i++)
    {
        printf("Podaj elementy tablicy:
");
        scanf("%lf",&x[i]);
        }
        suma=0;
        for(i=0;i<=n;i++)
        if(x[i]<0)
        {
        suma=suma+x[i];
        }
        srednia=fabs(suma/n);
        return(0);
        }
Na końcu wiem że jest błąd bo mam podzielić przez ilość liczb ujemnych , a dzielę przez n. Brakuje mi licznika i nie wiem jak go napisać. Poza tym nie mogę sprawdzić co jest jeszcze źle bo program nie kompiluje się u mnie. Mogę Was prosić o pomoc ?
zorroxxx
Użytkownik
Użytkownik
Posty: 43
Rejestracja: 7 maja 2006, o 11:37
Płeć: Mężczyzna
Lokalizacja: wschód

tablice C

Post autor: zorroxxx »

licznik=0;

if(x
Awatar użytkownika
aikon
Użytkownik
Użytkownik
Posty: 450
Rejestracja: 2 gru 2005, o 17:12
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 5 razy
Pomógł: 48 razy

tablice C

Post autor: aikon »

amator, a spróbuj tak:

Kod: Zaznacz cały

#include <stdio.h>
#include <math.h>
#include <conio.h>
#define MAX 20

void main()
{
  float tab[MAX], suma=0, srednia=0;
  int n,ilosc=0;

  do
   {
    printf("Ile elementow ma miec tablica? 1-20 ");
    scanf("%d",&n);
   }
  while(n<0 || n>20);

  for (int i=1; i<=n ; i++)
  {
    printf("Podaj %d element tablicy= ",i);
    scanf("%f",&tab[i]);

    if(tab[i]<0)
     {
       ilosc++;
       suma=suma+tab[i];
     }
  }

  if(ilosc)
   {
    srednia=suma/ilosc;
    printf("Modul sredniej z elementow ujemnych: %f ",fabs(srednia) );
   }
  else
    printf("Nie ma elementow ujemnych");

  getch();
}
Powinno działać.
Nieumiem:P
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 23 maja 2006, o 15:35
Płeć: Mężczyzna
Lokalizacja: Łódź

tablice C

Post autor: Nieumiem:P »

witam.
mam malutki problemik , moze ktos z was bedzie wiedzial jak napisac taki program? :

"dana jest naturalna liczna n , otrzymac macierz kwadratowa o wymiarze nxn i element Aij=1/i+j"

(oczywiscie w c++ )


z gory dziekuje za ewentualna pomoc / rady
jasny
Użytkownik
Użytkownik
Posty: 845
Rejestracja: 2 kwie 2006, o 23:32
Płeć: Mężczyzna
Lokalizacja: Limanowa
Pomógł: 191 razy

tablice C

Post autor: jasny »

Kod: Zaznacz cały

#include <iostream.h>
#include <stdlib.h>

int main()
{     int n;
      float tablica[n][n];
      for(int i=1;i<=n;i++){
           for(int j=1;j<=n;j++){
                tablica[i-1][j-1]=1.0/i+j;}
      }
      return 0;
}
ODPOWIEDZ