Forum CDRinfo.pl

Forum CDRinfo.pl (https://forum.cdrinfo.pl/)
-   Komputery - oprogramowanie i sprzęt (https://forum.cdrinfo.pl/f113/)
-   -   dwa programy w C++ (https://forum.cdrinfo.pl/f113/dwa-programy-c-84032/)

icemac 23.11.2009 11:07

dwa programy w C++
 
nie wiem jak się za to zabrać - może ma ktoś jakis przykład ??

dzięki :piwo:

P.S.
prostsze na tablicach zrobiłem ;)


Program 1.
Cytat:

Program powinien mnożyć matryce rzeczywistych liczb
A(n,n) na wektor rzeczywistych liczb b(n), który jest
wyliczany według algorytmu:
i=1,2,3,4, .... n
jeśli i jest parzystą liczbą to b(i)= 1/(i×i+2)
jeśli i jest nieparzystą liczbą to b(i)= 1/ i
i wpisać rezultat do wektora c(n) według algorytmu:
c(1)=A(1,1)×b(1)+ A(1,2)×b(2)+... A(1,n)×b(n)
c(2)=A(2,1)×b(1)+ A(2,2)×b(2)+... A(2,n)×b(n)
...................
c(n)=A(n,1)×b(1)+ A(n,2)×b(2)+... A(n,n)×b(n)
Wydrukować - A(n,n), b(n), c(n)

Program 2.
Cytat:

Dla tablicy całkowitych liczb (a1, a2, a3, a4, a5, ... )
przykład: (34, 21, 2, 17, 21, ... )
wyjaśnić czy są jednakowe między sobą.
Przykład:
jeśli a1=a8 to wydrukować ***8222;liczby a1, a8=34***8221;
jeśli a2=a5 =a13 to wydrukować ***8222;liczby a2, a5,a13=21***8221;
itd.
Jeśli jednakowych między sobą nie istnieje to podać
odpowiedni komunikat.
Programy skonstruować z wykorzystaniem odpowiednich funkcji
dla tablicy dynamicznej.

sobrus 23.11.2009 14:10

dawno juz nic takiego nie robiłem, ale pierwsze wyglada łatwo.
w C++ sa już o ile pamietam tablice wielowymiarowe (zwykłe C to porażka z tymi wskaźnikami, ale przynajmniej są szybkie ^^)
trzeba w pętli przygotowac tablice b i potem przemnożyć

Kod:

for (i=1;i<=n;i++)
{
  if ((i%2)=0)  {b[i]=1/(i*i+2);} else {b[i]=1/i;}
}

for (i=1;i<=n;i++)
{
  c[i]=0;
  for (k=1;k<=n;k++)
  {
    c[i]+=A[i][k]*b[k];
  }
}

moze coś pokręciłem w pracy jestem i sie spiesze ;)
szczególnie zwróć uwage czy nie pomyliłem indeksów i oraz k (zamiast A[i][k] moze trzeba A[k][i])

a drugie moze potem ... ;)

icemac 15.12.2009 11:06

co robię źle :sciana:

treść zadania:
Cytat:

Dla dowolnej całkowitej liczby ***1072; (a***8804;100) napisać program , który wylicza ilość cyfr tej liczby, sumę cyfr oraz wyświetla na ekranie komputera pierwszą i ostatnią cyfrę przez dwie spacji z odpowiednim komentarzem.
zadanie rozwiązane - na razie bez "blokady" do 100

Cytat:

#include <cstdlib>
#include <iostream>
using namespace std;
int ilosccyfr(int n)
{
int i=0;
do
{
n = n/10;
i++;
}
while(n>0);
return i;
}
int main()
{
int n;
cout << "podaj liczbe: "<<endl;
cin >> n;
cout << "Liczba " << n << " posiada "<< ilosccyfr(n) <<" cyfr(y) " << endl;
{
int liczba(n);
int n=0;
int suma=0;
do {
n=liczba%10;
cout << "cyfra=" << n <<endl;
suma+=n;
}
while (liczba = liczba/10);

cout << "Suma cyfr = " << suma << endl;

int b,x,k,a1,a2;
x=1;
k=n;
a2=k/10;
while(x==1)
{
b=k%10;
k=k/10;
if(k==0)
{
x=0;
a1=b;
}
}
cout<<"pierwsza cyfra liczby wynosi:"<<a1<<endl;
cout<<"ostatnia cyfra liczby wynosi:"<<a2<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
}

i dwa poprzednie dalej wiszą :(

andy 15.12.2009 16:34

Kod:

#include "stdafx.h" //Dla VisualStudio
#include <string>
#include <iostream>

using namespace std;

int main(){
    string a;
    int suma=0;
    cout << "Podaj liczbe calkowita z zakresu 1..100: ";
    cin >> a;
    cout << "Ilosc cyfr wynosi: " << a.length();
    for(int i=0; i<a.length();i++){
        suma+=(int)a[i];
    }
    for(int i=0;i<a.length();i++){
        if (i==0) cout << "\nPierwsza liczba: " << a[0];
        if (i==(a.length())-1) cout << "\nOstatnia liczba: " << a[i];
    }
    cout << "\nSuma cyfr liczby " << a << " wynosi: " << suma;
    cin.get();

}

Tylko mi nie do końca dobrze działa sumowanie. Błędny sposób rzutowania?

Reetou 15.12.2009 20:41

Bo nie sumujesz cyfr, tylko ich kody. Odejmij 48...

suma+=(int)a[i]; -> suma+=(int)a[i]-48;

andy 15.12.2009 22:37

@Reetou no faktycznie :)

To był jeden z wielu sposobów rozwiązania tego zadania ;)

andy 16.12.2009 05:53

Kod:

for(int i=0;i<a.length();i++){ if (i==0) cout << "\nPierwsza liczba: " << a[0]; if (i==(a.length())-1) cout << "\nOstatnia liczba: " << a[i]; }
Tak właściwie to to pętla nie jest potrzebna. Do wyświetlenia I i ostatniej cyfry można użyć prostego cout i indeksu stringa:
Kod:

cout << a[0] - Pierwsza cyfra;
cout << a[a.length()] - Ostatnia cyfra;


icemac 22.01.2010 09:36

i jak byłoby z tymi dwoma pierwszymi ;)

niby łatwe (zwłaszcza to drugie, ale nie wiem jak pętlę zrobic która zapamiętuje porównane pozycje w tablicy)

to z sumowanie zrobiłem poprzez dzielenia z resztą i bez reszty :) - łatwizna była

icemac 31.01.2010 11:11

zadanie z wektorem macierzy - co robię źle ?? gdzie błąd ??

Cytat:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int rozmiar;

cout<<"Podaj wielkosc macierzy: ";
cin>>rozmiar;
srand(time(NULL));

double **A=new double*[rozmiar];
for(int i=0;i<rozmiar;i++)
A[i]=new double[rozmiar];

cout<<"\n"<<"Macierz A("<<rozmiar<<","<<rozmiar<<")"<<"\n";

for(int i=0;i<rozmiar;i++)
{
for(int j=0;j<rozmiar;j++)
{
A[i][j]=rand()%10+1;
cout<<A[i][j]<<"\t";
}
cout<<"\n";
}

cout<<"\n"<<"Tablica B("<<rozmiar<<")"<<"\n";

double *B=new double[rozmiar];
for(int i=0;i<rozmiar;i++)
{
if(i%2==0)
B[i]=(double)1/(i*i+2);
else
B[i]=(double)1/i;
cout<<b[i]<<"\t";
}


cout<<"\n"<<"\n"<<"tablica C("<<rozmiar<<")"<<"\n";

double *C=new double[rozmiar];

for(int i=0;i<rozmiar;i++)
{
C[i]=0;
for(int j=0;j<rozmiar;j++)
{
C[i]+=A[i][j]*B[j];
}
cout<<C[i]<<"\t";
}

delete[] C;
delete[] B;
for(int i=0;i<rozmiar;i++)
delete[] A[i];
delete[] A;

cout<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
dobrze wylicza - tylko nie mogę obliczyć "B" od jedynki, bo mi program wykrzacza, liczy dobrze od zera, ale założenia były od i=1,2,3,4,...,n

icemac 01.02.2010 08:09

zrobiłem sem, no nie sam, ale działa :P

dla potomnych

Cytat:

cout<<"\n"<<"Tablica B("<<rozmiar<<")"<<"\n";

double *B=new double[rozmiar];
for(int i=0;i<rozmiar;i++)
{
int j;
j=i+1;
if(j%2==0)
B[i]=(double)1/(j*j+2);
else
B[i]=(double)1/j;
cout<<B[i]<<"\t";
}

icemac 31.01.2011 09:00

odkopię swój temat:sciana:

gra w zycie "zassana z netu" - wiem o co chodzi, ale musze ją przerobić aby pokazywała wszystkie możliwe epoki "przeżywania" komórek, aktualnie program się wykrzacza bo nie chce przeliczać pętli do while - kod mój po zmianie
Cytat:

#include<iostream>
#include<time.h>
#include<stdio.h>
using namespace std;

int wyswietlanie(int tab[25][25])
{
int suma=0;
for(int i=0;i<25;i++)
{
cout<<endl;
for(int j=0;j<25;j++)
{
if(tab[i][j]==1)suma++;
cout<<tab[i][j]<<" ";
}
}
cout<<endl<<endl<<"Przezylo/-y tylko "<<suma<<" komorek/-ki" << endl;
return 0;
}
int zmienianie(int tab[25][25])
{
for(int x=0;x<25;x++)
{
for(int y=0;y<25;y++)
{
int ilosc=0;
if(tab[y][y]==0)
{
if(tab[x][y-1]==1)ilosc++;
if(tab[x-1][y]==1)ilosc++;
if(tab[x-1][y-1]==1)ilosc++;
if(tab[x+1][y-1]==1)ilosc++;
if(tab[x+1][y]==1)ilosc++;
if(tab[x-1][y+1]==1)ilosc++;
if(tab[x][y+1]==1)ilosc++;
if(tab[x+1][y+1]==1)ilosc++;
if(ilosc==3)
{tab[x][y]=1;}
}
if(tab[x][y]==1)
{
if(tab[x][y-1]==1)ilosc++;
if(tab[x-1][y]==1)ilosc++;
if(tab[x-1][y-1]==1)ilosc++;
if(tab[x+1][y-1]==1)ilosc++;
if(tab[x+1][y]==1)ilosc++;
if(tab[x-1][y+1]==1)ilosc++;
if(tab[x][y+1]==1)ilosc++;
if(tab[x+1][y+1]==1)ilosc++;
if(ilosc==2 || ilosc==3)
{tab[x][y]=1;}
if(ilosc<2)
{tab[x][y]=0;}
if(ilosc>=4)
{tab[x][y]=0;}
}
}
}

cout<<endl;
wyswietlanie(tab);

int suma=0;
for(int i=0;i<25;i++)
{
for(int j=0;j<25;j++)
{
if(tab[i][j]==1)suma++;
}
}
return suma;
}

int wygeneruj()
{
int tab[25][25],suma=0;
srand(time(0));
for(int i=0;i<25;i++)
{
cout<<endl;
for(int j=0;j<25;j++)
{
tab[i][j]=rand()%2;
if(tab[i][j]==1)suma++;
cout<<tab[i][j]<<" ";
}
}
cout<<endl<<endl<<"Zywych "<<suma<< " komorek";

int warunek = 1;
do {
warunek = zmienianie(tab);
cout<<warunek<<endl;
}
while (warunek == 0 );

return 0;
}
int main(int argc, char *argv[])
{
wygeneruj();
cout<<endl;
system("pause");
return 0;
}


a oryginał działający lecz pokazującv TYLKO jedno przejście poniżej
Cytat:

#include<iostream>
#include<time.h>
#include<stdio.h>
using namespace std;

int wyswietlanie(int tab[25][25])
{
int suma=0;
for(int i=0;i<25;i++)
{
cout<<endl;
for(int j=0;j<25;j++)
{
if(tab[i][j]==1)suma++;
cout<<tab[i][j]<<" ";
}
}
cout<<endl<<endl<<"Przezylo/-y tylko "<<suma<<" komorek/-ki" << endl;
return 0;
}
int zmienianie(int tab[25][25])
{
for(int x=0;x<25;x++)
{
for(int y=0;y<25;y++)
{
int ilosc=0;
if(tab[y][y]==0)
{
if(tab[x][y-1]==1)ilosc++;
if(tab[x-1][y]==1)ilosc++;
if(tab[x-1][y-1]==1)ilosc++;
if(tab[x+1][y-1]==1)ilosc++;
if(tab[x+1][y]==1)ilosc++;
if(tab[x-1][y+1]==1)ilosc++;
if(tab[x][y+1]==1)ilosc++;
if(tab[x+1][y+1]==1)ilosc++;
if(ilosc==3)
{tab[x][y]=1;}
}
if(tab[x][y]==1)
{
if(tab[x][y-1]==1)ilosc++;
if(tab[x-1][y]==1)ilosc++;
if(tab[x-1][y-1]==1)ilosc++;
if(tab[x+1][y-1]==1)ilosc++;
if(tab[x+1][y]==1)ilosc++;
if(tab[x-1][y+1]==1)ilosc++;
if(tab[x][y+1]==1)ilosc++;
if(tab[x+1][y+1]==1)ilosc++;
if(ilosc==2 || ilosc==3)
{tab[x][y]=1;}
if(ilosc<2)
{tab[x][y]=0;}
if(ilosc>=4)
{tab[x][y]=0;}
}
}
}

cout<<endl;
wyswietlanie(tab);
return 0;
}

int wygeneruj()
{
int tab[25][25],suma=0;
srand(time(0));
for(int i=0;i<25;i++)
{
cout<<endl;
for(int j=0;j<25;j++)
{
tab[i][j]=rand()%2;
if(tab[i][j]==1)suma++;
cout<<tab[i][j]<<" ";
}
}
cout<<endl<<endl<<"Zywych "<<suma<< " komorek";
zmienianie(tab);
return 0;
}
int main(int argc, char *argv[])
{
wygeneruj();
cout<<endl;
system("pause");
return 0;
}

dzieki za info GDZIE wstawić pętlę przekazującą kolejne przeliczenia "przeżywania" względem poprzedniej tablicy no i może licznik tych przejść :piwo:

może ma ktos inny pomysła na pętlę, bo wiem o co chodzi w teorii a w praktyce k***a

andy 31.01.2011 10:15

@icemac wrzuć to na wklej.org z formatowaniem kodu to zobaczę. W tej postaci odechciewa się na to spojrzeć ;)

icemac 31.01.2011 10:59

Cytat:

Napisany przez andy (Post 1142629)
@icemac wrzuć to na wklej.org z formatowaniem kodu to zobaczę. W tej postaci odechciewa się na to spojrzeć ;)

oryginał
http://wklej.org/id/467670/

mój kod ...
http://wklej.org/id/467669/

może być ??

:)

andy 31.01.2011 11:05

Cytat:

może być ??
A formatowanie kodu to gdzie jest? Za pisanie kodu w taki sposób obcinają palce na studiach ;p
Swojego nie musisz wrzucać daj tylko oryginał.
(Zerknąłem na kod i mogę powiedzieć, że wiele rzeczy jest źle rozwiązana ;p)

btw. Musi to być kod strukturalny czy może być obiektowy?

icemac 31.01.2011 11:29

może być obiektowo jak będzie dość "łatwo" napisane no i może z przypsami ;)

http://wklej.org/id/467674/ - oryginał tak jak mam w dev c++ ;)


Wszystkie czasy w strefie CET. Aktualna godzina: 14:58.

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, vBulletin Solutions Inc.